数值分析课程设计含代码
- 格式:doc
- 大小:272.65 KB
- 文档页数:27
课程设计任务书实验方法与理论方法是推动科学技术发展的两大基本方法,但有局限性。
许多研究对象,由于空间或时间的限制,既不可能用理论精确描述,也不能用实验手段实现。
数值模拟或称为科学计算突破了实验和理论科学的局限,在科技发展中起到越来越重要的作用。
可以认为,科学计算已于实验、理论一起成为科学方法上不可或缺的三个主要手段。
计算数学的研究是科学计算的主要组成部分,而数值分析则是计算数学的核心。
数值计算是研究使用计算机来解决各种数学问题的近似计算方法与理论,其任务是提供在计算机上可解的、理论可靠的、计算复杂性低的各种常用算法。
数值分析的主要内容:1)、数值代数:求解线性和非线性方程组的解,分直接方法和间接方法两大类;2)、插值、曲线拟合和数值逼近;3)、数值微分和数值积分;4)、常微分和偏微分方程数值解法。
本文主要通过Matlab软件,对数值分析中的一些问题进行求解,如列主元Gauss消去法,Lagrange插值多项式,复化Simpson公式,Runge-Kutta方法以及数值分析在实际问题中的应用,并在求解的过程中更加熟识这门课程的主要内容,以及加强对课程知识的掌握。
在学习与设计计算方法时,从数学理论角度,学会分析方法的误差、收敛性和稳定性,保证计算方法的准确性;从实际应用的角度出发,掌握计算方法的结构与流程,能够把计算方法转换为可在计算机上直接处理的程序,保证算法的可用性。
关键词:列主元Gauss消去法;Lagrange插值;复化Simpson公式;Runge-Kutta实验一列主元Gauss消去法 (1)1.1 实验目的 (1)1.2 基本原理 (1)1.3 实验内容 (2)1.4 实验结论 (3)实验二拉格朗日插值多项式 (4)2.1 实验目的 (4)2.2 基本原理 (4)2.3 实验内容 (4)2.4 实验结论 (9)实验三复化Simpson求积公式 (10)3.1 实验目的 (10)3.2 基本原理 (10)3.3 实验内容 (10)3.4 实验结论 (12)实验四龙格-库塔(Runge-Kutta)方法 (13)4.1 实验目的 (13)4.2 基本原理 (13)4.3 实验内容 (14)4.4 实验结论 (15)实验五数值方法实际应用 (16)5.1 实验目的 (16)5.2 基本原理 (16)5.3 实验内容 (16)5.4 实验结论 (22)参考文献 (23)实验一 列主元Gauss 消去法1.1 实验目的1) 理解列主元消去法的原理;2) 熟悉列主元消去法的计算步骤,能用代码编写; 3) 解决实际问题。
1.2 基本原理在顺序Gauss 消去法中,必须要求),,2,1(0a (k )n k kk =≠;否则无法进行计算。
即使0)(≠k kk a ,但其绝对值)(k kka 很小,由于舍入误差的影响,也可能会引起很大的误差,从而使上述方法失效。
为了使消元过程中减小舍入误差和不至于中断,可以按照不同的自然顺序进行消元。
在第k 步消元时,增广矩阵为[]⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=-----------)()()1(1)2(2)1(1)()()()()1(1)1(1)1(11)2(2)2(2)2(12)2(22)1(1)1(1)1(11)1(12)1(11)()(k nk k k k k nnk nk k knk kk k nk k kk k k k n k k nk k k k b b b b b a a a a a a a a a a a a a a a a B A(1.1)不一定选取)1(-k kk a 作为主元,而从同列)1()1(,1)1(,,,--+-k nkk k k k kk a a a 中选取绝对值最大的作为主元素,即)1()1(r max -≤≤-=k ik ni k k ka a (1.2) 若0)(=k rk a ,此时矩阵不可逆,方程的解不确定,则停止计算;否则,当r>k时,则其增广矩阵中交换第k 行和第r 行,即n k k j a k rjk kj ,,1,a )()( +=↔ )()(k r k k b b ↔ (1.3) 使)(k rk a 成为主元。
然后再按Gauss 消去法进行消元运算。
于是就得到列主元Gauss消去法。
1.3 实验内容1.3.1 程序来源首先建立一个gaussMethod.m的文件,用来实现列主元的消去方法。
文件内容如下:function x=gaussMethod(A,b)%高斯列主元消去法,要求系数矩阵非奇异的n = size(A,1);if abs(det(A))<= 1e-8error('系数矩阵是奇异的'); return;endfor k=1:nak = max(abs(A(k:n,k)));index = find(A(:,k)==ak);if length(index) == 0index = find(A(:,k)==-ak);end%交换列主元temp = A(index,:);A(index,:) = A(k,:);A(k,:) = temp;temp = b(index);b(index) = b(k); b(k) = temp; %消元过程for i=k+1:nm=A(i,k)/A(k,k); %消除列元素A(i,k+1:n)=A(i,k+1:n)-m*A(k,k+1:n);b(i)=b(i)-m*b(k);endend %回代过程x(n)=b(n)/A(n,n);for k=n-1:-1:1;x(k)=(b(k)-A(k,k+1:n)*x(k+1:n)')/A(k,k); end; end然后调用gaussMethod 函数,来实现列主元的高斯消去法。
建立一个文件gauss ,内容如下:cleardisp('**********************************************') x=gaussMethod(input('请输入系数矩阵:'),input('请输入常数列:')) disp('**********************************************')1.3.2 实例分析例:在Matlab 上,利用列主元法求线性方程组的解:⎪⎪⎩⎪⎪⎨⎧=+++-=+++=+++=+++62332022428340213424321432143214321x x x x x x x x x x x x x x x x 解:运行程序,按照提示输入方程的系数矩阵及常数列,如下所示:********************************************** 请输入系数矩阵:[1 2 1 4;2 0 4 3;4 2 2 1;-3 1 3 2] 请输入常数列:[13;28;20;6] x =3 -14 2********************************************** 即该方程的解为:[]2,4,1,3-=x1.4 实验结论把向量计算得到的解带入方程组,验证正确性,和其他的方法比较,列主元具有一定的简单性,比较容易实现。
避免使用其他方法的误差或不能进行性。
而列主元也有一定的限制,要求行列式的值不为0。
实验二 拉格朗日插值多项式2.1 实验目的1)熟悉简单的拉格朗日插值多项式的基本概念;2)熟悉Lagrange 公式及源代码,会利用它来计算基本函数; 3)能构造出正确的插值多项式;2.2 基本原理设函数)(x f y =在区间[a,b]上有定义,且已知在点b x x x x a n ≤<<<≤ 10上的值,,,,10n y y y 若存在一个次数不超过n 的多项式n n n x a x a a x L +++= 10)( (2.1) 使其满足n k y x L k k n ,,1,0,)( == (2.2)则称)(x L n 为)(x f 的n 次插值多项式,称点),,1,0(x n k k =为插值节点,称条件(2.2)为插值条件。
包含插值节点的区间成为插值区间。
通过平面上不同的两点可以确定一条直线经过这两点,就是拉格朗日线性插值问题,对于不在同一直线的三点得到的插值多项式为抛物线。
拉格朗日是比较基础的方法,本身比较容易实现,容易理解。
给定n+1个不同节点,构造[]i x x x x f ,,,,210 的n 次拉格朗日插值多项式: ∑==n x l y x 0i ii )()(L ,1,,2,1,)()()(11+=--=∏+≠=n i x xx x x l n ij j j ij i(2.3)2.3 实验内容2.3.1 程序来源首先建立一个Lagrange.m 的文件,用来实现Lagrange 插值。
文件内容如下: %输入:x 是插值节点横坐标向量;y 是插值节点对应纵坐标向量 %输出:C 是拉格朗日插值多项式的系数矩阵;L 是插值函数系数矩阵function[C,L]=Lagrange(x,y)w=length(x);n=w-1;L=zeros(w,w);for k=1:n+1V=1;for j=1:n+1if k~=jV=conv(V,poly(x(j)))/(x(k)-x(j));endendL(k,:)=V;endC=y*L然后调用Lagrange函数,来实现Lagrange插值法。
建立一个文件Lg,内容如下:cleardisp('**********************************************')x=input('请输入已知点的横坐标组:');y=input('请输入已知点的纵坐标:');[C,L]=Lagrange(x,y);yi=polyval(C,input('请输入需要计算得横坐标组:'))xx=1.5:0.05:6.5;yy=polyval(C,xx);plot(xx,yy,x,y,'o')disp('**********************************************')2.3.2 实例分析例1 有4对数据(1.6,3.3),(2.7,4.22),(3.9,5.61),(5.6,2.94),写出这4个数据点的Lagrange插值公式,并计算出横坐标组xi=[2.101,4.234]时对应的纵坐标值。
解:4个数据点的Lagrange 插值公式为:)9.36.1(*)7.26.5(*)6.16.5()9.3(*)7.2(*)6.1(*94.2)6.59.3(*)7.29.3(*)6.19.3()6.5(*)7.2(*)6.1(*9.3)6.57.2(*)9.37.2(*)6.17.2()6.5(*)9.3(*)6.1(*22.4)6.56.1(*)9.36.1(*)7.26.1()6.5(*)9.3(*)7.2(*3.3x L 3------+------+------+------=x x x x x x x x x x x x )( 运行程序,按照提示输入已知点的横坐标组、纵坐标组及需要计算得横坐标组,如下所示:********************************************** 请输入已知点的横坐标组:[1.6,2.7,3.9,5.6] 请输入已知点的纵坐标:[3.3,1.22,5.61,2.94] C =-1.0539 11.0551 -34.4933 34.5053 请输入需要计算得横坐标组:[2.101,4.234] yi =1.0596 6.6457********************************************** 即 5053344933340551110539123.x .-x .x .-y ++= 输出图形:图2.1 输出拟合曲线例2 将区间[-5,5]等分5份、10份,求函数211xy +=拉格朗日差值多项式,做出函数原图像,观察龙格现象。