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.

8
demandé sur Dan 2014-02-18 19:21:06

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.

8
répondu Dan 2014-02-18 15:37:28

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.

3
répondu Blue7 2014-03-04 16:19:23
   a = cell{3, 1};
   [a{:}] = test(x, y, z);
   A = a{1};
   B = a{2};
   C = a{3}; 
1
répondu wshan 2015-01-22 08:23:56

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
0
répondu herohuyongtao 2014-02-18 15:46:08