计算方法实验报告.docx

上传人:b****8 文档编号:29450216 上传时间:2023-07-23 格式:DOCX 页数:17 大小:347.64KB
下载 相关 举报
计算方法实验报告.docx_第1页
第1页 / 共17页
计算方法实验报告.docx_第2页
第2页 / 共17页
计算方法实验报告.docx_第3页
第3页 / 共17页
计算方法实验报告.docx_第4页
第4页 / 共17页
计算方法实验报告.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

计算方法实验报告.docx

《计算方法实验报告.docx》由会员分享,可在线阅读,更多相关《计算方法实验报告.docx(17页珍藏版)》请在冰豆网上搜索。

计算方法实验报告.docx

计算方法实验报告

《计算方法》实验报告

 

专业班级:

学生姓名:

学生学号:

 

实验名称:

实验一:

非线性方程求根迭代法

实验二:

求解线性方程组

(1)

实验三:

求解线性方程组

(2)

实验四:

数值积分

实验五:

数值微分

 

实验一:

一、实验名称

非线性方程求根迭代法

二、实验目的

(1)熟悉非线性方程求根简单迭代法,牛顿迭代及牛顿下山法

(2)能编程实现简单迭代法,牛顿迭代及牛顿下山法

(3)认识选择迭代格式的重要性

(4)对迭代速度建立感性的认识;分析实验结果体会初值对迭代的影响

三、实验内容

用牛顿下山法解方程

(初值为0.6)

输入:

初值,误差限,迭代最大次数,下山最大次数

输出:

近似根各步下山因子

 

四、基本原理(计算公式)

求非线性方程组的解是科学计算常遇到的问题,有很多实际背景.各种算法层出不穷,其中迭代是主流算法。

只有建立有效的迭代格式,迭代数列才可以收敛于所求的根。

因此设计算法之前,对于一般迭代进行收敛性的判断是至关重要的。

牛顿法也叫切线法,是迭代算法中典型方法,只要初值选取适当,在单根附近,牛顿法收敛速度很快,初值对于牛顿迭代

至关重要。

当初值选取不当可以采用牛顿下山算法进行纠正。

一般迭代:

牛顿公式:

牛顿下山公式:

下山因子

下山条件

五、算法设计与实现(流程图)

牛顿下山算法见流程图:

六、个人理解:

这个问题的关键之处不是公式的复杂性,而是如何对算法的实现提供一个条理清晰且方法合理的if嵌套,这个算法中运用了许多判断,如何进行其判断结果的返回将是解决这个问题的重中之重。

把这个问题弄清楚,再结合本身并不复杂的算法公式,这个问题就可解了。

这个程序开始花费了我很长时间搞清楚如何进行判断返回的运算来解决if语句嵌套。

七、输入与输出

图1

图2

八、结果讨论和分析

可见,该程序的输出分为两个情况,两者的差别是初值选取的不同,所以说,牛顿法的收敛性依赖于初值x0的选取,如果x0偏离x的准确值较远,则牛顿法将可能发散。

所以要引入牛顿下山法来避免这一情况。

所以,当图2情况下,初值为0.6的时候,会进行牛顿下山法使结果可以进行再次迭代,解决了牛顿法初值选取问题。

实验二:

一、实验名称

求解线性方程组(Gauss-Seidel迭代法)

二、实验目的

(1)熟悉求解线性方程组的有关理论和方法;

(2)能编程实现雅可比及高斯-塞德尔迭代法、列主元高斯消去法、约当消去,追赶法

(3)通过测试,进一步了解各种方法的优缺点

(4)根据不同类型的方程组,选择合适的数值方法

三、实验内容

用Gauss-Seidel迭代法求解方程组

输入:

系数矩阵A,最大迭代次数N,初始向量,误差限e

输出:

解向量

四、基本原理(计算公式)

无论是三次样条还是拟合问题最终都归结为线性方程组,求解线性方程组在数值分析中非常重要,在工程计算中也不容忽视。

线性方程组大致分迭代法和直接法。

只有收敛条件满足时,才可以进行迭代。

雅可比及高斯-塞德尔是最基本的两类迭代方法,最大区别是迭代过程中是否引用新值进行剩下的计算。

