我有一个应该完成此操作的代码:
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中该行的代码。是否可以这样做?我非常欣赏这些想法。谢谢。
答案 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语句。
祝你好运