南京邮电大学 数值代数实验.docx
《南京邮电大学 数值代数实验.docx》由会员分享,可在线阅读,更多相关《南京邮电大学 数值代数实验.docx(22页珍藏版)》请在冰豆网上搜索。
南京邮电大学数值代数实验
数值代数实验
数值线性代数实验一
一、实验名称:
矩阵的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-1
fori=k+1:
n
ifa(k,k)==0
return
end
m=a(i,k)/a(k,k);
forj=k+1:
n
a(i,j)=a(i,j)-m*a(k,j);
end
b(i)=b(i)-m*b(k);
end
det=det*a(k,k);
end
det=det*a(n,n);
fork=n:
-1:
1
forj=k+1:
n
b(k)=b(k)-a(k,j)*x(j);
end
x(k)=b(k)/a(k,k);
End
在matlab中输入如下:
结果如下:
方程组的精确解为x1=x2=…=x84=1.0000,与Gauss消去法求得的解差距很大,所得结果不够准确,计算简单但其消元过程有时不能进行到底而使求解出现解失真的情况。
数值线性代数实验二
一、实验名称:
实对称正定矩阵的的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:
n
L(k,1)=A(k,1)/L(1,1);
end
fork=2:
n-1
L(k,k)=sqrt(A(k,k)-sum(L(k,1:
k-1).^2));
fori=k+1:
n
L(i,k)=(A(i,k)-sum(L(i,1:
k-1).*L(k,1:
k-1)))/L(k,k);
end
end
L(n,n)=sqrt(A(n,n)-sum(L(n,1:
n-1).^2));%解下三角方程组Ly=b
y=zeros(n,1);
fork=1:
n
j=1:
k-1;
y(k)=(b(k)-L(k,j)*y(j))/L(k,k);
end%解上三角方程组L'x=y
x=zeros(n,1);
U=L';
fork=n:
-1:
1
j=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=b
L=zeros(n,n);%L为n*n矩阵
D=diag(n,0);%D为n*n的主对角矩阵
S=L*D;
fori=1:
n%L的主对角元素均为1
L(i,i)=1;
end
fori=1:
n
forj=1:
n%验证A是否为对称正定矩阵
if(eig(A)<=0)|(A(i,j)~=A(j,i))%A的特征值小于0或A非对称时,输出wrong
disp('wrong');break;end
end
end
Hilbert矩阵用MATLAB建立m文件Hil.m,程序如下:
functionb=Hil()
fork=1:
40
form=1:
40
s=0;
t=s+1/(k+m-1);
s=t;
end
b(k,1)=s;
end
在matlab中输入如下:
输出结果如下:
在输入:
输出为:
.....
问题3:
...
Gauss消去法所得的结果与平方根法和改进的平方根法求得的结果差距很大,而且Gauss消去法所得的结果大部分为零,显然平方根法和改进的平方根法求得的结果与方程的精确解比Gauss消去法的更接近,更准确。
但不管是哪一类算法都只能在预定的计算步骤内或给定的精度内得到近似解,有一定的误差。
数值线性代数实验三
一、实验名称:
矩阵的分解
二、实验目的:
应用改进的Gram—Schmidt方法和Householder变换的方法计算矩阵A的分解.其中rank=
三、实验内容与要求
输入:
的各列
输出:
的各列元素(存放在的相应位置上)以及的元素
数值线性代数实验四
一、实验名称:
用迭代法求解方程组及超松弛迭代和最佳松弛因子的确定.
二、实验目的:
应用Jacobi迭代法、Gauss-Seidel迭代法和超松弛迭代方法求解线性方程组Ax=b,并选择不同的松弛因子,观察松弛因子对松弛迭代法计算效果的影响.
三、实验内容与要求
将常微分方程()离散化得到差分方程Ax=b,取,应用Jacobi迭代法、Gauss-Seidel迭代法和超松弛迭代方法求解线性方程组,分别取,用SOR迭代法计算对应的数值解,并与精确解进行比较.写出这三种迭代法求解线性方程组的步骤,并对计算结果进行分析.
四、实验原理
将[0,1]区间n等分,方程离散化得差分方程
差分方程对应的系数矩阵和右端项分别为
其中
SOR迭代法的迭代矩阵和常数项分别为
SOR迭代法的迭代公式:
五、实验过程
利用Matlab语言实现SOR迭代公式的计算,分别对于,松弛因子在(1,2)范围内,先按步长0.1搜索,在最少迭代步数附近按步长0.01再搜索.
算法终止准则:
或者或者迭代次数.
记录四种情况下的计算结果,并找出最佳松弛因子的值,并观察松弛因子与间的关系.
欢迎您的下载,
资料仅供参考!
致力为企业和个人提供合同协议,策划案计划书,学习资料等等
打造全网一站式需求