考虑两个n乘n-1矩阵和一个n乘1的向量(例如,让我们按照A,B和v的顺序调用它们)。 v的元素是零或一。如果元素v(m,1)等于1,我想用B(1:m-1,m-1)和元素A(m + 1)替换元素A(1:m-1,m-1) :n,m)乘以B(m + 1:n,m)。 我怎样才能做到这一点?有人可以帮忙吗?为了使问题更清楚,请考虑以下示例。
示例:
A=[1,2,3;4,5,6;7,8,9;12,13,14]
B=[3,4,5;6,7,8;9,10,11;6,5,3]
v=[0,1,0,1]
结果应该是:
result = [3,2,5; 4,5,8; 7,10,11; 12,5,14]
答案 0 :(得分:0)
您可以使用find
来实现所需的结果,for
返回非零元素的索引,以及R = A; % assuming you've set A, B and v already.
n = size(A,1);
v1 = find(v);
for i=1:length(v1)
m=v1(i);
if m>1
R(1:m-1,m-1)=B(1:m-1,m-1);
end
if m<n
R(m+1:end,m)=B(m+1:end,m);
end
end
- 循环:
v
正如我在评论中指出的那样,如果n-1
v(n-1)=1
m+1:end
不是有效的索引范围,则{{1}}的长度必须为{{1}}。
根据评论编辑以进行第二次作业。
答案 1 :(得分:0)
以下是使用逻辑索引的替代方法:
temp = A;
ind = 1:size(v,2);
for k = ind(v==1)
if k<=size(A,2)+1
A(1:k-1,k-1) = B(1:k-1,k-1);
B(1:k-1,k-1) = temp(1:k-1,k-1);
if k<size(A,2)
A(k+1:end,k) = B(k+1:end,k);
B(k+1:end,k) = temp(k+1:end,k);
end
end
end