消元是最简单的直接法,并且也十分有效的,列主元高斯消去法对求解一般的线性方程组都适用,同时可以用来求矩阵对应的行列式。

约当消去实质是经过初等行变换将系数矩阵化为单位阵,主要用来求矩阵的逆。

在使用直接法,要注意从空间、时间两方面对算法进行优化。

高斯-塞德尔迭代:

五、算法设计与实现(流程图,个人理解)

 

个人理解:

该算法最考验人的地方在于对运算公式的理解,这个公式相对于其他几个实验来说是最难的,其原因在于要用到多重嵌套循环,而且其中对数组的运用对于很多同学来说也是比较困难的。

只要将其中依次将数组的值的和对另一个数组赋值的原理搞清楚以后,这个问题将很容易解决,所以,这一点,也是这个程序最考验人的地方。

 

六、输入与输出

七、结果讨论和分析

对于求解行列式来说,一般的方法很难求出,只能通过之前步骤的结果一步步地将结果求得,在这些迭代中,选取一个好的迭代方式,既避免了可能存在的发散情况,又加快了收敛次数。

上两图说明高斯赛德尔迭代对于某些迭代来说还是有缺陷的,并不能解出有效结果。

实验三:

一、实验名称

求解线性方程组(选主元高斯消去)

二、实验目的

(1)熟悉求解线性方程组的有关理论和方法;

(2)能编程实现雅可比及高斯-塞德尔迭代法、列主元高斯消去法、约当消去,追赶法

(3)通过测试,进一步了解各种方法的优缺点

(4)根据不同类型的方程组,选择合适的数值方法

三、实验内容

用选主元高斯消去求行列式值

四、基本原理(计算公式)

提示:

A.

B.消元结果直接存储在系数矩阵中

C.当消元过程发生两行对调的情况为偶数次时,行列式值为对角线乘积,否则为对角线乘积的相反数

 

2

(5)用选主元约当消去分别对矩阵求其逆矩阵,若不可逆输出奇异标志

 

提示:

 

五、算法设计与实现(流程图)

 

 

六、个人理解:

我感觉选主元高斯消去编程稍微有一些困难,难在对公式的理解,还有对数组的处理。

可能我从一开始就理解有误,只是把握住了其中心思想,但是对其函数的具体实现还是存在一些偏差,导致输出结果并不是很理想。

七、输入与输出

八、结果讨论和分析

感觉我这个程序运行还是有些问题,无法实现某些功能,仅仅能够解决行列式的最终求值问题。

实验四:

一、实验名称

数值积分

二、实验目的

(1)熟悉复化梯形方法、复化Simpson方法、梯形递推算法、龙贝格算法;

(2)能编程实现复化梯形方法、复化Simpson方法、梯形递推算法、龙贝格算法;

(3)理解并掌握自适应算法和收敛加速算法的基本思想;

(4)分析实验结果体会各种方法的精确度,建立计算机求解定积分问题的感性认识

三、实验内容

(1)用龙贝格算法计算

输入:

积分区间,误差限

输出:

序列Tn,Sn,Cn,Rn及积分结果

四、基本原理(计算公式)

在许多实际问题中,常常需要计算定积分

的值。

根据微积分学基本定理,若被积函数f(x)在区间[a,b]上连续,只要能找到f(x)的一个原函数F(x),便可利用牛顿-莱布尼兹公式

求得积分值。

但是在实际使用中,往往遇到如下困难,而不能使用牛顿-莱布尼兹公式。

(1)找不到用初等函数表示的原函数

(2)虽然找到了原函数,但因表达式过于复杂而不便计算

(3)f(x)是由测量或计算得到的表格函数

由于以上种种困难,有必要研究积分的数值计算问题。

利用插值多项式

则积分

转化为

,显然易算。

称为插值型求积公式。

最简单的插值型求积公式是梯形公式和Simpson公式,。

当求积结点提供较多,可以分段使用少结点的梯形公式和Simpson公式,并称为复化梯形公式、复化Simpson公式。

如步长未知,可以通过误差限的控制用区间逐次分半的策略自动选取步长的方法称自适应算法。

梯形递推公式给出了区间分半前后的递推关系。

