西南交通大学数值分析上机实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数值分析
上机实习报告
学号:
姓名:
专业:
联系电话:
任课教师:
序 (3)
一、必做题 (4)
1、问题一 (4)
1.1 问题重述 (4)
1.2 实验方法介绍 (4)
1.3 实验结果 (5)
2、问题二 (7)
2.1 问题重述 (7)
2.2 实验原理 (7)
雅各比算法:将系数矩阵A分解为:A=L+U+D,则推到的最后迭代公式为: (8)
2.3 实验结果 (8)
二、选做题 (10)
3、问题三 (10)
3.1 问题重述 (10)
3.2 实验原理 (10)
3.3 实验结果 (11)
总结 (11)
序
伴随着计算机技术的飞速发展,所有的学科都走向定量化和准确化,从而产生了一系列的计算性的学科分支,而数值计算方法就是解决计算问题的桥梁和工具。
数值计算方法,是一种研究并解决数学问题的数值近似解方法,是在计算机上使用的解数学问题的方法。
为了提高计算能力,需要结合计算能力与计算效率,因此,用来解决数值计算的软件因为高效率的计算凸显的十分重要。
数值方法是用来解决数值问题的计算公式,而数值方法的有效性需要根据其方法本身的好坏以及数值本身的好坏来综合判断。
数值计算方法计算的结果大多数都是近似值,但是理论的严密性又要求我们不仅要掌握将基本的算法,还要了解必要的误差分析,以验证计算结果的可靠性。
数值计算一般涉及的计算对象是微积分,线性代数,常微分方程中的数学问题,从而对应解决实际中的工程技术问题。
在借助MA TLAB、JA V A、C++ 和VB软件解决数学模型求解过程中,可以极大的提高计算效率。
本实验采用的是MATLAB软件来解决数值计算问题。
MA TLAB是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,其对解决矩阵运算、绘制函数/数据图像等有非常高的效率。
本文采用MATLAB对多项式拟合、雅雅格比法与高斯-赛德尔迭代法求解方程组迭代求解,对Runge-Kutta 4阶算法进行编程,并通过实例求解验证了其可行性,使用不同方法对计算进行比较,得出不同方法的收敛性与迭代次数的多少,比较各种方法的精确度和解的收敛速度。
2014数值分析作业
一、必做题
1、问题一
1.1 问题重述
1.1.1 实验数据
某过程涉及两变量x 和y, 拟分别用插值多项式和多项式拟合给出其对应规律的近似多项式,已知xi 与yi 之间的对应数据如下,xi=1,2,…,10
yi = 34.6588 40.3719 14.6448 -14.2721 -13.3570 24.8234 75.2795 103.5743 97.4847 78.2392
下列数据为另外的对照记录,它们可以作为近似函数的评价参考数据。
xi =
Columns 1 through 7
1.5000 1.9000
2.3000 2.7000
3.1000 3.5000 3.9000 Columns 8 through 14
4.3000 4.7000
5.1000 5.5000 5.9000
6.3000 6.7000 Columns 15 through 17
7.1000 7.5000 7.9000 yi =
Columns 1 through 7
42.1498 41.4620 35.1182 24.3852 11.2732 -1.7813 -12.3006 Columns 8 through 14
-18.1566 -17.9069 -11.0226 2.0284 19.8549 40.3626 61.0840 Columns 15 through 17
79.5688 93.7700 102.3677
1.1.2 实验内容
(1)用次数分别为3,4,5,6的多项式拟合并给出最好近似结果f(x)。
(2)用插值多项式给出最好近似结果
1.2 实验方法介绍
1.2.1 多项式拟合
在MA TLAB 中,提供了polyfit 函数来计算多项式拟合系数,其设定曲线拟合的目标是最小二乘法(或被称为最小方差),polyfit 的函数调用格式是:
[p,s,mu]=ployfit(x,y,n)
其中,x 和y 表示的是已知的数据,n 是多项式拟合阶数。
通过最小二乘法原理得到的拟合曲线多项式是:
1121--++++=n n n n p x p x p x p y
1.2.2 拉格朗日插值法
拉格朗日插值法是利用拉格朗日基函数来进行拟合:
拉格朗日基函数
利用拉格朗日基函数,构造多项式
为拉格朗日差值多项式。
1.3 实验结果
1.3.1 最小二乘多项式拟合结果
(1)各次拟合结果系数
3次多项式系数:-1.0326 19.3339 -94.4787 131.7944
4次多项式系数:-0.3818 7.3680 -42.1433 73.5334 0.7450
5次多项式系数:0.0981 -3.0789 34.5020 -163.5107 304.7282 -139.5019
6次多项式系数:0.0194 -0.5408 5.1137 -16.8973 -0.8670 66.3750 -18.6991
(2)绘制拟合曲线
利用MATLAB调用函数ployfit来进行绘图,程序代码(见附录1),绘制的
3、4、5、6阶拟合图像如下图1所示:
12345678910
1.3.2 拉格朗日插值拟合结果
(1)拟合的系数
根据拉格朗日的计算原理,编写程序见附录。
运行得到的结果如下表1所示:
表1 拉格朗日插值运算结果
(2)拟合的图像
运行程序可以得到:拉格朗日插值拟合的图像如下图2所示:
12345678910
图2 拉格朗日插值拟合图像
2、问题二
2.1 问题重述
2.1.1 实验数据
(1)A行分别为A1=[6,2,-1],A2=[1,4,-2],A3=[-3,1,4];b1=[-3,2,4]T;b2=[100,-200,345]T。
(2) A行分别为A1=[1,0,8,0.8],A2=[0.8,1,0.8],A3=[0.8,0.8,1];b1=[3,2,1]T;b2=[5,0,-10]T。
(3)A行分别为A1=[1,3],A2=[-7,1];b1=[4,6]T。
2.1.2 实验内容
用雅格比法与高斯-赛德尔迭代法解下列方程组Ax=b1或Ax=b2,研究其收敛性。
上机验证理论分析是否正确,比较它们的收敛速度,观察右端项对迭代收敛有无影响。
2.2 实验原理
根据题目要求,分别用雅克比迭代和高斯—赛德尔迭代的方法解方程组Ax=b1和Ax=b2,迭代法是将方程组Ax=b转化为x=Bx+f,构成了迭代格式:
x (k +1) = Bx k + f k = 0,1,2....n
反复适用该式子,产生了{x k}的向量序列,如果这个向量序列收敛于x *,则有x *是方程组的解。
因此,根据精度的要求选择一个合适的x k作为近似解。
这就是线性方程组的迭代法。
雅各比算法:将系数矩阵A 分解为:A=L+U+D ,则推到的最后迭代公式为:
x= -D -1( L+ U)x (k)+D -1 b
其中,迭代矩阵为B J = -D -1 (L+ U )
高斯-塞德尔方法:是从雅各比演变而来的,其矩阵形式为
x (k+1)=-D -1( Lx (k+1)+ Ux (k))+D -1b
其中,高斯-塞德尔迭代矩阵B G =-(D+L)-1U
2.3 实验结果
(1)在问题1中,有:
126213100142,2,2003144345A b b --⎛⎫⎛⎫⎛⎫ ⎪ ⎪ ⎪=-==- ⎪ ⎪ ⎪ ⎪ ⎪ ⎪-⎝⎭⎝⎭⎝⎭
对矩阵A 进行操作可计算得
0110
3
602100060011002,100,040,B 04
20003100043104
2
L U D ⎛
⎫-
⎪-⎛⎫⎛⎫⎛⎫
⎪ ⎪ ⎪ ⎪
⎪=--=-==- ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪- ⎪⎝⎭⎝⎭⎝⎭ ⎪- ⎪⎝⎭
计算矩阵
o
B 的谱半径可知
()00.54211
B ρ=<,所以迭代收敛。
之后利用MATLAB
编程得到的计算结果如下表2所示:
从表 和3可知,理论分析结果与程序结果一致,利用雅格比法,方程1在迭代16次后收敛;方程2在迭代了23次收敛。
利用高斯-赛德尔法,方程1在迭代10次后收敛;方程2在迭代了15次收敛。
从中可以看出高斯赛德尔法的迭代速度比雅格
比法的迭代次数快。
(2)对于问题2有:
1210.80.8350.810.8,2,00.80.81110A b b ⎛⎫⎛⎫⎛⎫ ⎪ ⎪ ⎪=== ⎪ ⎪ ⎪ ⎪ ⎪ ⎪-⎝⎭⎝⎭⎝⎭
对矩阵A 进行操作可计算得
000.80.800010000.80.8000.8,0.800,010,B 00.640.160000.80.8000100.1280.768L U D --⎛⎫⎛⎫⎛⎫⎛⎫
⎪ ⎪ ⎪ ⎪=-=-==- ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭⎝⎭⎝⎭
计算矩阵o B 的谱半径可知()00.71551B ρ=<,所以迭代也收敛。
调用编写函数对问题2进行求解,其中最大迭代次数设为2000,精度要求设为0.0001,初始迭代值设
为(0,0,0)
从错误!未找到引用源。
和5可知,高斯赛德尔法只用了很少的参数就得到了迭代结果,但是雅格比法却得到不收敛的结果,从这两个方程的迭代次数来说,b 值不同,其迭代的次数不一样,但是迭代是否收敛于b 值大小无关。
(3)在问题3中,有:
1134,716A b ⎛⎫⎛⎫== ⎪ ⎪-⎝⎭⎝⎭
对矩阵A 进行操作可计算得
003001003,,,B 007001021L U D -⎛⎫⎛⎫⎛⎫⎛⎫
=-=-== ⎪ ⎪ ⎪ ⎪--⎝⎭⎝⎭⎝⎭⎝⎭
计算矩阵o B 的谱半径可知()0211B ρ=>,所以迭代不收敛。
调用MATLAB 程序中函数对问题3进行求解,其中最大迭代次数设为2000,精度要求设为0.0001,初始迭代
值设为(0,0,0)可得下错误!未找到引用源。
从错误!未找到引用源。
可知,理论分析结果与程序结果一致,方程迭代到最大次
数时均没有收敛。
实验结果分析:从问题1,2,3的实验结果,我们可以总结出,雅格比法只在问题1的求解过程中有作用,而高斯-赛德尔法不仅能解决问题1,而且还能解决问题2,所以高斯-赛德尔法的使用范围比雅格比法更广泛。
方程组的右端系数对两种方法有一定得影响,在初始条件,精度要求相同的条件下可以看出,右端系数越大,得到所需解的迭代次数越多;在同等条件下,高斯赛德迭代法较雅格比迭代法,其收敛速度更快;在某些情况下,雅格比法不能找到方程组的解,而高斯—赛德迭代法能够找到方程组的解。
二、选做题
3、问题三
3.1 问题重述
给定函数2
1
()5,15f x x x -+≤≤=
,及节点50,1,10,i i x i ==-+,求其三次样条插值多项式(可取I 型或II 型边界条件),并画图及与()f x 的图形进行比较分析。
3.2 实验原理
利用样条函数进行插值,即取插值函数为样条函数,称为样条插值。
已知函数y = f (x)在区间[a, b]上的n +1个节点a = x0<x1<… < xn = b 上的值yj=f (xj)(j=0,1,…,n),求插值函数S (x)使其满足: (1)S(xj)=yj(j=0,1,…,n);
(2)在每小区间[xj,xj+1](j=0,1,…,n-1)上S (x)是三次多项式,记为Sj (x); (3)S (x)在[a, b]上二阶连续可微。
则S (x)称为f (x)的三次样条插值函数,它通过上述给定点,为二阶连续可导的分段三次多项式函数。
3.3 实验结果
采用三弯矩法来进行三次样条插值,取II型边界条件,令插值函数在两个端点处的二阶导数:M0和M n值为0。
由于得到的线性方程组系数矩阵为三对角阵,因此在求解线性方程组时采用追赶法,得到结果如下图3所示。
-5-4-3-2-1012345
图3 三次样条插值函数图
从图中可以看出,使用三弯矩法对此函数进行拟合,精确度很高,结果准确。
总结
通过本次实验,我意识到了编程在数值分析实验中的重要性,理论知识不仅能有了很大的理解提升,而且自身的编程能力也有了很大的进步。
在本次实验中,我接触了MATLAB软件,并学习了基础的一些编程语言,我也深深的意识到,想学习好专业课,想发表高端论文,学习MATLAB软件的数值分析应用是十分重要的。
而在MA TLAB编程过程中,我对函数的定义、调用等有了更深一步地了解。
这三个实验,我了解到了多次拟合的实现方法、雅格比和高斯-赛德尔迭代法以及三次样条插值的MA TLAB实现方法。
本来在学习数值分析的过程中,我在理解方面存在一些偏差,但是通过本次实验,我深切的认识到了,对问题的根本理解是十分重要的,看问题要看到本质,从根本上推断从而理解问题的本质。
最后,感谢谢灵红老师一学期的谆谆教导,感谢学校给我们学习这门数学课的机会。
在用数值分析分析问题的过程中,我有了很多的收获,我也认识到了这门课的重要性,相信,这门课的学习将会对我研究生生活的学习有很大的提升,对我日后写论文以及解决工作问题有很大帮助。
感谢这一学期以来,帮助我学习MATLAB软件的师兄师姐,因为第一次做这种编程问题,所以难免会有一些不完善和错误,希望老师给予理解,谢谢!。