【发布时间】:2013-07-02 08:23:32
【问题描述】:
我在 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 将不会开始,一旦一个值大于零,则停止。
我希望这是有道理的,并且我提供了足够的信息
感谢您的时间和帮助。
【问题讨论】:
-
如果每列的初始值不同,为什么你认为你会得到这个期望的结果(使用这段代码)?
-
因为我希望它为每一行添加不同的数量,所以第 1 行将添加 2,第 2 行将添加 5。这有意义吗?
-
@user2519890:对于您示例中的简单添加:为什么不做
inds = Vf(:,3)<0; Vf(inds,:) = bsxfun(@minus, Vf(inds,:), Vf(inds,3));? -
是的,这是有道理的。但是您的增量是在整个矩阵 Vf 上,您需要分别评估每行的条件和增量。看看罗迪的回答
-
Adiel,是的,这是我的问题,不知道如何分别查看每一行,我知道问题出在哪里,但不知道解决方案。是的,罗迪给出的解决方案正是我所需要的。不过谢谢。
标签: arrays matlab matrix while-loop