南京邮电大学数值代数实验

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

数值代数实验数值线性代数实验一一、实验名称:矩阵的LU分解.二、实验目的:用不选主元的LU分解和列主元LU分解求解线性方程组Ax=b,并比较这两种方法.三、实验内容与要求(1)用所熟悉的计算机语言将不选主元和列主元LU分解编成通用的子程序,然后用编写的程序求解下面的84阶方程组将计算结果与方程组的精确解进行比较,并就此谈谈你对Gauss消去法的看法.(2)写出追赶法求解三对角方程组的过程,并编写程序求该实验中的方程组Gauss消去法:用消去法解方程组的基本思想是用逐次消去未知数的方法把原来方程组Ax=b化为与其等价的三角方程组,而求解三角方程组就容易了。换句话说,上述过程就是用行的初等变换将原方程组系数矩阵化为简单形式,从而将求解原方程组的问题转化为求解简单方程组的问题。利用Gauss消去法对线性方程组Ax=b进行求解。用MATLAB建立m文件DelGauss.m,程序如下:functionx=DelGauss(a,b)[n,m]=size(a);nb=length(b);det=1;x=zeros(n,1);fork=1:n-1fori=k+1:nifa(k,k)==0returnendm=a(i,k)/a(k,k);forj=k+1:na(i,j)=a(i,j)-m*a(k,j);endb(i)=b(i)-m*b(k);enddet=det*a(k,k);enddet=det*a(n,n);fork=n:-1:1forj=k+1:nb(k)=b(k)-a(k,j)*x(j);endx(k)=b(k)/a(k,k);End在matlab中输入如下:结果如下:方程组的精确解为x1=x2=…=x84=1.0000,与Gauss消去法求得的解差距很大,所得结果不够准确,计算简单但其消元过程有时不能进行到底而使求解出现解失真的情况。数值线性代数实验二一、实验名称:实对称正定矩阵的A的Cholesky分解.二、实验目的:用平方根法和改进的平方根方法求解线性方程组Ax=b.三、实验内容与要求用所熟悉的计算机语言将Cholesky分解和改进的Cholesky分解编成通用的子程序,然后用编写的程序求解对称正定方程组Ax=b,其中(1)b随机的选取,系数矩阵为100阶矩阵(2)系数矩阵为40阶Hilbert矩阵,即系数矩阵A的第i行第j列元素为,向量b的第i个分量为(3)用实验一的程序求解这两个方程组,并比较所有的计算结果,然后评价各个方法的优劣。平方根法:平方根法就是利用对称正定矩阵的三角分解而得到的求解对称正定方程组的一种有效方法。平方根法递推公式可以证明对于对称正定矩阵A,可以唯一地分解成A=LLT,其中L是非奇异下三角形矩阵。模型二:利用平方根法对线性方程组Ax=b进行求解。用MATLAB建立m文件pingfg.m,程序如下:function[x]=pingfg(A,b)%Cholesky分解[n,n]=size(A);L=zeros(n,n);%实际上不用为L申请空间,使用A即可L(1,1)=sqrt(A(1,1));fork=2:nL(k,1)=A(k,1)/L(1,1);endfork=2:n-1L(k,k)=sqrt(A(k,k)-sum(L(k,1:k-1).^2));fori=k+1:nL(i,k)=(A(i,k)-sum(L(i,1:k-1).*L(k,1:k-1)))/L(k,k);endendL(n,n)=sqrt(A(n,n)-sum(L(n,1:n-1).^2));%解下三角方程组Ly=by=zeros(n,1);fork=1:nj=1:k-1;y(k)=(b(k)-L(k,j)*y(j))/L(k,k);end%解上三角方程组L'x=yx=zeros(n,1);U=L';fork=n:-1:1j=k+1:n;x(k)=(y(k)-U(k,j)*x(j))/U(k,k);End模型三:利用改进的平方根法对线性方程组Ax=b进行求解。用MATLAB建立m文件ave.m,程序如下:function[x]=ave(A,b,n)%用改进平方根法求解Ax=bL=zeros(n,n);%L为n*n矩阵D=diag(n,0);%D为n*n的主对角矩阵S=L*D;fori=1:n%L的主对角元素均为1L(i,i)=1;endfori=1:nforj=1:n%验证A是否为对称正定矩阵if(eig(A)=0)|(A(i,j)~=A(j,i))%A的特征值小于0或A非对称时,输出wrongdisp('wrong');break;endendendHilbert矩阵用MATLAB建立m文件Hil.m,程序如下:functionb=Hil()fork=1:40form=1:40s=0;t=s+1/(k+m-1);s=t;endb(k,1)=s;end在matlab中输入如下:输出结果如下:在输入:输出为:.....问题3:...Gauss消去法所得的结果与平方根法和改进的平方根法求得的结果差距很大,而且Gauss消去法所得的结果大部分为零,显然平方根法和改进的平方根法求得的结果与方程的精确解比Gauss消去法的更接近,更准确。但不管是哪一类算法都只能在预定的计算步骤内或给定的精度内得到近似解,有一定的误差。数值线性代数实验三一、实验名称:矩阵A的QR分解二、实验目的:应用改进的Gram—Schmidt方法和Householder变换的方法计算矩阵A的QR分解.其中),()(nmRaAnmijrankA=n三、实验内容与要求输入:A的各列),,1,],,[(,,,121njaaaaaaTmjjjn输出:Q的各列元素(存放在A的相应位置上)以及R的元素),,,,,1(nijnirij数值线性代数实验四一、实验名称:用迭代法求解方程组及超松弛迭代和最佳松弛因子的确定.二、实验目的:应用Jacobi迭代法、Gauss-Seidel迭代法和超松弛迭代方法求解线性方程组Ax=b,并选择不同的松弛因子,观察松弛因子对松弛迭代法计算效果的影响.三、实验内容与要求将常微分方程22(0)0,(1)1dydyadxdxyy(01a)离散化得到差分方程Ax=b,取10.5,100,anhn,应用Jacobi迭代法、Gauss-Seidel迭代法和超松弛迭代方法求解线性方程组,分别取1,0.1,0.01,0.0001,用SOR迭代法计算对应的数值解,并与精确解进行比较.写出这三种迭代法求解线性方程组的步骤,并对计算结果进行分析.四、实验原理将[0,1]区间n等分,方程离散化得差分方程211()(2)iiihyhyyah差分方程对应的系数矩阵和右端项分别为20222(1)(1)(1)1(2)(2)(2)(2)()nnnnhhahyhhahAbhhahhahhy其中0(0),(1).nyyyySOR迭代法的迭代矩阵和常数项分别为11()[(1)],()BDLUDfDLbSOR迭代法的迭代公式:1kkyByf五、实验过程利用Matlab语言实现SOR迭代公式的计算,分别对于1,0.1,0.01,0.0001,松弛因子在(1,2)范围内,先按步长0.1搜索,在最少迭代步数附近按步长0.01再搜索.算法终止准则:1410kkyy或者410kyy或者迭代次数1000.记录四种情况下的计算结果,并找出最佳松弛因子的值,并观察松弛因子与间的关系.

1 / 21
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功