如果我在MATLAB中有一个函数,并且在其中有一个循环,它会计算两个变量,如:
for index = 1:1000,
var1 = 0.0;
var2 = zeros(size(someMatrix));
...
%some calculus...
...
end
如何定义函数以返回这两个变量,但是在循环中它们遭受的所有更改,例如
var1 = [1, 3, 5, 7]
var2 = some matrix,
因此该函数返回单个值。如何从循环中返回结果向量?
答案 0 :(得分:7)
如果我知道你想要在更高层次上做什么,我可能会给你更好的建议。当我读到这个问题时,我会问自己“他为什么要这样做?”。有可能有更好的方法来做你想做的事情。
话虽如此,我认为你正试图做这样的事情。
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
答案 1 :(得分:2)
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
...