中科院矩阵分析与应用大作业(完整版)实用资料.doc
上传人:天马****23 上传时间:2024-09-10 格式:DOC 页数:121 大小:3.7MB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

中科院矩阵分析与应用大作业(完整版)实用资料.doc

中科院矩阵分析与应用大作业(完整版)实用资料.doc

预览

免费试读已结束,剩余 111 页请下载文档后查看

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

中科院矩阵分析与应用大作业(完整版)实用资料(可以直接使用,可编辑完整版实用资料,欢迎下载)中科院矩阵分析与应用大作业按照上面建立函数文件,脚本文件。名字不要随便改,要改的话要同内部函数名一起修改。下面放代码,总共七段代码,第一个是主程序进行人机交互,其余为接口函数实现矩阵的各个分解功能。另外容我小小的收点下载券,毕竟花了大概8小时左右。%%矩阵分解:LU分解;QR分解(schmidt);Householder;Givens%%2021.11.22clc,clearall;Matrix=input('请输入需要进行分解的矩阵:');disp('请选择需要对矩阵进行的操作:');disp('1.LU分解');disp('2.QR分解');disp('3.Householder约简');disp('4.Givens约简');n=input('');clc;%清除命令窗口内容Matrix%显示输入矩阵%%分解操作switchncase1LUfactor(Matrix);%LU分解case2QR(Matrix);%QR分解case3houseHolder(Matrix);%householder约简case4endGivens(Matrix);%Givens约简functionLUfactor(A)[mn]=size(A);%判断矩阵是否为方阵ifm~=nenderror('矩阵非方阵,请重新输入!');%判断矩阵是否奇异ifdet(A)==0enderror('矩阵奇异,请重新输入!');%判断矩阵顺序主子式是否全不为0n=size(A,1);flagMat=zeros(n,1);fori=1:nifdet(A(1:i,1:i))==0endflagMat(i)=1;end%以顺序主子式是否含0来决定采用的LU分解方式ifany(flagMat)==0disp('顺序主子式均不为0,采用A=LU');disp('***LU分解结果***')[LU]=LUFull(A)elsedisp('顺序主子式存在0,采用PA=LU');disp('***LU分解结果***')[LUP]=LUPart(A)endfunction[L,U]=LUFull(A)%对矩阵A进行LU分解(完全主元法)U=zeros(size(A));U(1,:)=A(1,:);%L,U矩阵为输出变量;A矩阵为输入变量%对U尽可能初始化L=eye(size(A));%对L尽可能初始化L(2:end,1)=A(2:end,1)/A(1,1);n=size(A,1);fori=2:nforj=i:nend%Dolittle公式U(i,j)=A(i,j)-L(i,1:i-1)*U(1:i-1,j);fork=i:nendL(k,i)=(A(k,i)-L(k,1:i-1)*U(1:i-1,i))/U(i,i);endfunction[L,U,P]=LUPart(A)%对矩阵A进行LU分解(部分主元法)%L,U,P矩阵为输出变量,A矩阵为输入变量%对输入矩阵A重构n=size(A,1);B=zeros(n,1);fori=1:nendB(i,1)=B(i,1)+i;A=[AB];%目标矩阵tempMat=zeros(size(A));forj=1:n%第j列[~,row]=max(abs(A(j:end,j)));tempMat(j,:)=A(j,:);fori=j:nifi+1<=nendA([row+j-1j],:)=A([jrow+j-1],:);%第i行%找出第j列最大元素,返回所在行%交换最大元素行与第j行%将第j行元素复制到tempMat第j行tempMat(i+1,j)=A(i+1,j)/A(j,j);end%生成新的A(高斯消去)fork=j:nifk+1<=n%第k行ratio=-A(k+1,j)/A(j,j);endendendA(k+1,j+1:n)=ratio*A(j,j+1:n)+A(k+1,j+1:n);%提取U矩阵U=triu(tempMat(:,1:n),0);%提取L矩阵L=tril(tempMat(:,1:n),0);fori=2:nforj=1:(i-1)end%uppertriangle%lowertriangleL(i,j)=L(i,j)./L(j,j);end%完善L矩阵的对角线fori=1:nL(i,i)=1;end%提取P矩阵tempP=tempMat(:,n+1);P=zeros(n,n);fori=1:nendP(i,tempP(i))=1;%%判断是否能进行QR分解[rows,cols]=size(A);ifrank(A)~=colsenderror('该矩阵无法进