3

如果我在MATLAB中有一个函数,并且在其中我有一个循环,它会计算两个变量,例如:

for index = 1:1000,
    var1 = 0.0;
    var2 = zeros(size(someMatrix));
    ...
    %some calculus...
    ...
end

如何定义函数以返回这两个变量,但是在循环中它们遭受的所有更改,例如

var1 = [1, 3, 5, 7]
var2 = some matrix,

因此,该函数返回单个值。如何返回从循环中获得的结果向量?

4

2 回答 2

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
于 2011-02-10T00:10:20.453 回答
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


...
于 2011-02-09T22:20:38.487 回答