Presentation is loading. Please wait.

Presentation is loading. Please wait.

第14章 基本数值算法举例 数值计算是Fortran语言的强项,也是Fortran语言发明者的初衷。本节主要介绍在计算机程序设计语言学习中经常遇到的一些基本数值算法。目的在于加深对Fortran语言的理解和分析,解决问题的一般思路,并希望通过这些例程介绍一些代码编写方面的技巧。

Similar presentations


Presentation on theme: "第14章 基本数值算法举例 数值计算是Fortran语言的强项,也是Fortran语言发明者的初衷。本节主要介绍在计算机程序设计语言学习中经常遇到的一些基本数值算法。目的在于加深对Fortran语言的理解和分析,解决问题的一般思路,并希望通过这些例程介绍一些代码编写方面的技巧。"— Presentation transcript:

1 第14章 基本数值算法举例 数值计算是Fortran语言的强项,也是Fortran语言发明者的初衷。本节主要介绍在计算机程序设计语言学习中经常遇到的一些基本数值算法。目的在于加深对Fortran语言的理解和分析,解决问题的一般思路,并希望通过这些例程介绍一些代码编写方面的技巧。

2 14.1 常用数值积分算法 积分是大学数学中最基础的部分,求积分最好的办法是通过找到积分函数来进行。但有些时候,积分函数并不容易找到。在这种情况下,计算机就派上用场了。通过数值计算的方法,就可以很容易的得出所求积分的近似结果。 假设被积函数的一般形式为,则定义在区间[a,b]上的定积分的几何意义就是曲线与直线、、所围图形的面积。在求解的时候,可以将区间[a,b]划分为n个子区间,每个区间的宽度就是h=(b-a)/n。这样,原来的一大块面积就被划分为若干个小面积,只要这些小的子区间的面积能够求出来,那么最后将这些子区间的面积相加,就可以近似得到所求积分的值。子区间划分得越小(即n越大),同理论上的积分值的近似程度就越高。

3 14.1.1 矩形法 矩形的面积等于底与高的乘积。因此,第i个小矩形的面积可以表示为:
矩形法 矩形的面积等于底与高的乘积。因此,第i个小矩形的面积可以表示为: 在设计矩形法积分计算程序前,先来做一个规划。假设最后的程序由三部分组成:一个主程序,用于管理各个子程序(其中包括矩形法积分子程序);一个具体的积分数值计算子程序,用于实现矩形法的积分计算(或者还有别的方法);在实际计算中,可能碰到的都是一些离散的数据,很少有仅仅是简单函数的情况,因此还可能需要一个读取离散数据的子程序。

4 梯形法 梯形法的基本思想和矩形法没什么不同,只是在求解子区间的面积时,使用梯形而不是矩形来进行近似处理。积分过程中,第i个小区间的面积可以用梯形面积公式求得:

5 Simpson法 Simpson(辛普森)法的基本思路就是用一段抛物线来代替子区间内原来的曲线。这样就用一系列的二抛物线段来对原来的曲线进行拟合,计算这些抛物线所在子区间的面积,最后就可以得到所需要的积分值。

6 数值积分计算子程序的应用 有了前面介绍的三个数值积分计算子程序之后,可以考虑将其放入同一个模块中。当需要调用其中的某一个子程序时,只要引用该模块就可以了。由于积分计算子程序已经在前面详细给出了,这里只给出模块程序单元的代码结构: MODULE INTEGRAL IMPLICIT NONE CONTAINS REAL FUNCTION Rectangle_Integral(FX, H) …… END FUNCTION Rectangle_Integral REAL FUNCTION Trape_Integral(FX, H) END FUNCTION Trape_Integral REAL FUNCTION Simpson_Integral(FX, H) END FUNCTION Simpson_Integral END MODULE INTEGRAL

7 14.2 简单线性代数问题 线性代数也是数值计算中经常会遇到的一类问题。在线性代数问题中,会遇到很多同数组操作有关的问题。通过这一节的学习,希望读者能够进一步掌握有关数组方面的程序设计方法和一些基本的技巧。

8 Gauss消去法求解线性方程组 一般来说,工科大学本科高年级和研究生低年级课程中都还设有数值计算的相关课程。在数值计算中,线性方程组的求解是最基本的要求。在进行线性方程组的求解中,会遇到大量处理整个数组或数组片段的问题。以求解有n个方程的齐次线性方程组为例,要求解的方程组得一般形式如下:

