何谓数值分析?
众所周知现实生活中科学技术上面的问题大多数都能够通过建立对应的数学模型把实际问题转化成一个数学问题,但是往往很多的实际问题即便建立了相对应的数学模型仍然无法有效的通过常规手法求得其解,或者求解的方法十分的复杂,为了简化计算有效的求其解或者是近似解从而解决实际问题从而催生出了数值分析这一门课程。数值分析按我自己的理解就是通过有效的科学的手段简便的求解数学模型的方式方法。因此数值分析也叫科学计算。同时随着计算机的发展解放了人类的劳动力把许多数学工作者从繁复的计算中解脱了出来,计算机本来一开始就是为数学而生的,我们人类不是万能的有其固有的局限性,随着人类社会科学技术的发展越来越多的科学技术问题仅仅靠人力来计算无疑是痴人说梦异想天开的,有了计算机我们期待能够把许多的数学模型都设置成一套算法放在计算机上面跑,把复杂的机械化的事情都交给计算机去做,而数值分析恰恰就是面向计算机的一门实用性很强的一门学科。用计算机求解科学技术问题通常经历以下步骤:
根据实际问题建立数学模型
由数学模型给出数值计算方法
-
根据计算方法编制算法程序在计算机上得出结果
第一步建立数学模型通常是应用数学的范畴,第二三步就是数值分析与科学计算的范畴
数值分析思维导图如下
由于人类的局限性与抽象模型与现实世界的差异所造成的误差
误差的分类:
- 模型误差:要建立数学模型就需要对现实世界进行抽象,既然是
抽象那么误差就会必然的产生误差 - 观测误差:所谓观测误差顾名思义就是观测不准造成的误差,这主要是由于人类生理上的局限性造成的
- 阶段误差或者方法误差:这主要是人类智力上局限性造成的误差,在解决数学问题的过程中大多数我们不能够通过已有的方法得到精确解只能得到近似解,比如可微函数用泰勒多项式展开就必然会有余项即截断误差
- 舍入误差:这是由于计算机的字长有限把一个超过字长的数输入计算机就会溢出从而得到不精确的数值。
既然由于各种各样的局限性造成的误差的是不可避免的,我们要想克服我们人类自身的局限性就必须学会如何去控制误差,如果把误差控制合理的范围内,使得其对实际问题的影响微乎其微,得到一个与精确解近似的近似解,这又何尝不是身为万物之灵的人类征服自然超越自我的一种体现
误差的基本概念
绝对误差:
相对误差:
相对性是自然界中普遍存在的真理,任何事情都是相对的,误差也不例外,误差的大小需要参考真实值的大小,因此就称为相对误差,但是在实际问题中真实值的大小我们通常是不知道的因此就用来代替相对误差。
相对误差限:
相对误差绝对值的上界就叫做相对误差限。
数值运算的误差估计:
于是由泰勒展开得到
如何尽量减少误差:
- 尽量减少运算次数
- 设计算法尽量保证误差不在计算过程中增长太快以及要避免出现病态问题
- 要尽量使得计算公式避免或者减少有效数字的损失
迭代法与开方求值
迭代法是按照同一公式重复计算逐次逼近真实值的算法,是数值计算中普遍使用的方法,比如说开方运算,他不是四则运算,计算机只能处理四则运算因此在计算机上面要想开方就得将开方运算化解为四则运算,这就是迭代法
设使
即得
于是:
将迭代公式两别取极限可得
由上式迭代公式的推导可知道,要想构造迭代公式需要满足迭代公式收敛而且收敛与真值,显然迭代公式是十分适合计算机进行运算的重复的事情机械化的事情是计算机最擅长做的事情,我们把迭代公式输入计算机,就相当于给了计算机一个运算规则,计算机根据这个规则就懂得如何求值
以直代曲的牛顿迭代法
牛顿迭代法是由求根公式构造出来的,现有一个函数
求重根的Newton迭代法
事实上若
线性代数方程组的数值解法
在高等代数中我们学过界限行方程组如果其系数行列式不为零那么方程组有唯一解,则可以用Cramer法则求出唯一解但是Cramer法则计算量太大因此以现有的计算机的运算速度是吃不消的,因此必须研究其它数值解法。
Gauss消去法解线性方程组:
高等代数中学过如果一个矩阵非奇异,则其上三角举证有唯一解如果把一个线性方程组的系数矩阵用Gauss消元法化成一个上三角举证无疑会减少大量的计算量使得计算机的负荷没那么大,(注意:高斯消去法的前提条件是消去法所形成的主元素均不为零,当n阶矩阵的所有顺序主子式都不为零时候条件满足)
追赶法:
主要运用在三对角矩阵中运用Gauss消去法将对角线元素下的元素小消去
列主元Gauss消去法:
主要是为了防止舍入误差给值带来的负面影响,当Gauss消元进行到第K步的时候如果第K行的元素相对于其他行元素来说过于小的化当第K行乘上一个数加到其他行消元的时候会放大误差,因此在消元的时候往往通过调换主元来控制误差
矩阵的直接分解法:
Gauss消去法的过程实际上是对方程组的增广矩阵实行行变换也就是左乘以n-1个矩阵(如果是n阶矩阵的话),左乘的n-1个矩阵的乘积是一个下三角矩阵,因此矩阵A如果可以运用Gauss消元法的话就可以把A化为一个上三角矩阵以及一个下三角矩阵的乘积形式即
一个线性方程组的增广矩阵
根据矩阵的乘法法则比较两边第一行和第一列的元素有
即得:
由已给出的
对称矩阵的直接分解法:
对于对称矩阵而言由上面的计算公式可以推的
迭代法:
几个常用的迭代格式:
-
由线性方程组
建立迭代格式
-
Guss-Seidel迭代格式
仔细观察就能够发现迭代公式当计算出了因此我们可以对做适当的改进利用已经计算出的值来计算下一个的值因为理论上来讲已经经过计算了的值更加的精确
这就是Guss-Seidel迭代格式
前面已经说过要想知道构造的迭代公式使用与否,要看迭代公式是否收敛,那么如何判断迭代公式是否收敛嘞?
我们可以把中的系数矩阵A拆分为一个对角元素为零的下三角矩阵,一个对角元素为零的上三角矩阵,以及一个除对角元素部位零外其余元素都为零的矩阵的和即
由此可以推得迭代格式其中
同理可以推得Guss-Seidel的迭代格式为
迭代格式的收敛性:
迭代格式收敛的充分必要条件是(即的特征根的最大值小于1)由可以推得矩阵的特征方程为A的主对角元素乘上一个后行列式等于零的解
同理迭代格式收敛的充分必要条件是 可以推得G的特征方程为A的主对角线上以及以下的元素乘上后行列式等于零的解。插值与逼近
在许多的科学问题中,经常要研究变量与函数之间的关系,如果的函数表达式很复杂或者只能够得到有效的几个点这都给研究问题带来困难,因此我们希望用一个简单的函数去近似的代替用以满足实际问题的需要。但是由于近似度量标准的不同也就构成了插值与逼近。插值主要是用几个已知条件去构造一个较为简单的多项式函数来代替已知函数,而逼近是用一个函数去逼近已知的函数。
Lagrange插值函数
设函数在区间上由个互异的节点如果存在一个不超过 次的多项式,则:
一般而言我们通过个条件各已通过解线性方程组来确定次多项式的系数从而确定多项式但是通过线性方程组解方程求系数过于麻烦因此我们希望有通过插值节点来构造插值多项式的公式
插值多项式有如下形式
很自然的 有形式
显然这样的形式满足上面的条件,因此就是的n阶插值多项式而且插值多项式式唯一的
Newton插值多项式与差分,差商
牛顿插值多项式的提出是在拉格朗日多项式的基础上的,上面提到的拉格朗日插值多项式由于在构造插值多项式的时候插值节点式确定的,因此如果我们希望在多加几个插值节点构造更高次的插值多项式那么我们就需要把拉格朗日的插值系数推倒从来很不灵活没有插值公式的重用性,众所周知我们在计算几种输入代码的时候我们也希望提高代码的重用性用以减轻编程人员的负担,而牛顿插值多项式的提出恰好弥补了拉格朗日插值多项式的不足,使得插值公式更加的灵活,在之前节点数插值公式的基础上可以只要经过适当的修正就可以得到新的插值多项式。
Newton插值多项式的思想
假设有已经构造出的个节点的次的插值多项式我们希望通过推导出增加了一个节点的插值多项式设显然根据插值多项式的定义有个零点,因此有形式
因此
如果常数可以确定出来那么我们就可以通过来构造推导
事实上我们通过推导得到的
然而直接通过公式来推导的值式困难的,但是数学家们通过从最简单的推导开始
差分的导出
对于一个插值节点的插值多项式
对于两个插值节点的插值多项式为线性插值
即称之为一阶差商形式
同样的,可以推得
定义为二阶差商形式
数学家只通过推到了一阶差商和二阶差商,更高阶的推到出来不现实,因此数学家们把所具有的形式称之为差商并且定义出来差商的形式,而且通过数学归纳法的验证阶差商就是。
定义阶差商为
这就是差商的由来,数学家们先发现从简单的开始然后猜想出可能具有哪些形式然后把这种形式称作差商,然后用数学归纳法证明差商就是推到差值公式的系数,这就是差商产生的整个过程,大家不要小看这个过程,很多的数学公式的由来都是与差商推到相类似的思维方式。还有所谓的数学归纳法其实有点类似于大家都知道的多米诺骨牌效应只要证明第一个成立,并且只要前面的满足导致后面的满足,这个就是成立的。就像多米洛骨牌只要推到第一个其他的也会跟着倒下去,老实说笔者刚看书的时候也对这个差商是怎么来的百思不得其解,知道我多找了几本书参考了之后才搞明白这个差商是怎么来的,差商的推到思维过程真的是很有意思嘞。
差商可以通过构造差商表来进行计算是分的方便,放到计算机中只要输入算法,构造插值多项式是一件极其简单的事情
差分及其等距节点的Newton插值多项式:
对于等距节点而言我们可以极大的减少计算差商的计算量,可以将差商形式化解为差分的形式。
等距节点其节点为
因为的值是固定不变的因此我们可以定义设法化解差商
定义
类似地,称称之为在处以为步长的阶向前差分,简称
然后我们应用数学归纳法可以证明差分与差商的关系如下:
因此将差分与带入插值多项式可以得到:
称之为
Hermite插值
前面介绍的插值公式都只是考虑到插值多项式在插值节点处取给定的函数值但是往往在实际问题中只要求函数值满足还不够还要要求在这些点上的导数值也相等这即是插值这里不做过多的讨论感兴趣的可以去翻看相关书籍。
高次插值的缺点及其分段插值
在进行高次插值的时候有可能会发生龙格函数函数的状况,即高次插值的插值多项式有可能并不收敛于已知函数为了应对这种清苦保证插值函数一致收敛于已知函数,我们可以把已知函数分成个小区间然后在每个小区间上进行插值或者插值,但是如果分成的插值小区间过多的时候在每个小区间上面我们其实不要选择过多的插值节点就可以,因为区间小插值函数比较精准,所以一般我们每个小区间上面选取一个到四个插值节点就够了,但是往往我们还要满足插值节点的导数情况这样我们只要知道区间端点的两个函数值及其导数值我们就可以构建每个小区间上的三次插值多项式这就是三次样条插值。
三次样条插值:
设在区间上给定个插值节点
及其相对应的函数值
若函数满足:
在每一个小区间上是三次多项式
上有连续的二阶导数则称为3次样条插值函数
从定义可知要使得在每个小区间上都是三次多项式则每个小区间上需要满足四个条件才能够构建三次多项式,总共需要4n个条件,有已经知条件有个插值节点满足的条件有个条件,再加上联结条件
这里有个条件,一共就有了个条件
在加上个边界条件:
其中的一项总共就有个条件就可以确定唯一的三次样条插值
至于三次样条的求法这里不做过多描叙感兴趣的自己去看书。
最佳一致逼近
之前的多项式插值都是要求在插值节点满足被插值函数的一些条件,在插值节点处误差为零,这是一种近似的度量标准,下面介绍另外的两种近似度量标准,要求在整个区间上插值函数与被插值函数的误差尽可能的小,但不要求相等。
最佳一致逼近多项式
设若存在 使得对任意的 (为所有次数不超过的多项式的集合)
有: , 则称 为的最佳一致逼近多项式。
也就是说最佳一致逼近多项式是所有多项式中函数值与被插值函数的差的最大值最小的插值多项式
最佳一致逼近多项式的构建主要是利用最佳一致逼近多项式存在交错偏差点的性质。
为了求最佳一致逼近多项式以及求最佳近似一致逼近多项式可以引进多项式,有最佳一致逼近多项式的定义可知,要求最佳一致逼近多项式也就是求的最小零偏差问题,而正好多项式有在区间上所有首项为一的次多项式中对零的偏差最小,因此可以借助多项式求最佳一致逼近多项式,而且多项式有很多的性质,比在区间有个不同的零点,还有一个交错偏差点组,如果以多项式的零点做插值多项式则可以使得插值多项式的余项取得最小,这就是最佳近似一致逼近多项式。如果求不是在区间上构建一致逼近多项式,那么可以通过变换把它变为上的被插值函数然后做一致逼近。
具体内容请参考相关书籍
最佳平方逼近多项式
最佳一致逼近多项式考虑的是在区间上值的误差的最大值最小,而最佳平方逼近多项式是考虑在整体上误差最小,有些被插值函数仅仅只是在很小的一个区间上波动很大,这样的被插值函数显然用最佳一致逼近多项式去逼近并不合适,因此需要用另外的度量标准去度量近似程度。
- 离散数据的最佳一致平方逼近
设 若存在 使得对任意的 (为所有次数不超过的多项式的集合)
有: 则称 为的最佳平方逼近多项式 - 连续函数在区间上的最佳一致逼近
则称 为的最佳平方逼近多项式
数值积分与数值微分
函数求导数与求微分的问题已经在数学分析中得到解决了,但是如果是面对离散的数据时候求导与求积公式都不能使用,而且计算机是不能够处理连续的问题的,因此如果要想把积分法则变成计算机程序就必须把积分变成离散的问题转变为四则运算而后才可以给计算机输入一套算法。
实际上一个函数在某个区间上面的积分本身就可以看做是函数在这个区间上无穷多项的和我们不妨就设想积分有这样的形式。设给定的一组节点已知函数在这组节点上的值为则可以做插值多项式,是插值基函数于是得到一个求积公式:
得到,为求积系数如果求积节点是等距的那么其插值型求积公式为求积公式求积系数的公式可以推导出来具体请参考相关书籍。
- 当选取两个求积节点的时候其求积公式如下:
是为梯形公式 - 当选取三个节点的时候求积公式如下:
是为公式 - 当选取五个等距节点的时候是为Cotes公式,公式略
代数精度的概念
如果求积公式对所有次多项式都精确成立且至少有一个次多项式不成立则称求积公式有次代数精度,梯形公式有有2次代数精度,,有五阶代数精度。
复化求积公式
所谓复化求积公式是当一个求积区间很大的时候我们可以把这个区间等分成很多分然后对每个小区间用插值型求积公式理论上来讲区间分的越小越精确误差越小 - 复化梯形公式
= - 复化公式
- 其他复化公式略。。。
常微分方程的数值解法
在常微分方程中我们学习过常系数线性方程组,变系数微分方程组,与非线性方程组的求解公式,但是在实际科学研究中往往有很多的问题非常的复杂,我们无法运用常规的方法求其公式解或者是即便求出来了也及其的不方便计算,因此我们就只能想办法求其数值解。
Euler方法求解
方法是求解初值问题的最简单的数值方法
为了求数值解我们需要把区间离散化为步长为 的个小区间
讨论关于一阶微分方程的初值问题
将方程组一式两边积分移项可得:
然后运用左矩形公式可得:
则
则上式成为公式实际上欧拉公式就是把函数在第个小区间上的导数都用来代替然后运用直线公式求其在节点的函数值,显然这种情况当区间选取足够小的时候才会精确
构造更高精度的求解公式梯形公式
将式左边运用梯形公式可得,不难想象如果在一个小区间上我们多选取几个点求其斜率值的平均值那么求小区间内求积节点的数值解的准确度会更高,梯形公式就想当与用了两个点的平均斜率做函数在小区间上的斜率值,但是在这里我们的是一个未知值因此我们需要将公式与梯形公式合在一起用,先用公式求得的一个粗糙值,然后将其带入梯形公式
求数值解就是把连续的问题,离散化,然后利用递推公式求值