matlab中矩阵LDLT分解与Cholesky分解.docx

matlab中矩阵LDLT分解与Cholesky分解.docx

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
matlab中矩阵LDLT分解与Cholesky分解

矩阵LDLT分解与Cholesky分解:矩阵的LDLT消去函数的程序代码:%矩阵的LDLT分解function [s,l,d]=ldlt(a)s=1;l=0;d=0;%判断矩阵是否对称if a~=a' %矩阵不对称,输出错误信息 s=0;else b=diag(a); %列向量b存放矩阵a的对角元素,矩阵D的元素也放在该向量 n=size(a,1); %矩阵a维数nfor k=1:n b(k)=b(k)-(a(k,1:k-1).^2)*b(1:k-1);if ~b(k) %如果矩阵D的对角元素出现0,出现错误,停止计算 s=0;break else %进行递推 a(k+1:n,k)=(a(k+1:n,k)-a(k+1:n,1:k-1)*(b(1:k-1).*a(k,1:k-1)'))/b(k);endendif s l=tril(a)-diag(diag(a))+diag(b); d=diag(b);endend矩阵的Cholesky消去函数程序代码:%矩阵的cholesky分解function [s,g]=cholesky(a)s=1;g=0;%判断矩阵是否对称正定if a~=a'|min(eig(a))<=0 %矩阵不是对称正定,输出错误信息 s=0;else %矩阵对称正定 n=size(a,1); %矩阵a维数na(1,1)=a(1,1)^(1/2);for i=2:nfor j=1:i-1 a(i,j)=(a(i,j)-a(i,1:j-1)*a(j,1:j-1)')/a(j,j); %对角线下方元素计算end a(i,i)=(a(i,i)-a(i,1:i-1)*a(i,1:i-1)')^(1/2); %对角线元素计算end g=tril(a); %输出结果end主程序为:%计算方法上机第二题clear;clc;%输入矩阵am=1:20;[mm,nn]=meshgrid(m);a=min(mm,nn);%首先进行ldlt分解[s,l,d]=ldlt(a); %调用ldlt分解函数if ~s %分解不能进行,输出错误信息disp('Error!Theldlt decomposition cannot go!');elsedisp('The Matrix L is: ');disp(l); %输出矩阵Ldisp('The Matrix D is: ');disp(d); %输出矩阵Ddisp('The Matrix LT is: ');disp(l'); %输出矩阵LTend%进行cholesky分解[s,g]=cholesky(a); %调用cholesky分解函数if ~s %分解不能进行,输出错误信息disp('Error!Thecholesky decomposition cannot go!');elsedisp('The Matrix G is: ');disp(g); %输出矩阵Gdisp('The Matrix GT is: ');disp(g'); %输出矩阵Gend矩阵LDLT分解与Cholesky分解:%用追赶法解方程组function x=chase(a,b,c,d)n=length(b);for k=2:n %进行"追"a(k-1)=a(k-1)/b(k-1);b(k)=b(k)-a(k-1)*c(k-1);d(k)=d(k)-a(k-1)*d(k-1);endd(n)=d(n)/b(n);for k=n-1:-1:1 %进行"赶"d(k)=(d(k)-c(k)*d(k+1))/b(k);endx=d';主程序为:%计算方法上机第三题clear;clc;n=20;a=-1+zeros(1,n-1); %对角线下方的元素b=4+zeros(1,n); %对角线上的元素c=-1+zeros(1,n-1); %对角线上方的元素d=[3,2+zeros(1,n-2),3]; %右端向量d=chase(a,b,c,d);disp('The solution is:');disp(d); %输出解向量

文档评论(0)

liangyuehong + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档