9 14.2.2 Gauss Jordan消去法求解线性方程组
除了上面介绍的基本高斯消去法外,还有一种高斯消去法的改进方法:Gauss Jordan消去法。该方法的基本思路与高斯消去法完全一样,但在消元这一步做的更为彻底。Gauss Jordan消元后的系数矩阵就是一个主对角矩阵,只有主对角线上的元素才有值。做完这一步后,回代的过程更为简单。 Gauss Jordan方法涉及到矩阵的上下三角化操作。通过对矩阵的上下三角化操作来使方程的系数矩阵变为对角化矩阵,即矩阵中除了对角线上的元素外,其余的元素都为零。

10 14.3 非线性函数求解 本节主要介绍非线性函数的基本数值解法。对于一元二次或三次方程,已经有求根公式可供使用。但是对于更高次数的方程而言,推导理论上的求根公式并不容易。反过来,借助数值方法就可以很容易的得到这些高次非线性方程的数值解。 假设非线性函数的一般形式为,则在特定区间[a,b]上求解的几何意义就是找曲线与直线的交点。求解的基本思路是一致的,就是通过迭代来不断逼近要找的交点。但是在具体的实现方法上各种方法是有区别的。根据迭代方式细节的不同,可以分为四种基本的迭代方法:最简单的一种方法就是迭代法,也可以称为简单迭代;一种是牛顿迭代法;一种是二分法;一种是弦截法。

11 迭代法

12 牛顿迭代法 同样是求一元非线性函数 的根,牛顿迭代法(简称牛顿法)则不需要对原始的公式进行变形,可以直接使用到程序中,但需要求出原函数的一阶倒数作为辅助函数。该方法的基本想法是通过曲线上任意一点的切线来逼近函数的根,

13 二分法 二分法是一种相当巧妙和简单的非线性函数求解方法。这种方法不仅应用在非线性函数的求解上,而且还在其他领域有着广泛的用途,是一种通用的基础搜索算法。 二分法求解非线性函数的前提是要确定一个区间[a,b]。在这个区间内,非线性函数应该有一个实根。在此基础上,二分法才能有效地进行工作。如果在给定区间[a,b]内,非线性函数都没有实根,那么求解就无从说起。

14 弦截法 弦截法(也称为割线法,英文原名为Secant)的基本思想和二分法是一致的。只不过搜索区间不再简单的划分成两半,而是由原区间两个端点的连线与x轴的交点来决定。弦截法的思路可以简单的用图来表示。

15 非线性函数求解子程序的应用 现在可以将上面介绍的4种不同的非线性函数求解子程序统统打包进一个模块程序单元中。由于具体的计算子程序代码在前面已经详细给出,因此下面只给出模块程序单元的结构,其中的具体函数可以自行添加。

16 14.4 常微分方程的基本解法 常微分方程是科学研究和工程实践经常遇到的问题,也是数值分析中一个重要的应用领域。在实际应用中,一些偏微分方程在最后也会通过某种形式转化成常微分方程来进行求解,例如计算流体力学中的一些算法。 本节主要介绍一种常用常微分方程的数直解法——龙格库塔法。假设要求解的常微分方程的一般形式如下:

17 14.5 插值与拟合 插值与拟合是数值分析中极为重要的一个方面,它在科学研究和工程分析领域有着非常广泛的应用。

18 拉格朗日多项式插值方法 插值的方法虽然多种多样,但是基本的思想都是一致的——即构造各种类型的插值多项式。例如已知在个自变量上的函数值,则惟一存在一个不超过次的多项式,它在这个自变量上具有与函数相同的值。但是在实际应用中,构造一个次数较高的插值多项式并不实用,而较多地采用低次插值多项式进行分段插值。 在众多的插值方法中,拉格朗日(Lagrange)多项式插值是实际使用中最为常见的一种。假设有n个离散的数据点,则采用拉格朗日多项式插值方法生成通过这n个离散数据的多项式函数如下:

19 牛顿前向插值方法 在插值方法中,牛顿前向插值可以解决拉格朗日方法中遇到的效率问题。牛顿前向插值同样可以得到一个通过n个离散数据的多项式,但在进行插值时它会事先创建插值过程中会用到的差分表格以加快插值的计算速度。牛顿前向插值方法中用来生成插值多项式的公式如下:


Download ppt "第14章 基本数值算法举例 数值计算是Fortran语言的强项,也是Fortran语言发明者的初衷。本节主要介绍在计算机程序设计语言学习中经常遇到的一些基本数值算法。目的在于加深对Fortran语言的理解和分析,解决问题的一般思路,并希望通过这些例程介绍一些代码编写方面的技巧。"

Similar presentations


Ads by Google