由梯形递推公式求得梯形序列,相邻序列值作线性组合得Simpson序列,Simpson序列作线性组合得柯特斯序列,柯特斯序列作线性组合的龙贝格序列。

若|R2-R1|<,则输出R2;否则…依此类推。

如此加工数据的过程叫龙贝格算法,如下图所示:

复化梯形公式

复化Simpson公式

梯形递推公式

加权平均公式:

龙贝格算法大大加快了误差收敛的速度,由梯形序列O(h2)提高到龙贝格序列的O(h8)

五、算法设计与实现(流程图)

(1)

龙贝格算法见流程图

六、个人理解

龙贝格算法其实是在梯形递推的基础之上生成的一种精度高,而且收敛速度也较快的一种算法。

对于梯形算法来说,程序比较容易编写,而龙贝格算法,程序中需要注意用龙贝格算法加速收敛的时候如何处理判断以后生成的返回值才能使程序正常运行。

而且,对于本题的特殊性,对于积分的函数中存在分母为x的情况,在此情况下,就必须要讨论x为0溢出的情况,刚开始编好的程序总是出现莫名其妙的输出,后来才发现是出现了分母为0的情况。

所以,在编程中,要注意细节,往往一个很好的程序,某一个不起眼的细节很可能影响整个程序的正常运行。

还有最后编写防止溢出的操作函数的时候,==不小心写为=,也找了很久的错误。

这些都是非常低级的错误,但是因为粗心,仍然出现了。

所以,以后编程要认真。

七、输入与输出

八、结果讨论和分析

龙贝格算法可以达到预期目的,求得所需要的结果。

但无法分析出是否节约了时间和效率,但绝对是个可行的办法。

实验五:

一、实验名称

微分方程的差分方法

二、实验目的

(1)熟悉数值微分中Euler法,改进Euler法,Rung-Kutta方法;

(2)能编程实现Euler法,改进Euler法,Rung-Kutta方法;

(3)通过实验结果分析各个算法的优缺点;

(4)明确步长对算法的影响并理解变步长的Rung-Kutta方法

三、实验内容

(1)

0

取h=0.1时用Euler法,改进Euler法,Rung-Kutta方法求其数值解并与精确解进行比较。

输入:

求解区间,初值,数值解个数

输出:

数值解

四、基本原理(计算公式)

在许多科学技术问题中,建立的模型常常以常微分方程的形式表示。

然而,除了少数特殊类型的常微分方程能用解析方法求其精确解外,要给出一般方程解析解的表达式是困难的。

所以只能用近似方法求其数值解,在实际工作中常用计算机求常微分方程的数值解。

所谓常微分方程的数值解即对于常微分方程初值问题

计算出在一系列节点a=x0

数值解法的基本思想用差商代替导数,实现连续问题离散化,选取不同的差商代替导数可以得到不同公式。

改进欧拉公式是常用方法之一,包括预测和校正两步。

先用欧拉公式进行预报,再将预报值代入梯形公式进行校正,从而达到二阶精度。

通过龙格-库塔法我们可以获得更高精度。

经典龙格-库塔法即在区间[xn,xn+1]取四点,并对这四点的斜率进行加权平均作为平均斜率,通过泰勒公式寻找使局部截断误差为O(h5)(即4阶精度)的参数满足条件。

改进的欧拉公式:

预测

校正

四阶(经典)龙格-库塔公式

五、算法设计与实现(流程图)

 

六、个人理解

由于该算法的步骤很少,而且主要步骤很集中,所以编写程序非常简单,即将流程图中的替代过程稍微加工再加上几个简单的返回即可完成。

该程序难点在于对迭代次数的限定,既要考虑N的限制,又要考虑(y-x)/h的长度,要两者兼顾,才能得出正确的输出次数。

不过这几乎不影响最后的输出结果,但要是想编出一个完美的程序,还是要好好考虑这一点,只有追求完美才能超越自我。

还要注意的是对算法的理解,这个算法还需要自己对函数进行求导,将导数带入程序,而不是将原函数带入程序。

七、输入与输出

 

八、结果讨论和分析

该方法能够正常的得到所求的解,输出的精度也较高。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1