当前位置:文档之家› 数值计算方法上机实验报告

数值计算方法上机实验报告

数值计算方法上机实验报告班级:农电0801 姓名:杨 昆学号:200801090122 算法原理以及程序框图①牛顿法求非线性方程● 算法原理:对于非线性方程()0f x =,若已知跟*x 的一个近似值k x ,将()f x 在k x 处展开成一阶泰勒公式:"'2()()()()()()2!k k k k f f x f x f x x x x x ξ=+-+-忽略高次项,有'()()()()k k k f x f x f x x x ≈+-右端是直线方程,用这个直线方程来近似非线性方程()f x 。

将非线性方程()0f x =的根*x 代入*()0f x =,即'*()()()0k k k f x f x x x +-≈解出*'()()k k k f x x x f x ≈-将右端取为1k x +,则1k x +是比k x 更接近于*x 的近似值,即1'()()k k k k f x x x f x +=-这就是牛顿迭代公式。

● 程序框图:●具体算例及求解结果:导出计算(0)c c>的牛顿迭代公式,并计算115。

迭代结果:10.75000010.72383710.723805●输入变量、输出变量说明:输入变量:0x迭代初值,ε迭代精度,N迭代最大次数输出变量:k当前迭代次数,x当前迭代值1②列主元消去法求解线性方程组●算法原理:高斯消去法是利用现行方程组初等变换中的一种变换,即用一个不为零的数乘一个方程后加只另一个方程,使方程组变成同解的上三角方程组,然后再自下而上对上三角方程组求解。

列选住院是当高斯消元到第k 步时,从k 列的kk a 以下(包括kk a )的各元素中选出绝对值最大的,然后通过行交换将其交换到kk a 的位置上。

交换系数矩阵中的两行(包括常数项),只相当于两个方程的位置交换了,因此,列选主元不影响求解的结果。

● 程序框图:● 具体算例及求解结果:用列选主元法求解下列线性方程组1231231232315410030.12x x x x x x x x x ++=⎧⎪++=⎨⎪-+=⎩ 求解结果:1.2000002.000000 -1.400000● 输入变量、输出变量说明:输入变量:ij a 系数矩阵元素,i b 常向量元素 输出变量:12,,n b b b 解向量元素③LU 分解求解线性方程组● 算法原理:求解线性方程组Ax b =时,当对A 进行杜里特尔分解,则等价于求解LUx b =,这时可归结为利用递推计算相继求解两个三角形(系数矩阵为三角矩阵)方程组,用顺代,由Ly b =求出y ,再利用会带,由Ux y =求出x 。

● 程序框图:● 具体算例及求解结果:用杜里特尔分解法求解方程组123223347712457x x x ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥--⎣⎦⎣⎦⎣⎦ 求解结果:2.000000 -2.000000 1.000000● 输入变量、输出变量说明:输入变量:ij a 系数矩阵元素,i b 常向量元素 输出变量:12,,n b b b 解向量元素④拉格朗日插值多项式● 算法原理:首先构造基函数0()nik i k ii k x x l x x x =≠-=-∏,可以证明基函数满足下列条件:()1k i i k l x i k≠⎧=⎨=⎩,对于给定1n +个节点,n 次拉格朗日插值多项式由下式给出:0()()nk k k L x l x y ==∑其中0()nik i k ii kx x l x x x =≠-=-∏由于()k l x 是一个关于x 的n 次多项式,所以()L x 为关于x 的不高于n 次的代数多项式。

当i x x =时,()i i L x y =,满足插值条件。

● 程序框图:● 具体算例及求解结果:已知()sin f x x = 的值如下表所示。

()sin f x x =的值x0 6π 4π 3π 2π sin x1222321试用四次Lagrange 多项式计算sin 12π的估计值。

求解结果: 0.258588● 输入变量、输出变量说明:输入变量:(,)i i x y 插值节点输出变量:y 插值所得到被插函数在插值点的近似值⑤最小二乘法曲线拟合● 算法原理:对于给定的一组数据(,)i i x y ,i =1,2…,m ,寻求做n 次多项式0nk k k y a x ==∑使性能指标2011(,,,)()mnk n i k i i k J a a a y a x ===-∑∑ 为最小。

由于性能指标J 可以被看做关于k a ,k =0,1,…,n 的多元函数,故上述拟合多项式的构造问题可转化为多元函数的极值问题。

令0kJa ∂=∂ 从而有正则方程组203121122n i iii n i i i i iin n n n n n i i i i ii m x xx y a x y a x x xxa x y x x xx +++⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦∑∑∑∑∑∑∑∑∑∑∑∑∑∑求解即得多项式系数。

