matlab编写LDR分解程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

程序运行步骤:

1、将源程序复制到Matlab的Command Window窗口中,如下图所示:

2、回车,则出现如下图所示提示:

3、输入一个矩阵如下图所示:

4、回车,得出如下图所示结果:

A=input('请输入一个矩阵A\n'); %提示输入一个矩阵A b=size(A); %b(1)表示A的行数,b(2)表示A的列数n=b(1);

%判断矩阵阶次,是否方阵

if b(1)~=b(2)

error('不能分解,非方阵')

end

%判断矩阵是否可逆

if n~=rank(A)

error('不能分解,非满秩矩阵')

end

%判断矩阵是否有惟一LDR分解

for k=1:n-1

d=A(1:k,1:k);

D(k)=det(d);

if(D(k)==0)

error('某阶顺序主子式为0')

end

end

%初始化,定义n阶方阵L,R

L=zeros(n,n);

R=zeros(n,n);

%定义L中的主对角线元素均为1

for i=1:n

L(i,i)=1;

end

%开始进行Doolittle分解,按照紧凑格式的公式编程

for k=1:n

for j=k:n

sum=0;

for t=1:k-1

sum=sum+L(k,t)*R(t,j);%求和

end

R(k,j)=A(k,j)-sum; %计算R的第k行元素

end

for i=k+1:n

sum=0;

for t=1:k-1

sum=sum+L(i,t)*R(t,k); %求和

L(i,k)=(A(i,k)-sum)/R(k,k); %计算L的第k列end

end

E=eye(n); %定义一个n阶单位矩阵

L=L*E %在Matlab中输出L矩阵

D=zeros(n,n); %定义D为n阶方阵

%构造D为对角矩阵

for i=1:n

D(i,i)=R(i,i);

end

D=D*E %在Matlab中输出D矩阵

R=inv(D)*R %求矩阵R

相关文档
最新文档