retourner plusieurs variables de sortie de la fonction Matlab
disons que j'ai une fonction:
function [ A, B, C ] = test(x, y, z)
A=2*x;
B=2*y;
C=2*z;
end
lorsque vous appuyez sur run, matlab ne renvoie que la première valeur des arguments de sortie - [A]
dans ce cas. Est-il une commande que je peux mettre dans ma fonction qui retourne automatiquement toutes les fonctions des arguments de sortie [A,B,C]
au lieu du premier argument.
Je sais que je peux taper dans ma commande windows [ A, B, C ] = test(x, y, z)
et d'obtenir toutes les valeurs, mais je suis paresseux, parfois, et voudrais juste appuyez sur Exécuter et obtenir automatiquement tous les valeur.
4 réponses
quelques options:
Ajouter un paramètre pour spécifier la sortie verbeuse de la console mais la définir à false par défaut:
function [ A, B, C ] = test(x, y, z, verbose)
if nargin = 3
verbose = false;
end;
A=2*x;
B=2*y;
C=2*z;
if verbose
fprintf('A = %f\nB = %f\nC = %f', A, B, C);
end;
end
ou les combiner en une seule sortie:
function output = test(x, y, z)
A=2*x;
B=2*y;
C=2*z;
output = [A, B, C]; %// Or {A;B;C} if they're not going to be the same size, but then it won't display anyway
end
ou si vous voulez vraiment, je suppose que vous pouvez écrire une fonction wrapper que vous utilisez sur votre fonction et elle affiche tous les trois pour vous que vous pouvez utiliser de façon générique sur n'importe quelle fonction. Mais cela ne semble guère utile.
une Autre option est d'utiliser assignin
pour enregistrer automatiquement un argument de sortie pour l'espace de travail
function [ A, B, C ] = test(x, y, z)
A=2*x;
B=2*y;
C=2*z;
assignin('base', 'A', A);
assignin('base', 'B', B);
assignin('base', 'C', C);
end
'base' est le nom de l'espace de travail principal utilisé lorsque vous appelez des variables depuis la fenêtre de commande.
de Cette façon, vous pouvez taper test(x,y,z)
dans l'espace de travail sans l' [A,B,C] =
partie et il vous donnera toutes les valeurs.
l'avantage de cela sur le combinage A, B et C dans une sortie est que vous aurez encore 3 variables séparées sauvegardées dans votre espace. Ceci est utile si A, B et c sont des tableaux ou des cellules. Un inconvénient de cette méthode est que si vous utilisez cette fonction à l'intérieur d'une autre fonction, elle n'utilisera que la valeur A. Par exemple:length(test(x,y,z))
vais juste donner la longueur de A.
a = cell{3, 1};
[a{:}] = test(x, y, z);
A = a{1};
B = a{2};
C = a{3};
MATLAB affichera automatiquement les variables / expressions qui ne se terminent pas par un ';'
.
donc si vous avez juste besoin d'afficher toutes ces valeurs, la façon la plus simple sera:
function [ A, B, C ] = test(x, y, z)
A=2*x % no ';' will print A's value automatically
B=2*y % no ';' will print B's value automatically
C=2*z % no ';' will print C's value automatically
end