在条件matlab中改变两个矩阵的元素

时间:2017-05-26 04:46:20

标签: matlab matrix

考虑两个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]

2 个答案:

答案 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