假设两个实对称矩阵A和B,如果存在一个可逆的矩阵X, XAX'=B,已知A和B,知道怎么用matlab求X?
本例中数据如下:
A=[0.287402 0 0
0 0.483209 0
0 0 0.000025];
B=[0.287402 -0.028039 -0.0000727
-0.028039 0.483209 0.001299
-0.0000727 0.001299 0.000025];
下面是对一个对称矩阵求转换后的对角矩阵的matlab程序
程序来自
《基于Matlab的实对称矩阵对角化》一文,作者 计文军等
其中a的对称矩阵,d是对角化后的矩阵,p是相应的合同变换,满足pTap=d
function [p,d]=juzheng(a)
[m,n]=size(a);
a=[a eye(n)]';
for k=1:n
if a(k,k)==0
for r=(k+1):n
if a(k,r)~=0
for i=k:n
a(k,i)=a(k,i)+a(r,i);
end
for i=k:2*n
a(i,k)=a(i,k)+a(i,r);
end
break
end
end
end
for i=k+1:n
l=a(i,k)/a(k,k);
for j=k:n
a(i,j)=a(i,j)-l*a(k,j);
end
for j=k:2*n
a(j,i)=a(j,i)-l*a(j,k);
end
end
end
p=a(n+1:2*n,1:n);
d=a(1:n,1:n);
return
下面在脚本文件中调用juzheng.m函数
A=[0.287402 0 0
0 0.483209 0
0 0 0.000025];
B=[0.287402 -0.028039 -0.0000727
-0.028039 0.483209 0.001299
-0.0000727 0.001299 0.000025];
[p,d]=juzheng(B);
X=(inv(p))';% 这一步是将计算的结果转成本例中我所需要的形式
%你可以验证X*A*X'=B
完毕!
感谢文章作者