● 程序框图:● 具体算例及求解结果:给定函数()y f x =的实例数据表:i x 1 2 3 4 6 7 8 i y2367532试用最小二乘法求二次拟合多项式 求解结果: -1.318171 3.431811 -0.38636321.318171 3.4318110.386363y x x =-+-● 输入变量、输出变量说明:输入变量:(,)i i x y 已知数据点 输出变量:i a 拟合多项式的系数⑥改进欧拉法求解常微分方程初值问题● 算法原理:当h 取值较小时,让梯形法的迭代公式只迭代一次就结束。

这样先用欧拉公式求得一个初步近似值(0)1n y +,称之为预报值,预报值的精度不高,用它替代梯形法右端的1n y +,再直接计算得出1n y +,并称之为校正值,这时得到预报-校正公式。

将预报-校正公式(0)1(0)111(,)(,)(,)2n n n n n n n n n n y y hf x y h y y f x y f x y ++++⎧=+⎪⎨⎡⎤=++⎪⎣⎦⎩ 称为改进欧拉公式。

● 程序框图:● 具体算例及求解结果:求解初值问题'2,01(0)1x y y x y y ⎧=-<<⎪⎨⎪=⎩求解结果:n xn y()n y xn xn y()n y x0.1 1.095909 1.095909 0.6 1.485956 1.485955 0.2 1.184097 1.184097 0.7 1.562514 1.552514 0.3 1.266201 1.266201 0.8 1.616475 1.616474 0.4 1.343360 1.343360 0.9 1.678320 1.678166 0.5 1.416402 1.416402 1.0 1.737867 1.737867● 输入变量、输出变量说明:输入变量:00(,)x y 处置点,h 区间长度,N 计算次数 输出变量:11(,)x y 初值问题的数值解法结果⑦四阶龙格-库塔法求解常微分方程初值问题算法原理:用区间[]1,k k x x +内四个不同点上的函数值的线性组合就得到四阶龙格-库塔法。

四阶龙格-库塔法1112233441211113221122243311322333()(,)(,)(,)(,)n n n n n n n n n n y y h k k k k k f x y k f x h y k h k f x h y k h k h k f x h y k h k h k h ωωωωλμλμμλμμμ+=++++⎧⎪=⎪⎪=++⎨⎪=+++⎪⎪=++++⎩ 其中,,,ωλμ均为待定系数。

类似于前面的讨论,把234,,k k k 分别在n x 点展开成h 的幂级数,代入1n y +并进行花间,然后与1()n y x +在n x 点上的泰勒展开式比较,使其两式比较,使其两式右端直到4h 的系数相等,经过复杂的数学演算可得到关于,,ωλμ的一组特解121122213132333142312011613λλμμμμμλμωωωω⎧⎪====⎪⎪===⎪⎪==⎨⎪⎪==⎪⎪==⎪⎩从而得到下列常用的经典公式11234121123122413(22)6(,)(,)2(,)2(,)n n n n nn nn n n hy y k k k k k f x y h k f x y k h k f x y k k f x y hk ++++⎧⎪=++++⎪⎪=⎪⎪=+⎨⎪⎪=+⎪⎪⎪=+⎩ 经典的龙格-库塔法每一步需要4次计算函数值(,)f x y ,它具有四阶精度,即局部截断误差是5()O h 。

● 程序框图:● 具体算例及求解结果:求解初值问题'2,01(0)1x y y x y y ⎧=-<<⎪⎨⎪=⎩求解结果:n xn y()n y x0.2 1.183229 1.183229 0.4 1.341667 1.341667 0.6 1.483281 1.483281 0.8 1.612514 1.612514 1.01.732142 1.732142● 输入变量、输出变量说明:输入变量:00(,)x y 处置点,h 区间长度,N 计算次数数值计算方法上机实验报告11输出变量:11(,)x y 初值问题的数值解法结果上机体验与收获首先,是程序的编制过程中,我体会到了将一个抽象的数值计算方法变为一个具体计算机程序的不易。

这个过程,让我对各种数值计算方法的数学公式有了更进一步的认识,因为要编制出计算机程序,就必须清楚数值计算方法的具体计算步骤。

并且这次我还补充了自己的C 语言知识,学会了C 语言中文件的操作,这一部分内容在原先的C 语言课程中式没有讲述过的。

在各个程序的调试过程中,我又重新复习C 语言的很多知识,比如数组元素的编号以及数组行列的编号都是从0开始的等。

数值计算方法编程过程中涉及到了许多循环结构,这很好的锻炼了我的数学思维。

其次,我要说的事此次试验报告的写作,运用了Mathtype 在Word 里面编辑了如此多的数学公式,让我对运用Mathtype 进行数学公式编辑以及Word 排版都有了新的认识。

参考文献[1]谭浩强,C 程序设计,北京,清华大学出版社,2005[2]马东升,雷勇军,数值计算方法,机械工业出版社,2006。

相关主题