数值分析课程设计.docx
摘要实验一线性方程组数值解法中,本文选取列主元GaUSS消去法,并选取数据于我们课堂学习该章节 时的课件中的例2进行实验。列主元消去法是在Gauss消去法的根底上改良而得到的一种比拟快速和合 理的求解线性方程组的方法。它的主要思路是通过对每次消元过程中主元的屡次选取以到达减小误差和 加快求解速度的一种消去法。使用列主元消去法相比于GaUSS消去法根本上能控制舍入误差的影响,并 且选主元素较全主元消去法更为方便。实验二插值法和数据拟合中,本文选取最小二乘拟合方法进行实验,数据来源于我们课堂学习该章 节时的课件中的多项式拟合例子进行实验。最小二乘拟合是一种数学上的近似和优化,利用的数据得出 一条直线或者曲线,使之在坐标系上与数据之间的距离的平方和最小。利用excel的自带函数可以较为 方便的拟合线性的数据分析。实验三数值积分中,本文选取复化Simpon积分方法进行实验,通过将复化Simpson公式编译成 MATLAB语言求积分J?3dx,完成实验过程的同时,也对复化SimPon积分章节的知识进行了稳固。实验四常微分方程数值解,本文选取RUnge-Kutta方法进行实验,通过实验了解RUngeYutta法的 收敛性与稳定性同时学会了学会用Matlab编程实现Runge-Kutta法解常微分方程,并在实验的过程中 意识到尽管我们熟知H"ge-Kt4的四种方法,事实上,在求解微分方程初值问题,四阶Hrmge- 法是单步长中最优秀的方法,通常都是用该方法求解的实际问题,计算效果比拟理想的。最后,在数值方法实际应用中,本文通过非线性拟合方法,并学会用这些函数解决实际人口增长模 型问题,在1949年到1994年的数据根底上,通过构建“线性增长模型”和“指数指数增长模型”两个 模型来对1999年的中国人口数据进行预测,最后通过中国人口年鉴中的数据对两种方法进行准确性检 验,并且比照得出中国人口数据在1949年到1999年期间更符合线性增长的结论。关键词:列主元GaUSS消去法 最小二乘拟合 复化SimPon积分Runge-Kutta目录实验一列主元Gauss消去法11.1 实验目的11.2 根本原理11.3 实验内容31.4 数据来源41.5 实验结论5实验二最小二乘拟合62.1 实验目的62.2 根本原理62.3 实验内容72.4 实验结论11试验三 复化SimPOn积分 113.1 实验目的113.2 根本原理123.3 实验内容123.4 数据来源133.5 实验结论13实验四RUnge-KUtta方法 144.1 实验目的144.2 根本原理154.3 实验内容154.4 数据来源164.5 实验结论164.6 数值方法实际应用165.1 实验目的165.2 根本原理175.3 实验内容175.4 数据来源185.5 实验结论20参考文献22实验一列主元Gauss消去法1.1 实验目的1)理解并掌握列主元GaUSS消去法的消去原理,熟悉算法流程;2)能有效利用列主元消去法解方程组;3)通过运用Matlab软件编程实现列主兀Gauss消去法;1.2 根本原理设有线性方程组AX = b,其中,A为非奇异矩阵,方程组的增广矩阵为aIl an aIn"1A,b =首先在A的第1列选取绝对值最大的元素作为主元素,即选择"二hW%Io然后交换A的第1行与第行交换后增广矩阵为简单起见仍记为A,b,其元素仍记为airbiK经过第1次消元计算得到与原方程组等价的方程,Ax = b其中,1222上述过程可记为A,bA,b重复上述计算过程,现假设已完成第左-1步的选主元素过程,交换两行并进行消元计算,此时A,b约化为其中A的元素仍记为/), b出的元素仍记为4.第左步选主元素在A右下角方阵的第1列内选),即确定北,使交换A(Nb(力第左行与北(左= 1,2,-1)行的元素,再进行消元计算,最后将原线性方程组化为X2bb2回代可求解得XZ =SZ - EaijXj)Ia、(z = -l.,2,l)算法描述:1)输入数据A和d置det = L2)对于k= 1,2,-1,做如下步骤:a)按列选主元,即确定,左使," = maxjO (如果4,"。,那么A为奇异矩阵,停止计算);b)如果方k,那么交换A,b第行与第左行元素;C)消元计算:aik % = ajk ICikk « =k+ L,") aij aij - mikakj (i,j = k + l,*-,n) bi <- bi - mikbk G =左 +1, , )d)置 det = akk * det。3)如果QM= O ,那么停止计算止匕时det(A) = O ;否那么进行回执,对于左=凡一L,L置X左= bk - jakjxj IakH六女+1)4) 置 det = ann * det ;5)输出工,,Z为线性方程组Ax = b的解,det为矩阵A的行列式的值。1.3 实验内容function X = gauss(A,b)n,n = size(A);X = zeros(n,l);Aug = A,b;for k = l:n-lpiv,r = max(abs(Aug(k:n,k);r = r + k - 1;if r>ktemp=Aug(k,:);Aug(k)=Aug(r,:);Aug(r,:)=temp;endif Aug(k,k)=0, error(叹寸角元出现 0,), endAugfor p = k+l:nAug(p,: )=Aug(p,:)-Aug(k,: )*Aug(p,k)Aug(k,k);endendAugA = Aug(:,l:n); b = Aug(:,n+1);x(n) = b(n)A(n,n);for k =x(k)=b(k);for p=n:-l:k+lx(k) = x(k)-A(k,p)*x(p);endx(k)=x(k)A(k,k);end1.4 数据来源为了验证以上编写的Matlab程序的正确性,试用列主元Gauss消去法解方程组x1 + Ix2 - 3x3 = 1< 2x1 - x2 + 3x3 = 53x1 - 2x2 + 2x3 = 1解:只需输入»A=l,2,-3;2,-l,3;3,-2,2;» b=l;5;l;» gauss(A,b)程序运行得到如下结果Aug =12-312-1353-221Aug =3-2212-13512-31Aug =3.0000-2.00002.000002.6667-3.666700.33331.6667Aug =3.0000-2.00002.000002.6667-3.6667002.12501.00000.66674.33331.00000.66674.2500可见方程组的解为XI=LX2 =3, = 21.5实验结论在顺序GaUSS消去法中,必须要求力? 0(左= 1,2,否那么将无法进行计算。这里 需要指出的是:即使MfWO,但其绝对值M片很小,那么由于舍入误差的影响,也可能引 起很大的误差,而选取列主元就可以很好的解决这个问题,而且经过实例验证发现该程序也 是正确的。实验二最小二乘拟合2.1实验目的D学会并掌握数值最小二乘拟合的根本原理;2)自行学会用MatIab实现算法并将其应用于实际问题;3) 了解插值与拟合的异同点;2.2根本原理如果函数/(”在假设干点看(' = L2,处的值%,便可根据插值原理来建立插值 多项式作为/(B的近似。但在科学实验和生产实践中,往往会遇到这样一种情况,即节点 上的函数值并不是很精确的,这些函数值是由实验或观测得到的数据,不可防止地带有测量 误差,如果要求所得的近似函数曲线精确无误地通过所有的点(i, yi),就会使曲线保存着一 切测试误差。当个别数据的误差较大时,插值效果显然是不理想的。止匕外,由实验或观测提供 的数据个数往往很多,如果用插值法,势必得到次数较高的插值多项式,这样计算起来很烦 琐。换句话说:求一条曲线,使数据点均在离此曲线的上方或下方不远处,所求的曲线称为拟合曲 线,它既能反映数据的总体分布,又不至于出现局部较大的波动,更能反映被逼近函数的特性, 使求得的逼近函数与函数从总体上来说其偏差按某种方法度量到达最小,这就是曲线拟合。与函数插值问题不同,曲线拟合不要求曲线通过所有点,而是要求得到的近似函数能反映数据 的根本关系。在某种意义上,曲线拟合更有实用价值。在对给出的实验(或观测)数据(与B)" " )一般希望各实验(或观测)数据与拟合曲线的偏差的平方和最小,这就是最小二乘原理。函数插值是插值函数尸(X)与被插函数于(X)在节处函数值相同,即尸a)=/。)。=。,力)而曲线拟合函数。(4)不要求严格地通过所有数据点 j),也就是说拟合函数°()在天处的偏差(亦称残差 弓=(Pg - f (七)(,=。,L ,")不都严格地等于零。但是,为了使近似曲线能尽量反映所给数据点的变化趋势,要求"I按某种度量标准最小。假 设记向量' ',即要求向量e某种范数H最小,如e的1-范数MI或-范数IdL 即 = :|二=:以/)/(,)l , Z=Oi=O或MOO= m产同=1113。(七)一/(七)|最小。为了方便于计算、分析与应用,通常1 1l2= 2 =勺。(七)-/(七)要求e的2范数 C=。 J U=。J即|玳=之婷=中。(匕)-/(七)-°-°为最小。这种要求误差偏差平方和最小的拟合称为曲线拟合的最小二乘法。2.3实验内容给出一组数据点(七,y),利用最小二乘法拟合曲线,并估计误差,作出拟合曲线。i123456xO12345yl521123解:在MATLAB工作窗口中输入程序 » x=0,1,2,3,4,5;y=5,2,l,l,2,3;PIOt(X,y,T*'),Iegende 实验数据(xi,yi)xlabel(,x,), ylabel(,y,), title。数据点(xi,yi)的散点图)可以看出这些点接近一条抛物线,因此设所求的多项式为y = % + /% +电/在MATLAB中输入编码为: syms al a2 a;fi=a2.*x.2+ al.*x+ a编写构造误差平方和的MATLAB程序 fy=fi-y;J=sum(fy.2) g JaO=diff(J,aO); Jal=diff(J,al); Ja2=diff(J,a2);JaOl=Simple(JaO) Jall=Simple(Jal) Ja21=simple(Ja2) fi =a, a + al + a2, a + 2*al + 4*a2, a + 3*al + 9*a2, a + 4