数值分析课程设计方案实验报告.docx
《数值分析课程设计方案实验报告.docx》由会员分享,可在线阅读,更多相关《数值分析课程设计方案实验报告.docx(9页珍藏版)》请在冰点文库上搜索。
![数值分析课程设计方案实验报告.docx](https://file1.bingdoc.com/fileroot1/2023-6/9/80fa43a9-fa1d-4bcd-8203-15351cba79eb/80fa43a9-fa1d-4bcd-8203-15351cba79eb1.gif)
数值分析课程设计方案实验报告
数值分析课程设计实验报告
姓名:
陈浩
学号:
081002102
班级:
091002
指导老师:
任林源
完成日期:
2011-7
目录
一丶概述________________________________________
二丶设计内容____________________________________
三丶设计过程____________________________________
四丶主要代码____________________________________
五丶结果显示____________________________________
六丶结果验证____________________________________
七丶设计总结____________________________________
实验一:
Gauss消去法和Gauss选列主元消去法
一丶概述
1.1设计名称:
Gauss消去法和Gauss选列主元消去法
1.2设计目的:
数值分析课本中的最基础解线性方程组的方法Gauss消去法和Gauss选列主元消去法,随着对他们的深入研究发现他们也有很多缺点.设计这次试验是为了找出这两者之间的区别。
加强对这两种算法的了解和掌握,还有锻炼分析问题,解决问题的能力,理解和掌握相关算法的原理执行并完成程序设计.
二丶设计内容、
编程试验Gauss消去法和Gauss选列主元消去法;对二者算法进行比较;
三丶设计过程
3.1Gauss消去法
3.1.1消去法实现:
根据消去法的原理,编写Matlab程序,并运行,然后带入数据算出结果,再比较.
3.1.2Gauss消去法的原理:
方程组:
A*x=bA为矩阵A=[a(11)a(12)…a(1n);
a(21)a(22)…a(2n);
……………………
a(n1)a(n2)…a(nn)]
b=[b1b2…bn]
1.回带过程
用行列式的初等行变换把A化为上三角矩阵,则可以取得xn的值,有xn的值则可以带入上一式中求出x(n-1)的值,以此类推则可以求得xi的值则递推公式
xn=un,n-1/unn
xi=1/uii(ui,n+1-(ui,i+1xi+1+…..+uinxn))
3.2Gauss选列主元消去法
3.2.1原理:
选列主元消去法就是在系数矩阵中按列选取绝对值最大的值作为主元素,然后交换所在行与主元素所在行的位置,再按顺序消去法进行消元。
四丶主要代码:
4.1Gauss消去法主要代码
functionx=hanxiaogu(A,b)
n=length(b);
fori=1:
n-1
fork=i+1:
n
forj=i+1:
n
ifabs(A(i,i))<10^(-6)
warning('分母为零不能计算!
');
return;
else
A(k,j)=A(k,j)-A(i,j)*A(k,i)/A(i,i);
end
end
b(k)=b(k)-b(i)*A(k,i)/A(i,i);
A(k,i)=0;
end
end
%回代求解
x(n)=b(n)/A(n,n);
fori=n-1:
-1:
1
sum=0;
forj=i+1:
n
sum=sum+A(i,j)*x(j);
end
x(i)=(b(i)-sum)/A(i,i);
end
end
4.2Gauss选列主元消法主要代码
functionx=Gaussxiaoqumethod(A,b)
%用高斯消去法解线性方程组A*x=b%x是未知量
n=length(b);
x=zeros(n,1);
c=zeros(1,n);
%寻找最大元
t=0;
fori=1:
n-1
max=abs(A(i,i));
m=i;
forj=i+1:
n
ifmaxmax=abs(A(j,i));
m=j;
end
end
ifm~=i
fork=1:
n
c(k)=A(i,k);
A(i,k)=A(m,k);
A(m,k)=c(k);
end
t=b(i);
b(i)=b(m);
b(m)=t;
end
fork=i+1:
n
forj=i+1:
n
A(k,j)=A(k,j)-A(i,j)*A(k,i)/A(i,i);
end
b(k)=b(k)-b(i)*A(k,i)/A(i,i);
A(k,i)=0;
end
end
%回带过程
x(n)=b(n)/A(n,n);
fori=n-1:
-1:
1
sum=0;
forj=i+1:
n
sum=sum+A(i,j)*x(j);
end
x(i)=(b(i)-sum)/A(i,i);
end
end
五丶结果显示:
5.1Gauss消去法和Gauss主元消去法结果相同
显示结果:
A=
4096123436782943
2246387240151129
364519263781643
1784400227863927
b=
406315504240-2557
x=hanxiaogu(A,b)
x=
-0.1818
-1.6694
2.2226
-0.4440
六丶结果验证
A*x=4063.3384
1550.2234
4240.2332
2556.6944
这说明Gauss消去法和Gauss主元消去法的计算精度是相当高的。
但是如果系数矩阵A是奇异矩阵,就会出错。
七丶设计总结
列主元消元法和Gauss消元法的计算过程基本上是一样的,只是在每一次消元前要选取系数矩阵的列主元,然后把方程组做适当的行交换再进行消元运算,这就保证了舍入误差不扩散。
列主元消元法克服了顺序Gauss消元的缺点,运算量也没有全主元消元法那么大,因此是解线性方程组的一种比较实用而且简单的方法。
实验二:
Gauss-Seidol迭代法线性方程组
一概述:
1.1设计说明:
Guass-Seidol迭代法
1.2设计目的:
深入学习和掌握Gauss-Seidol迭代法解线性方程组,会使用Matlab软件,回编写程序,并使用程序带入数据,计算出结果。
二丶算法内容:
编写程序,并使用Matlab程序运行程序,计算出结果
三丶设计过程
3.1Gauss-Seidol迭代法
3.1.1迭代法的实现:
根据迭代法的原理,编写Matlab程序,并运行,然后带入数据算出结果。
3.1.2Gauss-Seidol迭代法的原理:
线性方程组Ax=bA=(aij)n×n非奇异,b=[b…b]’≠o.将Ax=b变换成映射形式的同解组x=Gx+f
由此构造迭代公式x(k)=Gx(k-1)+f
对取定的初值向量想x(0),取得极限x*=Gx*+f
从而x*为A*x=b的解,当k充分大的时候x*=x(k).
四丶主要代码:
functionx=naspgs(A,b,x0,e,N)
%用途:
用向量(稀疏存储)形式的Gauss-Seidel迭代解线性方程组Ax=b
%格式:
x=naspgs(A,b,x0,e,N)A为系数矩阵,b为右端向量,x返回解向
%量,x0为初值向量(默认原点),e为精确度(默认1e-4),设置迭代次数上限
%以防发散(默认500)
n=length(b);
ifnargin<5,N=500;end
ifnargin<3,e=1e-4,end
ifnargin<2,x0=zeros(n,1);end
x0=sparse(x0);b=sparse(b);A=sparse(A);%使用稀疏矩阵存储
x=x0;x0=x+2*e;x0=sparse(x0);
k=0;A1=tril(A);iA1=inv(A1);
whilenorm(x0-x,inf)>e&kk=k+1;
x0=x;x=-iA1*(A-A1)*x0+iA1*b;
end
x=full(x);
ifk==N,warning('已达迭代次数上线');end
end
五丶结果显示
A=[17.031,-0.615,-2.991,1.007,-1.006,0.000;
-1.000,34.211,-1.000,-2.100,0.300,-1.700;
0.000,0.500,13.000,-0.500,1.000,-1.500;
4.501,3.110,-3.907,-61.705,12.170,8.999;
0.101,-8.012,-0.017,-0.910,4.918,0.100;
1.000,2.000,3.000,4.500,5.000,21.803]
b=[0.230,-52.322,54.000,240.236,29.304,-117.818]'
e=10^(-6)
x0=[000000]'
N=500
x=naspgs(A,b,x0,e,N)
x=[0.9071-1.96183.2937-4.50072.0293-5.2551]'
六丶结果验证:
A*x=[0.2301897-52.322009853.9995241.141902829.3037902117.8189953]
这说明Gauss-Seidol迭代法的精确度比较高,但是奇异矩阵还是会出错的。
七丶设计总结
直接法得到的解是理论上准确的,但是我们可以看得出,它们的计算量都是n3数量级,存储量为n2量级,这在n比较小的时候还比较合适,但是对于现在的很多实际问题,往往要我们求解很大的n的矩阵,而且这些矩阵往往是系数矩阵就是这些矩阵含有大量的0元素。
对于这类的矩阵,在用直接法时就会耗费大量的时间和存储单元。
因此我们有必要引入一类新的方法:
迭代法。
迭代法具有的特点是速度快。
与非线性方程的迭代法一样,需要我们构造一个等价的方程,从而构造一个收敛序列,序列的极限值就是方程组的根。
迭代法需要主要的是所求方程组的特征值的模必须小于1,否则方程组的行列式不收敛。