1

我想替换matlab中两个矩阵之间的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

一个=

 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

1

您要求输出x,但它从未在您的函数中设置。此外,您不要在行b(i,i)=n(i)a(j,j)=m(j). 此外,在matlab中i定义i^2 = -1,您正在重新定义它,尽量避免这种情况。

function [aout, bout] = may( a,b )

l1=length(diag(a));
l2=length(diag(b));
n=diag(a);
m=diag(b);

for ii=1:l2
    b(ii,ii)=n(ii);

end

bout = b;

for jj=1:l1
    a(jj,jj)=m(jj);

end

aout = a;

end
于 2013-06-07T14:59:04.383 回答
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 回答