我想在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
a =
2 1 1
1 2 1
1 1 2
但是我没有得到最终结果,而是在for循环中获得所有inbetween结果// 我做错了什么?
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
答案 0 :(得分:1)
您要求输出x
,但它从未在您的函数中设置。此外,您不在行b(i,i)=n(i)
和a(j,j)=m(j)
中使用分号。此外,i
在matlab中被定义为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
答案 1 :(得分:0)
如果您假设矩阵具有相同的大小和方形,则可以使用logical indexing:
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