在if语句MATLAB中添加行到矩阵

时间:2016-03-05 20:21:19

标签: matlab if-statement for-loop matrix iteration

我有一个应该完成此操作的代码:

A = [2;3;4;5;6;7];
b = 2;
B(10).b = zeros(6,1);

for i = 1:10
    C = A;
    B(i).b = C.*(b^i);
    if i>1
        if B(i).b(1,1)-B(i-1).b(1,1)>50
            C(7) = b;
        end
    end
end

问题在于,在每次迭代中,C矩阵都被矩阵A中的值替换。这是我的代码的简化版本,但本质就在这里,代码应该完全按照这一点,如果标准是遇到了,在矩阵C中添加另一行并继续执行矩阵C中该行的代码。是否可以这样做?我非常欣赏这些想法。谢谢。

2 个答案:

答案 0 :(得分:1)

您可以将b附加到C并使用新创建的值覆盖C的值:

if i>1
    if B(i).b(1,1)-B(i-1).b(1,1)>50
        C = [C; b];
    end
end

只要C& C这个就可以正常工作。 b不是太大。

答案 1 :(得分:0)

建议不要在执行期间更改矩阵大小,因为运行时间会松动。最好的解决方案是在一开始就估算矩阵的大小。

如果没有其他可能性,您可以通过以下代码添加一行:

A = [1 2; 3 4];
A = vertcat(A,[2 3]); 

同样适用于列:

A = [1 2; 3 4];
A = horzcat(A,[2; 3]);

要删除一行,只需写入(此处为第2行):

A(2,:) = [];

同样适用于列:

A(:,2) = [];

要仅更改矩阵的选择性部分,可以执行以下操作(某些示例):

A(1:2,1) = [2 3]; % change row
A(1,1:2) = [2;3]; % change column
A(2,1) = 5; % change single cell

这正是拉希德对陈述C(1:6)= A;所做的。因为它只是一个列向量,所以索引引用列。它相当于C(1,1:6)= A;

然后,只有一个实现问题才能使用您所需条件的if语句。

祝你好运