您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 60数值分析课程设计
摘要数值计算是具有广泛应用的数学分支,在各个学科中有最新的应用,与MATLAB软件紧密联系,揭示了一种技术或算法可以利用少量的数学知识就能在科技设计中获得巨大的回报。本文建立在数值分析的理论基础上,能够在Matlab环境中运行,给出了理论分析、程序清单以及计算结果。以4个主要思想为核心进行展开,首先列主元Gauss消去法求解方程组;然后对一组数据用Lagrange插值的方法求出Lagrange插值多项式;再运用Romberg求积方法,对给出定积分进行积分;最后用Runge-Kutta方法求解常微分方程数值解;在文章的最后用一道综合题结束本文。“本书结构清晰,条理分明,实例范围较广泛。它突出了数值分析的中心主题,给出了大量的算法,尤其是,它提供了取自现实生活的实例。关键词:列主元Gauss消去,Langrange插值,Romberg积分,Runge-Kutta方法目录实验一列主元Gauss消去法.........................................11实验目的与要求...............................................12基本原理.....................................................13实验内容及数据来源...........................................14实验结论.....................................................3实验二Lagrange插值...............................................41实验目的与要求...............................................42基本原理.....................................................43实验内容及数据来源...........................................44实验结论.....................................................6实验三龙贝格求积公式.............................................71实验目的与要求...............................................72基本原理.....................................................73实验内容及数据来源...........................................74实验结论.....................................................8实验四Runge-Kutta方法............................................91实验目的与要求...............................................92基本原理.....................................................93实验内容及数据来源..........................................104实验结论....................................................11实验五Gauss-Seidel迭代法实例....................................121实验目的与要求..............................................122基本原理....................................................123实验内容及数据来源..........................................124实验结论....................................................14心得............................................................15参考文献..........................................................161实验一列主元Gauss消去法1实验目的与要求熟悉列主元Gauss消去法的基本原理;会用matlab程序实现列主元Gauss消去法的全过程。2基本原理为了提高计算的数值稳定性,在消元过程中采用选择主元的方法.常采用的是列主元消去法。给定线性方程组Ax=b,记A(1)=A,b(1)=b,列主元Gauss消去法的具体过程如下:首先在增广矩阵B(1)=(A(1),b(1))的第一列元素中,取||||)1(1)1(11maxinikaa为主元素,1rrk。然后进行第一步消元得增广矩阵B(2)=(A(2),b(2))。再在矩阵B(2)=(A(2),b(2))的第二列元素中,取||||)2(22)2(2maxinikaa为主元素,2rrk。然后进行第二步消元得增广矩阵B(3)=(A(3),b(3))。按此方法继续进行下去,经过n-1步选主元和消元运算,得到增广矩阵B(n)=(A(n),b(n))。则方程组A(n)x=b(n)是与原方程组等价的上三角形方程组,可进行回代求解。易证,只要|A|0,列主元Gauss消去法就可顺利进行。可见,列主元Gauss消去法是在每一步消元前,在主元所在的一列选取绝对值最大的元素作为主元素.而全主元Gauss消去法是在每一步消元前,在所有元素中选取绝对值最大的元素作为主元素.但由于运算量大增,实际应用中并不经常使用.3实验内容及数据来源下面先用Matlab编写列主元Gauss消去的函数文件如下:%列选主元的高斯消去法functionX=lufact_my(A,B)%InpiutA是系数矩阵,B是右端项%Outputx是解[N,N]=size(A);X=zeros(N,1);Y=zeros(N,1);2C=zeros(1,N);R=1:N;k=1;whilek=N-1%求列中最大的值赋给max[max1,j]=max(abs(A(k:N,k)));%交换行C=A(k,:);%C为A的第k列的值A(k,:)=A(j+k-1,:);%将A的第K列赋为最大A(j+k-1,:)=C;d=R(k);R(k)=R(j+k-1);R(j+k-1)=d;%主元为0的情况ifA(k,k)==0'Aissingular.nouniquesolution'breakend%化为上三角form=k+1:Nmult=A(m,k)/A(k,k);A(m,k)=mult;A(m,k+1:N)=A(m,k+1:N)-mult*A(k,k+1:N);m=m+1;endk=k+1;end%对右端项做处理,但要保证行的交换相同,要注意R(k)的作用Y(1)=B(R(1));3fork=2:NY(k)=B(R(k))-A(k,1:k-1)*Y(1:k-1);endX(N)=Y(N)/A(N,N);fork=N-1:-1:1X(k)=(Y(k)-A(k,k+1:N)*X(k+1:N))/A(k,k);end例题:用列主元Gauss消去法求解方程974987674322321xxx的解。输入:A=[223;476;789];B=[4;7;9];lufact(A,B)输出:ans=-2.3333-0.33333.11114实验结论上述matlab程序可以比较好的实现列主元Gauss消去法,且经过实际例子检验出这种方法是正确的。列主元Gauss消去法是在每一步消元前,在主元所在的一列选取绝对值最大的元素作为主元素.而全主元Gauss消去法是在每一步消元前,在所有元素中选取绝对值最大的元素作为主元素.但由于运算量大增,实际应用中并不经常使用.4实验二Lagrange插值1实验目的与要求熟悉Lagrange插值法的基本原理;会用matlab程序实现Lagrange插值法;会用Lagrange插值法求解实际问题。2基本原理给定(n+1)个插值节点nxxx,,,10和对应的函数值nyyy,,,10,利用n次拉格朗日插值多项式公式:nkkknxlyxL0)()(,其中)())(()()())(()()(110110nkkkkkknkkkxxxxxxxxxxxxxxxxxl,可以得到插值区间任意x的函数值y为)()(xLxyn。从公式中可以看出,生成的多项式与用来插值的数据密切相关,数据变化则函数就要重新计算,所以当插值数据特别多的时候,计算量就会比较大。3实验内容及数据来源由于Matlab中并没有现成的拉格朗日插值命令,下面先编写拉格朗日的函数文件:functions=Lagrange(x,y,x0)nx=length(x);ny=length(y);ifnx~=nywarning('矢量x与y的长度应该相同')returnendm=length(x0);fori=1:mt=0.0;forj=1:nxu=1.0;5fork=1:nx;ifk~=ju=u*(x0(i)-x(k))/(x(j)-x(k));endendt=t+u*y(j);ends(m)=t;endReturn例题:编好M文件后,就可以用Lagrange插值函数进行插值计算了,下面根据x和y的数据求0.9出的值。其中,x=[0.70.50.40.8]y=[-0.916291-0.693147-0.356675-0.223144];输入:x=[0.70.50.40.8];y=[-0.916291-0.693147-0.356675-0.223144];Lagrange(x,y,0.9)输出:ans=1.3930下面重新给定数据:求解3.6,4.9,7.3三个点上的值。其中,x=[578910]y=[107641];输入:x=[578910];y=[107641];Lagrange(x,y,[3.44.97.3])6输出:ans=006.77294实验结论从上图中可以看出,拉格朗日插值的一个特点:拟合出的多项式通过每一个测量数据点。由于Lagrange插值的n次插值基函数lk(x)(k=0,1,2,…n)都依赖于全部插值结点,利用公式很容易得到插值多项式,但在增加或减少结点时,插值基函数lk(x)(k=0,1,2,…n)也随之变化,必须全部重新计算。7实验三龙贝格求积公式1实验目的与要求熟悉龙贝格求积公式的基本原理;会用matlab程序实现龙贝格求积公式;会用龙贝格求积公式求解定积分。2基本原理由于变步长梯形求积法算法简单,但其精度较差,收敛速度较慢,故利用变步长梯形法算法简单的优点,重新形成一个新算法,这就是龙贝格求积公式。它是对近似值进行修正以后得到的更近似的公式,能自动改变积分步长,以使其相邻两次值的绝对误差或相对误差小于预先设定的允许误差。龙贝格求积公式为:1441!jkjkijkjfTfTfT3实验内容及数据来源根据上述实验原理,可以编写龙贝格求积公式的M文件romber.m:function[R,quad,err,h]=romber(fun,a,b,n,delta)M=1;h=b-a;err=1;J=0;R=zeros(4,4);R(1,1)=h*(fun(a)+fun(b))/2;while((errdelta)&&(Jn))||(J4)J=J+1;h=h/2;s=0;forp=1
本文标题:60数值分析课程设计
链接地址:https://www.777doc.com/doc-4620101 .html