2014-02-18 6 views
8

Допустим, у меня есть функция:вернуть несколько переменных вывода из функции Matlab

function [ A, B, C ] = test(x, y, z) 
    A=2*x; 
    B=2*y; 
    C=2*z; 
end 

При нажатии кнопки запуска, MATLAB возвращает только первое значение из выходных аргументов - [A] в этом случае. Есть ли команда, которую я могу встроить в свою функцию, которая автоматически возвращает все аргументы вывода функции [A,B,C] вместо первого аргумента. Я знаю, что могу ввести в мои окна команд [ A, B, C ] = test(x, y, z) и получить все значения, но иногда я ленив и хотел бы просто нажать «Выполнить» и автоматически получить все значения.

ответ

8

Некоторые опции:

Добавить параметр, чтобы указать подробный вывод на консоль, но установить его ложь по умолчанию:

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 

или объединить их в один выход:

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 

или если вы действительно действительно хотите, чтобы я мог написать функцию-оболочку, которую вы вызываете в своей функции, и она отображает все три для вас, которые вы могли бы использовать в общих чертах для любой функции. Но это вряд ли стоит.

+0

Если вы используете '{A; B; C} 'вы можете отобразить их, добавив« A = output {1} »,« B = output {2} »и« C = output {3} »в конец кода без точек с запятой. – Blue7

0

MATLAB автоматически выведет переменные/выражения, которые не заканчиваются ';'.

Так что, если вам просто нужно, чтобы отобразить все эти значения, самый простой способ будет:

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

Единственная проблема заключается в том, что это всегда будет печатать значения, даже если вы их не хотите. – Dan

+0

@ Дань Да. Но подходит для OP для вывода всех значений. : P – herohuyongtao

2

Другим вариант заключается в использовании assignin для автоматического сохранения выходного аргумента в рабочей области

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» - это имя основной рабочей области, используемой при вызове переменных из окна команд.

Таким образом, вы можете ввести test(x,y,z) в рабочее пространство без части [A,B,C] =, и оно все равно даст вам все значения.

Преимущество этого при расчесывании A, B и C в один выход состоит в том, что у вас все еще будет 3 отдельных переменных, сохраненных в вашем рабочем пространстве. Это полезно, если A, B и C являются массивами или ячейками. Недостатком этого метода является то, что если вы используете эту функцию внутри другой функции он все равно будет использовать только значение A. Например: length(test(x,y,z)) будет просто дать длину А.

1
a = cell{3, 1}; 
    [a{:}] = test(x, y, z); 
    A = a{1}; 
    B = a{2}; 
    C = a{3}; 
+0

Выходы функции Matlab находятся в формате ячейки, поэтому вы можете определить данные ячейки с такими же размерами, как и выход функции, и использовать ее как одну переменную для хранения всех выходов более структурированным способом. – wshan

+0

wshan, спасибо за ваш быстрый ответ. Я вообще не знаю о Matlab, но вы можете отредактировать свой ответ и обновить его с такой же информацией, как у вас. Это сделает этот ответ более понятным и понятным для других пользователей. Однако я дам свой +1 для вашего ответа, если вы сможете улучшить свой ответ. – Hemang

+0

Просто убедитесь, что ваш ответ не дублирует другие (существующие) ответы.Или если вы хотите дать более лучший ответ (должен уместен вопрос), тогда объясните, почему этот ответ является более лучшим ответом. – Hemang

Смежные вопросы