1

たとえば、matlab の 2 つの行列間の diag を置き換えたい: a =

 1     1     1
 1     1     1
 1     1     1

b =

 2     2     2
 2     2     2
 2     2     2

関数でこれを行いたい: b =

 1     2     2
 2     1     2
 2     2     1

a =

 2     1     1
 1     2     1
 1     1     2

しかし、最終結果を取得する代わりに、 for ループ内のすべての中間結果を取得しています // 何が間違っていますか?

function [x] = may( a,b )
l1=length(diag(a));
l2=length(diag(b));
n=diag(a);
m=diag(b);

for i=1:l1
b(i,i)=n(i)

end

for j=1:l1
a(j,j)=m(j)

end
end
4

2 に答える 2

0

行列が同じサイズで正方形であると仮定すると、論理インデックスを使用できます。

function [a, b] = may(a,b)
    diag_idx = logical(eye(size(a,1)));

    adiag = a(diag_idx);
    a(diag_idx) = b(diag_idx);
    b(diag_idx) = adiag;
end
于 2013-06-07T15:55:27.147 に答える