0

我在 Matlab(2012) 中有一个矩阵,有 3 列和 X 行,X 由用户定义,因此每次都不同。对于这个例子,虽然我将使用一个固定的 5x3 矩阵。

所以我想对矩阵中的每一行执行一个迭代函数,而第三列中的值低于某个值。然后将新值存储在同一矩阵中,因此覆盖原始值。

下面的代码是问题的简化版本。

M=[-2 -5 -3 -2 -4]; %Vector containing random values

Vf_X=M+1; %Defining the first column of the matrix
Vf_Y=M+2; %Defining the secound column of the matrix
Vf_Z=M; %Defining the third column of the matrix

Vf=[Vf_X',Vf_Y',Vf_Z']; %Creating the matrix

while Vf(:,3)<0 
Vf=Vf+1;
end
disp(Vf)

我得到的结果是

 1     2     0
-2    -1    -3
 0     1    -1
 1     2     0
-1     0    -2

理想情况下,我想得到这个结果

 1     2     0
 1     2     0
 1     2     0
 1     2     0
 1     2     0

如果任何值一开始就大于零,则 while 将不会开始,并且一旦一个值大于零就停止。

我希望这是有道理的,我已经提供了足够的信息

感谢您的时间和帮助。

4

1 回答 1

0

您当前的问题是,在第三行中的任何值打破条件的那一刻,您就停止了迭代。如果我错了,请纠正我,但我认为你想要的是继续剩余的行进行迭代,直到条件被所有第三列打破。

你可以这样做:

inds = true(size(Vf,1),1);
while any(inds)
    Vf(inds,:) = Vf(inds,:)+1;
    inds = Vf(:,3) < 0;
end

当然,对于你提供的简单加法,还有更好更快的方法:

inds = Vf(:,3)<0; 
Vf(inds,:) = bsxfun(@minus, Vf(inds,:), Vf(inds,3));

但是对于一般功能,while上面的方法可以解决问题。

于 2013-07-02T08:41:49.693 回答