2017-05-26 210 views
0

考慮兩個n乘n-1矩陣和n乘1的矢量(例如,讓我們按順序A,B和v調用它們)。 v的元素是零或一個。如果元素v(m,1)等於1,我想用B(1:m-1,m-1)和元素A(m + 1)替換元素A :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] 

結果應該是:

結果= [-3,2,5-; 4,5,8; 7,10,11; 12,5,14]

+0

你'v'爲4種元素以及A和B都是4×3。所以當v(4)= 1時,A(m + 1:n,m)超出範圍。 – jarmond

+0

是v有4個元素,所以不應該考慮與A(4 + 1:n,4)相關的第二個變化。因爲我在v(n)= 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 
0

可以acheive使用find所需的結果,它返回上非零元素的索引,和一個for -loop:

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不是有效的索引範圍。

編輯後根據意見進行第二次分配。

+0

的結果,所以在矩陣A中沒有元素n + 1,並且它足以代替第一個條件用B(1:m-1,m-1)替代元素A(1:m-1,m-1))。所以v是一個n乘1的向量。清楚嗎?請看這個例子。如果它不清楚,請告訴我 –