Эта функция MATLAB возвращает вектор результатов
Если у меня есть функция в MATLAB, и внутри нее у меня есть цикл, который вычисляет две переменные, что-то вроде:
for index = 1:1000,
var1 = 0.0;
var2 = zeros(size(someMatrix));
...
%some calculus...
...
end
Как определить функцию для возврата этих двух переменных, но со всеми изменениями, которые они перенесли в цикле, как
var1 = [1, 3, 5, 7]
var2 = some matrix,
Так что вместо этого функция возвращает единственное значение. Как вернуть вектор результатов, полученных из цикла?
2 ответа
Если бы я знал, что вы пытаетесь сделать на более высоком уровне, я мог бы дать вам лучший совет. Когда я читаю этот вопрос, я спрашиваю себя: "Зачем ему это делать?". Скорее всего, есть гораздо лучший способ сделать то, что вы пытаетесь сделать.
При этом, я думаю, вы пытаетесь сделать что-то подобное.
function [x y] = foo
x = 0;
y = 0;
for i = 1:100
if x(end)<i
x(end+1)=i^2;
end
if y(end)^3<x(end)
y(end+1)=sqrt(x(end));
end
end
>> [x y] = foo
x =
0 1 4 25 676
y =
0 1 2 5 26
Я не говорю, что эта функция - хороший способ сделать то, что вы пытаетесь сделать, но я думаю, что она выполняет работу. Если это произойдет, оставьте комментарий, тогда, возможно, кто-то другой может пройти мимо и сказать вам, как сделать это более эффективно / безопаснее.
Решение, которое я предоставил, будет подвержено проблемам. Если ваша переменная дважды изменяется в одном и том же цикле, хотите вы это увидеть или нет? Если вы обновите один элемент матрицы, вы хотите увидеть это или нет? Могут ли ваши переменные изменить размеры или типы в цикле? Если переменные не изменяют значения в цикле, можете ли вы включить эти значения в любом случае?
Возможно, это решение будет работать лучше для того, что вы пытаетесь сделать:
function [xout yout] = foo
n=100;
x = 0;
y = 0;
xout = repmat(x,n,1);
yout = repmat(y,n,1);
for i = 1:n
if x<i
x=i^2;
end
if y^3<x
y=sqrt(x);
end
xout(i)=x;
yout(i)=y;
end
xout = unique(xout);
yout = unique(yout);
>> [x y] = foo
x =
1
4
25
676
y =
1
2
5
26
function [var1 var2] = my_func
for n=1:5
var1(n) = 2*n - 1;
var2(:,:,n) = rand(3); %create random 3x3 matrices
end
Затем вы можете вызвать функцию, как это
>> [first second] = my_func
first =
1 3 5 7 9
second(:,:,1) =
0.3371 0.3112 0.6020
0.1622 0.5285 0.2630
0.7943 0.1656 0.6541
second(:,:,2) =
0.6892 0.0838 0.1524
0.7482 0.2290 0.8258
0.4505 0.9133 0.5383
...