一、误差
1. 误差的产生
从纯数学的角度,我们求解问题的答案是完全精确的但在实际工程问题中,我们是很难真正得到所谓的精确解,常常只需要近似解就可以了。
误差的来源一般有:
- 模型误差:从实际问题中抽象出的数学模型,一般只研究主要因素,所以往往是实际问题的近似描述;(由于这类误差难以定量分析,所以本课程假定研究的数学模型是合理的)
- 观测误差:通过测量得到模型中参数的值,由于测量工具和测量手段的限制,也会有误差;(本课程也不对此类误差作过多研究)
- 截断误差(方法误差):求近似解时产生的误差;
- 舍入误差:由于机器字长有限导致的误差;
例:近似计算∫01e−x2dx.
解:原函数不存在,考虑将e−x2作Taylor展开后再积分,∫01e−x2dx=∫01(1−x2+2!x4−3!x6+4!x8−⋯)dx=1−31+2!1×51−3!1×71+4!1×91−⋯,若将前四项记作S4,取∫01e−x2dx≈S4=1−31+101−421≈1−0.333+0.1−0.024=0.743,则计算分数时的四舍五入导致了舍入误差,此时∣舍入误差∣<0.0005×2=0.001,而R4=4!1×91−5!1×111+⋯称为截断误差,此时∣R4∣<4!1×91<0.005,因此∣计算∫01e−x2dx的总体误差∣<0.005+0.001=0.006.
2. 误差的有效数字
定义:我们把e(x)=x−x∗称为绝对误差,其中x为精确值,x∗为x的近似值。由于精确值往往无法得知,我们记∣e(x)∣的上限为ε(x),并称其为绝对误差限,工程上常记为x=x∗±ε,例如x=200±0.25。
e(x)理论上是唯一确定的,可能取正也可能取负。但ε(x)>0并不唯一,当然ε(x)越小越具有参考价值。
定义:我们把er(x)=xe(x)称为相对误差,x的相对误差上限定义为εr(x)=∣x∗∣ε(x)。
有时会把ε(x)简写为ε,把εr(x)简写为εr。
定义:若近似值x∗的绝对误差限是某一位的半个单位,就称x∗精确到这一位,且若从该位直到x∗的第一位非零数字共有n位,则称近似值x∗有n位有效数字。即,假设x∗=a1a2⋯am.am+1⋯an(其中a1=0),则称x∗有n位有效数字,可用科学计数法表示为x∗=±0.a1a2⋯an×10m,则∣x−x∗∣≤0.5×10m−n。
例:π=3.1415926535897932⋯,若取π∗=3.1415,问π∗有几位有效数字?请证明。
解:∵π∗=0.31415×101,且∣π∗−π∣=0.0000926⋯<0.5×10−3=0.5×101−4,∴π∗有4位有效数字,精确到小数点后3位。
注意:0.2300有4位有效数字,而00023只有2位有效数字。12300如果写成0.123×105,则表示只有3位有效数字。(数字末尾的0不可随意省去)
有效数字与相对误差的关系1:如果x∗有n位有效数字,那么它的相对误差限为εr≤2a11×10−n+1。
证明:根据定义,εr=∣x∗ε∣≤0.a1a2⋯an×10m0.5×10m−n=2×0.a1⋯10−n≤2a11×10−n+1.
有效数字与相对误差的关系2:已知x∗的相对误差限可写为εr=2(a1+1)1×10−n+1,则x∗至少有n位有效数字。
证明:∣x−x∗∣=εr⋅∣x∗∣=2(a1+1)10−n+1×0.a1a2⋯×10m<2(a1+1)10−n+1⋅(a1+1)×10m−1=0.5×10m−n,因此,根据有效数字的定义,x∗至少有n位有效数字。
例:为使π∗的相对误差小于0.001%,至少应取几位有效数字?
解:假设π∗取到n为有效数字,则其相对误差上限为εr≤2a11×10−n+1,要保证其相对误差小于0.001%,只要保证其上限满足εr≤2a11×10−n+1<0.001%,已知a1=3,则从以上不等式可解得n>6−log6,即n≥6,应取π∗=3.14159。
3. 误差的积累与传播
误差的积累
例:计算In=∫01xnex−1dx,n=0,1,2,⋯.
解:估算In的范围:∵e−1<ex−1<e1−1(x∈(0,1)),∴∫01xn⋅e−1dx<In<∫01xn⋅e1−1dx,即e(n+1)1<In<n+11。
公式一:用分部积分法得In=∫01xnex−1dx=xnex−1∣01−∫01nxn−1ex−1dx=1−nIn−1,I0=∫01ex−1dx=1−e1≈0.63212056=记为I0∗,则初始误差∣E0∣=∣I0−I0∗∣<0.5×10−8,依次计算I1∗⋯I15∗,得I1∗=1−1⋅I0∗=0.36787944⋯I10∗=1−10⋅I9∗=0.08812800I11∗=1−11⋅I10∗=0.03059200I12∗=1−12⋅I11∗=0.63289600I13∗=1−13⋅I12∗=−7.2276480I14∗=1−14⋅I13∗=94.959424I15∗=1−15⋅I14∗=−1423.3814,可见从I12∗开始就已经不在之前估算出来的积分范围内了,考察第n步的误差En,∣En∣=∣In−In∗∣=∣(1−nIn−1)−(1−nIn−1∗)∣=n∣En−1∣=⋯=n!∣E0∣,可见初始的小扰动∣E0∣<0.5×10−8迅速积累,误差呈递增走势。
公式二:In=1−nIn−1⇒In−1=n1(1−In),此公式理论上与公式一等价。要使用此公式,首先要估算一个Im,再反推要求的In(n≪m),∵e(m+1)1<Im<m+11,可取区间的中点作为Im的估计值,即Im∗=21[e(m+1)1+m+11]≈Im,估算出I15∗=21[e⋅161+161]≈0.042746233,则I14∗=151(1−I15∗)≈0.063816918I13∗=141(1−I14∗)≈0.066870220I12∗=131(1−I13∗)≈0.0071779214⋯I1∗=21(1−I2∗)≈0.36787944I0∗=11(1−I1∗)≈0.063212056,考察反推一步的误差∣Em−1∣=∣m1(1−Im)−m1(1−Im∗)∣=m1∣Em∣,依此类推,对n<m有∣En∣=m(m−1)⋯(n+1)1∣Em∣,误差逐步递减,这样的算法称为稳定的算法。
四则运算的误差传播
两个近似数进行加、减、乘、除运算后的绝对误差:
- ε(x1±x2)≈ε(x1)+ε(x2);
- ε(x1x2)≈∣x2∣ε(x1)+∣x1∣ε(x2);
- ε(x2x1)≈∣x2∣2ε(x1x2)≈∣x2∣2∣x2∣ε(x1)+∣x1∣ε(x2),(x2=0)。
两个近似数进行加、减、乘、除运算后的相对误差:
- εr(x1±x2)≈∣x1±x2∣ε(x1±x2)≈∣x1±x2∣ε(x1)+ε(x2)≈∣x1±x2∣x1εr(x1)+x2εr(x2);
- εr(x1x2)≈εr(x1)+εr(x2);
- εr(x2x1)≈εr(x1)+εr(x2)。
函数的误差传播
对于y=f(x),若x存在误差,对y产生的影响:
f的条件数在x处小,则称f在该点是好条件(f的条件数在x处大,则称f在该点是坏条件)。
4. 误差的控制(算法的稳定性)
为把误差控制在一定范围内,构造算法时要遵循以下准则:
避免大数“吃”小数。避免方法:求和时从小到大相加,可使和的误差减小;
因为如果有的数相差数量级,而计算机字长有限,有时小数会被“吃掉”。
例如:用单精度的计算器按从小到大、以及从大到小的顺序分别计算1+2+3+⋯+40+109,
如果按从小到大算,先计算1+⋯+40=820,由于820与109相差数量级,先将109写成109=0.1×1010,再把820写成820=0.0000 0008 20×1010,由于单精度只能保留八位有效数字,20会被四舍五入舍弃,因此820+109≈0.1000 0008×1010;
如果从大到小的算,先计算40+109=0.0000 0000 4×1010+0.1×1010≈0.1000 0000×1010,因此40会被109吃掉,其他数同理,最后的计算结果为1+2+3+⋯+40+109≈109,只有一位有效数字。
避免两个相近的数相减。避免方法:用等价的公式替换,如x+ε−x=x+ε+xε、ln(x+ε)−lnx=ln(xx+ε)、当∣x∣≪1时1−cosx=2sin22x、当∣x∣≪1时ex−1=x(1+21x+61x2+⋯);
两个相近的数相减会导致有效数字的严重损失,导致误差增大。
例如:a1=0.12345,a2=0.12346,各有5位有效数字,而a2−a1=0.00001,只剩下一位有效数字,如果精度不够,很容易丢失。
避免小分母。避免方法:用等价的公式替换,如当x接近零时将sinx1−cosx转化为等值式1+cosxsinx;
分母小会造成浮点溢出。
先化简再计算,减少步骤,避免误差积累;
例如:直接计算x127需要做126次乘法,但若写成x127=x⋅x2⋅x4⋅x8⋅x16⋅x32⋅x64,只需要12次乘法运算。
再如:计算多项式Pn(x)=a0+a1x+a2x2+⋯+anxn,若直接计算需2n(n+1)次乘法和n次加法,但若改写为Pn(x)=a0+x(a1+x(a2+⋯+x(an−1+xan))⋯),则只需做n次乘法和n次加法。
选用稳定的算法。
例如前面误差的积累中的题目,如果用In=1−nIn−1就不是好算法,但若反过来,用In−1=n1(1−In)计算,则误差就会越来越小,所以这是一个好算法,是稳定的。
二、非线性方程的数值解法
1. 方程求根的基本思想
对于方程f(x)=0,当f(x)不是x的线性函数时,称对应的函数方程为非线性方程,如果f(x)是多项式函数,则称为代数方程,否则称为超越方程(如三角方程,指数、对数方程等)。
非线性方程根的定义:非线性方程f(x)=0的根,亦称为函数f(x)的零点。如果f(x)可以分解为f(x)=(x−x∗)mg(x),其中m为正整数且g(x∗)=0,则称x∗是f(x)的m重零点,或称方程f(x)=0的m重根,当m=1时称x∗为单根。若f(x)存在m阶导数,则是方程f(x)的m重根(m>1),当且仅当f(x∗)=f′(x∗)=⋯=f(m−1)(x∗)=0,f(m)(x∗)=0。
求根的算法思路:
(1)根的存在性:方程有没有根?如果有,有几个根?
(2)这些根大致在哪里?如何把根隔离开来?
(3)根的精确化。
根的存在性定理(零点定理):设函数f(x)在区间[a,b]上连续,如果f(a)⋅f(b)<0。则方程f(x)=0在[a,b]内至少有一实根x∗。
根据该定理找根的方法一:画出f(x)的略图,从而看出曲线与x轴交点的位置。方法二:从左端点x=a出发,按某个预先选定的步长h一步一步地向右跨,每跨一步都检验每步起点x0与终点x0+h的函数值,若f(x0)⋅f(x0+h)≤0,那么所求的根x∗必在x0与x0+h之间,这里可取x0或x0+h作为根的初始近似。
2. 非线性方程求根-二分法
对于方程f(x)=0,设函数f(x)在闭区间[a,b]上连续,且f(a)f(b)<0,根据连续函数的性质可知,f(x)=00在(a,b)内必有实根,称区间[a,b]为有根区间。这里为了方便讨论,假定方程f(x)=0在区间[a,b]内有唯一实根x∗。
二分法的思想:先确定有根区间,将区间二等分,根据零值定理,通过判断f(x)的符号,逐步将有根区间缩小,直至有根区间足够小,便可求出满足精度要求的近似根。
圈定根所在的范围的过程叫做圈定根或根的隔离,圈定好根后,采取适当的数值方法确定有一定精度要求的初值。
对于代数方程,其根的个数(实根或复根)与其次数相同;对于超越方程,其根可能是一个、几个或无解,并没有固定的圈根方法。
求方程根的问题,从几何上讲,就是求曲线y=f(x)与x轴交点的横坐标,方法有画图法、逐步搜索法等:
- 画图法:比如xlogx−1=0可改写为logx=x1,分别画出logx和x1的图像可知它们交点的横坐标在[2,3]内;
- 逐步搜索法:对于给定的f(x),设有根区间为[A,B],从x0=A出发,以步长h=n(B−A)(n是正整数),在[A,B]内取定节点xi=x0+ih(i=0,1,2,⋯n),从左至右检查f(xi)的符号,如发现xi与端点x0的函数值异号,则得到一个缩小的有根子区间[xi−1,xi]。
例:确定方程f(x)=x3−x−1=0的有根区间.
解:不难发现f(0)<0,f(2)>0,故在区间(0,2)内至少有一个实根,设从x=0出发,取h=0.5为步长,进行根的搜索,列表如下:
x |
0 |
0.5 |
1.0 |
1.5 |
2 |
f(x) |
− |
− |
− |
+ |
+ |
可以看出,在[1.0,1.5]内必有一根。
二分法是对逐步搜索法的改进,二分法的具体步骤如下:
(1)取有根区间[a,b]的中点,将它分为两半,分点为x0=2a+b,判断a、b、x0的符号,根据零点定理确定新的有根区间[a1,b1],这样就缩小了有根区间。
(2)对压缩了的有根区间[a1,b1],施行同样的手法,即再取中点x1=2a1+b1,将区间[a1,b1]再分为两半,然后再确定有根区间[a2,b2],其长度是[a1,b1]的二分之一。
(3)依此类推,若不出现f(xk)=0,即可得到一系列有根区间序列[a,b]⊃[a1,b1]⊃[a2,b2]⊃⋯⊃[ak,bk],上述的每个区间都是前一个区间的一半,因此[ak,bk]的长度bk−ak=21(bk−1−ak−1)=⋯=2k1(b−a),当k→∞时趋于零,这些区间最终会收敛于一点x∗,即为所求的根。
(4)终止条件:每次二分后,将[ak,bk]的中点xk=21(ak+bk)作为根的近似值,可以得到一个近似根的序列x0,x1,⋯,xk,⋯,该序列以根x∗为极限,只要二分次数足够多(即k足够大),便有∣x∗−xk∣<ε(ε为给定的精度),由于x∗∈[ak,bk],故∣x∗−xk∣≤2bk−ak=2k+1b−a,若给定的精度ε>0,要使∣x∗−xk∣<ε成立,只要取k满足2k+11(b−a)<ϵ即可,也就是说当k≥lg2lg(b−a)−lgε−1时,做到第k+1次二分,计算得到的xk就是满足精度要求的近似根。(程序中常用相邻的xk与xk−1的差的绝对值或ak与bk的差的绝对值是否小于ε来决定二分的次数)
例:证明方程f(x)=x3−2x−5=0在区间[2,3]内有一个根,使用二分法求误差不超过0.5×10−3的根要二分几次?
解:因为f(2)=−1<0、f(3)=16>0,且f(x)在[2,3]上连续,故f(x)=0在[2,3]内至少有一个根;又f′(x)=3x2−2当x∈[2,3]时,f′(x)>0,故f(x)在[2,3]内单调递增,从而f(x)在[2,3]内有且仅有一根。
给定误差ε=0.5×10−3,使用二分法时,只要取k满足2k+11(b−1)≤21×10−3⇒2k≥103⇒k≥lg23lg10=9.97,所以需二分10次便可达到要求。
二分法的优点是不管有根区间[a,b]多大,总能求出满足精度要求的根,且对f(x)要求不高,只要连续即可,计算也简单。它的局限性是只能用于求函数的实根,不能用于求复根及重根,它的收敛速度与比值为21的等比级数相同。
3. 非线性方程求根-迭代法
迭代法是一种逐次逼近的方法,用某个固定公式反复校正根的近似值,使之逐步精确化,最后得到满足精度要求的结果。
迭代法的思想:为求解非线性方程f(x)=0的根,先将其写成便于迭代的等价方程x=φ(x),其中φ(x)为x的连续函数,即,如果数x∗使f(x∗)=0,则也有x∗=φ(x∗),反之,若x∗=φ(x∗),则也有f(x∗)=0,那么称φ(x)为迭代函数。任取一个初值x0,代入式x=φ(x)的右端,得到x1=φ(x0),再将x1代入式x=φ(x)的右端,得到x2=φ(x1),依此类推,得到一个数列x1,x2,x3,⋯,其中xk+1=φ(xk)(k=0,1,2,⋯),此式称为求解非线性方程的简单迭代法,如果由迭代格式xk+1=φ(xk)产生的序列{xk}收敛,即n→∞limxn=x∗,则称迭代法收敛(实际计算中不可能也没必要无穷多步地算下去,对预先给定的精度ε,只要满足∣xk−xk−1∣<ε即可结束计算,并取x∗≈xk)。
例:用迭代法求方程x3−x−1=0在x=1.5附近的一个根.
解:将方程改写成如下两种等价形式:x=φ1(x)=3x+1x=φ2(x)=x3−1,相应地可得到两个迭代公式xk+1=φ1(xk)=3xk+1xk+1=φ2(xk)=xk3−1,如果取初始值x0=1.5,用上述的两个迭代公式分别迭代,计算得到:
(1)对于x0=1.5,xk+1=3xk+1(k=0,1,2,⋯),则x1=1.35721、x2=1.33086、x3=1.32588、x4=1.32494、x5=1.32476、x6=1.32473、x7=1.32472、⋯
(2)对于x0=1.5,xk+1=xk3−1(k=0,1,2,⋯),则x1=2.375、x2=12.39、⋯
可见第一种迭代方式是逐步收敛的,而第二种会随着迭代次数增加差异越来越大,于是可以知道,有的迭代公式可以求出根,有的公式则不能,因此判断迭代公式是否收敛尤为重要。
迭代法的几何意义:通常将方程f(x)=0化为与它同解的方程x=φ(x)的方法不止一种,有的收敛,有的不收敛,这取决于φ(x)的形态,类似画图法,方程x=φ(x)的求根问题在几何上就是确定曲线y=φ(x)与直线y=x的交点P∗的横坐标,如下图所示:
非线性方程的数值解法-迭代法-01
非线性方程的数值解法-迭代法-02
定理(迭代法的收敛性):设函数在[a,b]上有连续的一阶导数,且满足①对所有的x∈[a,b]有φ(x)∈[a,b];②存在0<L<1,使所有的x∈[a,b]有∣φ′(x)∣≤L;则方程x=φ(x)在[a,b]上的解x∗存在且唯一,对任意的x0∈[a,b],迭代过程xk+1=φ(xk)均收敛于x∗,并有如下的误差估计公式:①∣x∗−x∣≤1−LL∣xk−xk−1∣;②∣x∗−xk∣≤1−LLk∣x1−x0∣。
例:对方程x5−4x−2=0,构造收敛的迭代格式.
解:容易判断[1,2]是方程的有根区间,且在此区间内f′(x)=5x4−4>0,所以此方程在[1,2]内有且仅有一根,将原方程改写为以下两种等价形式:
(1)对于x=4x5−2,即φ(x)=4x5−2,对于x∈[1,2],∣φ′(x)∣=45x4>1,不满足收敛条件;
(2)对于x=54x+2,即φ(x)=54x+2,对于x∈[1,2],∣φ′(x)∣=55(4x+2)41<55(4+2)41≈0.2<1,此时迭代公式满足迭代收敛条件。
定理:设φ(x)在x=φ(x)的根x∗的邻域中有连续的一阶导数,且∣φ′(x∗)∣<1,则迭代过程xk+1=φ(xk)具有局部收敛性。
当迭代函数较复杂时,通常只能设法使迭代过程在根的邻域(局部)收敛。
例:已知方程x=φ(x)在[a,b]内有根x∗,且在[a,b]上满足∣φ′(x)−3∣<1,利用φ(x)构造一个迭代函数g(x),使xk+1=g(xk)(k=0,1,2,⋯)局部收敛于x∗.
解:由x=φ(x)得x−3x=φ(x)−3x,令x=−21(φ(x)−3x)=g(x),则对于x∈[a,b]有∣g′(x)∣=∣−21(φ′(x)−3)∣<21<1,故∣g′(x∗)∣<1,迭代公式xk+1=g(xk)=−21(φ(xk)−3xk)局部收敛。
定义(收敛速度):设迭代过程xk+1=φ(xk)收敛于x=φ(xk)的根x∗,记迭代误差ek=x∗−xk,若存在常数p(p≥1)和c(c=0)使得k→∞lim∣ek∣p∣ek+1∣=c,则称序列{xk}是p阶收敛的,c称渐进误差常数,特别地,p=1时称为线性收敛,p=2时称为平方收敛,1<p<2时称为超线性收敛。
p的大小反映了迭代法收敛速度的快慢,p越大则收敛速度越快,故迭代法的收敛阶是对迭代法收敛速度的一种度量。
定理:设迭代过程xk+1=φ(xk),若φ(p)(x)在所求根x∗的邻域连续且φ′(x∗)=φ′′(x)=⋯=φ(p−1)(x∗)=0,φ(p)(x∗)=0,则迭代过程在x∗邻域是p阶收敛的。
4. 牛顿迭代法
牛顿迭代法的思想:方程求根的另一种思路是用近似方程代替原方程去求根,牛顿迭代法就是将非线性方程线性化,用线性方程的解逼近非线性方程的解。取x0≈x∗,将f(x)在x0作一阶Taylor展开,得f(x)=f(x0)+f′(x0)(x−x0)+2!f′′(ξ)(x−x0)2,其中ξ在x0和x之间,令0=f(x∗)=f(x0)+f′(x0)(x∗−x0)+2f′′(ξ)(x∗−x0)2,如果将(x∗−x0)2看成高阶小量,则有0=f(x∗)≈f(x0)+f′(x0)(x∗−x0),这样就变成了求线性方程的解,解得x∗≈x0−f′(x0)f(x0)。
牛顿迭代法的几何意义:如下图,曲线是f(x),它与x轴交点为x∗,而x∗≈x0−f′(x0)f(x0)是曲线y=f(x)在(x0,f(x0))点处的切线与x轴的交点的横坐标x1(故牛顿迭代法又被称为切线法),依此类推可得到迭代公式xk+1=xk−f′(xk)f(xk)。
非线性方程的数值解法-牛顿迭代法-01
牛顿迭代公式:xk+1=xk−f′(xk)f(xk),只要f∈C1(即f(x)一阶连续),每一步迭代都有f′(xk)=0,而且k→∞limxk=x∗,则x∗就是f的根。
定理(收敛的充分条件):设f∈C2[a,b],若①f(a)f(b)<0;②在整个[a,b]上f′′不变号且f′(x)=0;③选取x0∈[a,b]使得f(x0)f′′(x0)>0;则牛顿迭代法产生的序列{xk}收敛到f(x)在[a,b]上的唯一根。
条件一保证了根的存在性,条件二保证了根的唯一性(二阶导不变号则一阶导单调),条件三保证了产生的序列单调有界,保证收敛。
定理(局部收敛性)设f∈C2[a,b],若x∗为f(x)在[a,b]上的根,且f′(x∗)=0,则存在x∗的邻域Bδ(x∗):∣x−x∗∣<δ使得任取初始值x0∈Bδ(x∗),牛顿迭代法产生的序列{xk}收敛到x∗,且满足k→∞lim(x∗−xk)2x∗−xk+1=−2f′(x∗)f′′(x∗)。
前面两个定理都说明了,牛顿迭代法的收敛性依赖于x0的选取,x0越接近x∗就越有可能收敛,如下图:
非线性方程的数值解法-牛顿迭代法-02
例:用牛顿迭代法求方程f(x)=x3−7.7x2+19.2x−15.3在x0=1附近的根.
解:xk+1=xk−3xk2−15.4xk+19.2xk3−7.7xk2+19.2xk−15.3,列表如下:
k |
xk |
f(x) |
0 |
1.00 |
-2.8 |
1 |
1.41176 |
-0.727071 |
2 |
1.62424 |
-0.145493 |
3 |
1.6923 |
-0;.0131682 |
4 |
1.69991 |
-0.0001515 |
5 |
1.7 |
0 |
例:用牛顿迭代法计算2.
解:要求x=2相当于求f(x)=x2−2=0的正根,由牛顿迭代公式得xk+1=xk−2xkxk2−2=21(xk+xk2),其中k=0,1,2,⋯,取初始值x0=1,代入公式进行迭代得x1=1.5、x2=1.416666667、x3=1.414215686、x4=1.414213562、x5=1.414213562,故2=1.414213562。
5. 牛顿迭代法的改进
重根-加速收敛法
引入:前面的两个收敛定理(充分性定理和局部收敛定理)都要求在x∗附近f′(x)=0,那么若f′(x∗)=0,牛顿法是否仍收敛?
f′(x)=0意味着会出现重根,设x∗是f的n重根,则可以把f(x)写成f(x)=(x−x∗)nq(x)的形式,且q(x∗)=0,因为牛顿迭代法实际上是一种特殊的不动点迭代,g(x)=x−f′(x)f(x),则∣g′(x∗)∣=∣1−f′(x∗)2f′(x∗)2−f(x∗)f′′(x∗)∣=1−n1<1,则牛顿迭代法仍有局部收敛性,但重数n越高,收敛越慢。
加速收敛法的思路:根据前面的分析,对于重根的情况,我们希望加速收敛速度,既然单根收敛速度较快,所以考虑将要求的f的重根转化为另一函数的单根,因为x∗是f(x)的n重根,则x∗是f′(x)的n−1重根,令μ(x)=f′(x)f(x),则f的重根等于μ的单根,此时对μ(x)使用牛顿迭代法求出的单根就是f(x)的重根。
牛顿下山法
例:牛顿迭代法求方程x3−x−1=0在x0=1.5附近一个根.
解:建立牛顿迭代公式xk+1=xk−3xk2−1xk3−xk−1,算出x0=1.5、x1=1.34783、x2=1.32520、x3=1.32472,此时是收敛的。
前面的两个收敛定理可知,牛顿迭代法要收敛则要求初始值x0选在x∗附近,这题如果选取初始值x0=0.6的话,则x0=0.6、x1=17.9,算法发散。为防止迭代发散,在迭代的过程中附加一项要求∣f(xk+1)∣<∣f(xk)∣,以保证函数值单调下降,满足这项要求的方法称为下山法。
牛顿下山法:将牛顿法和下山法结合起来使用,在下山法保证函数值稳定下降的前提下,用牛顿法加快收敛速度,就叫做牛顿下山法。具体步骤为:若由xk得到的xk+1不能使∣f∣减小,则在xk和xk+1之间找一个更好的点xk+1,使得∣f(xk+1)∣<∣f(xk)∣,其中xk+1=λxk+1+(1−λ)xk=λ(xk−f′(xk)f(xk))+(1−λ)xk=xk−λf′(xk)f(xk),λ∈[0,1],这里的λ称为下山因子。
下山因子λ的选择是一个逐步探索的过程,一般先取λ=1,此时就是牛顿迭代公式,若满足下山条件∣f(xk+1)∣<∣f(xk)∣,则取xk+1=xk+1,再进行下一次迭代;若不满足下山条件,则将λ减半计算,再判断是否满足下山条件,依此类推,直到满足为止;若λ取得很小时,即λ<ε时,下山条件仍不满足,则称”下山失败“,这时需另选初始值重新计算。
接前例,若取x0=0.6,则按牛顿迭代公式求得的迭代值x1=17.9,通过反复调整下山因子λ,得知当λ=321时满足下山条件,代入到xk+1=λxk+1+(1−λ)xk得x1=1.140625。
正割法
牛顿迭代法的每一步都要计算f和f′,相当于计算两个函数值,比较费时,如果用f的值近似求f′,可少算一个函数。具体近似方法是用割线斜率近似切线斜率,即f′(xk)≈xk−xk−1f(xk)−f(xk−1),如下图:
非线性方程的数值解法-牛顿迭代法的改进-01
将近似公式代入牛顿迭代公式中得xk+1=xk−f(xk)−f(xk−1)f(xk)(xk−xk−1),这个方法就叫做正割法。
正割法不需要求导,但它需要两个初值x0和x1,当导数难以求得或计算量较大时比较具有优势。
正割法收敛速度比牛顿迭代法慢,且对初值要求同样较高。
三、线性方程组的解法
引入:对于有n个未知量x1,x2,⋯,xn的线性方程组⎩⎨⎧a11x1+a12x2+⋯+a1nxn=b1a21x1+a22x2+⋯+a2nxn=b2⋯an1x1+an2x2+⋯+annxn=bn,其中aij、bi为方程组的系数,可以写成矩阵的形式Ax=b,当D=detA=0时,根据线性代数中所学的克莱姆法则,方程Ax=b的解存在且唯一,其中xi=DDi,Di是将A的第i列元素以b代替的矩阵行列式的值。由于当方程组较多时,克莱姆法则的计算量较大,所以一般用直接法求解。
直接法:如果所有计算都是精确进行的,那么经过有限步算术运算就可以求出方程组精确解的方法。
在实际计算过程中由于舍入误差的存在与影响,直接法一般只能求得方程组的近似解。对于中等规模的线性方程组(n<200),由于直接法的准确性和可靠性高,一般都用直接法求解。直接法主要有高斯消元法和三角分解法。
对于系数为大型稀疏矩阵的方程组,还可以使用迭代法进行求解。
1. 高斯消元法及其改进
高斯消元法
先通过例题了解以前我们如何求解线性方程组:
例:{x1−x2=13x1+2x2=8.
解:方程1乘以−3加到方程2中,得{x1−x2=10+5x2=5,解出x2=1代入方程1中得x1=2。
我们把上述步骤写成矩阵的形式(A,b)=[13−1218]→[10−1515]=(A,b),可见A的部分是一个上三角矩阵。于是我们得到了高斯消元法的思路:先将A化为上三角矩阵,再回代求解。
其中我们在变换方程组的时候可以作如下两种操作:(1)对换某两个方程的次序;(2)把某一个方程两边同乘一个不为零的常数后加到另一个方程的两边。这两种操作分别对应了(A,b)的两种初等行变换。
高斯消元法步骤:为表示方便,我们将线性方程组初始的系数矩阵记为A(1)=A=(aij(1))n×n,初始的右端项记为b(1)=b=b1(1)⋮bn(1):
(1)设a11(1)=0,计算因子mi1=a11(1)ai1(1)(i=2,⋯,n),将增广阵第i行−mi1×第1行,得到(a11(1)0a12(1)⋯A(2)a1n(1)b1(1)b(2)),其中{aij(2)=aij(1)−mi1a1j(1)bi(2)=bi(1)−mi1b1(1)(i,j=2,⋯,n);
(2)依此类推,到第k步:设akk(k)=0,计算因子mik=akk(k)aik(k)(i=k+1,⋯,n),则{aij(k+1)=aij(k)−mikakj(k)bi(k+1)=bi(k)−mikbk(k),经过n−1步就可以将A的部分化为上三角;
(3)回代:对于a11(1)a12(1)a22(2)⋯⋯⋯a1n(1)a2n(2)⋮ann(n)x1x2⋮xn=b1(1)b2(2)⋮bn(n),可以看出xn=ann(n)bn(n)、xn−1=an−1,n−1(n−1)bn−1(n−1)−an−1,n(n−1)⋅xn,类推得xi=aii(i)bi(i)−∑j=i+1naijixj(i=n−1,⋯,1)。
定理:若A的所有顺序主子式均不为零,则高斯消元法无需换行即可进行到底,且得到唯一解。(顺序主子式:前k行前k列构成的矩阵)
例:用高斯消元法解⎩⎨⎧2x1+x2−0.1x3+x4=2.70.4x1+0.5x2+4x3−8.5x4=21.90.3x1−x2+x3+5.2x4=−3.9x1+0.2x2+2.5x3−x4=9.9.
解:(A,b)=20.40.3110.5−10.2−0.1412.51−8.55.2−12.721.9−3.99.9→200010.3−1.15−0.3−0.14.021.0152.551−8.75.05−1.52.721.36−4.3058.55→200010.300−0.14.0216.4256.571−8.7−28.3−10.22.721.3677.57629.91
→200010.300−0.14.0216.42501−8.7−28.3−1.122.721.3677.576−1.12,回代可得x=x1x2x3x4=123−1.(PPT中计算错误,过程有错)
注意:当∣akk∣如果比同一列的元素小得多的话,会导致很大的舍入误差。因此在使用高斯消元法时,除了要避免主元素akk(k)=0外,还要避免主元素绝对值很小。
例:用单精度解方程组{10−9x1+x2=1x1+x2=2.
解:m21=a11a21=109,a22=1−m21×1=0.0000 0000 1×109−109=−109,b2=2−m21×1=−109,即[10−911112]→[10−901−1091−109]⇒x=[x1x2]=[01],此结果中x1显然与正确结果偏差较大。
全主元消元法
全主元消元法是对高斯消元法的改进:
(1)第一次消元时,在系数矩阵A中寻找绝对值最大的元素作为主元素来代替a11(1),设∣ai1j1∣=1≤i≤n,1≤j≤nmax∣aij∣,再交换i1行与第1行,交换j1列与第1列,这样就将ai1j1换到了左上角的a11(1)位置,再进行消元;
(2)依此类推,到第k次消元时为,主元素aikjk从系数矩阵右下角(n−k+1)阶子矩阵中选取∣aikjk∣=k≤i≤n,k≤j≤nmax∣aij∣,交换至主元素位置并消元。
换行不影响方程组求解,但是换列交换了未知数的系数,所以必须把次序记录下来,解完方程组后再把次序换回来。
算法的每一步都选取绝对值最大的元素作为主元素,以保证∣mik∣<1,这样精度比较高,算法比较稳定。但是该算法需要花大量时间去记录列的次序。
列主元消元法
列主元消元法是对全主元消元法的改进,它省去了换列的步骤,每次选一列中绝对值最大的元素作为主元素:∣aik,k∣=k≤i≤nmax∣aik∣=0,以aik,k代替akkk,可以避免列的交换,而仅交换行。
例:用列主元消元法解方程组⎩⎨⎧4x1−x2+x3=5−18x1+3x2−x3=−15x1+x2+x3=6.
解:(A,b)=4−181−1311−115−156→−18413−11−111−1556→−18003−3167−1971817−1535631
→−1800367−31−1181797−1563135→−18003670−118172122−15631722,回代得x=x1x2x3=123。
列主元消元法仍然有精度的问题,它没有全主元消元法稳定。
比如(同前面高斯消元法的例题):[10−911112]→[110−91121]→[101121],解出x=[x1x2]=[11],显然这次离精确值非常靠近了。
但是如果将第一行乘以109得到完全等价的方程组[1110911092]→[1010910−910910−9],解出x=[x1x2]=[01],这时又出现了精度问题了。
标度化列主元消元法
标度化列主元消元法对列主元消元法的改进:对每一行计算si=1≤j≤nmax∣aij∣,为节省时间,si只在初始时计算一次,以后每次考虑子列akk⋮ank中∣siaik∣最大的aik为主元。
标度化列主元消元法稳定性介于列主元消元法与全主元消元法之间。
例:用标度化列主元消元法解{x1+109x2=109x1+x2=2.
解:写出(A,b)=[1110911092],找出每一行系数矩阵A部分中的最大值s1=109、s2=1,对每一行都作标度化处理,即每一行所有元素都除以对应的si,得[10−911112],此时再用列主元消元法进行计算即可,比如∣s1a11∣=10−9与∣s2a21∣=1相比,显然应取a21为主元素,于是交换1、2行,⋯(参考前面例题),解出x=[x1x2]=[11],所得解很接近精确解了。
高斯-若尔当消元法
高斯-若尔当消元法与之前的高斯消元法不同,它是将akk变为1,与此同时akj变为akkakj(j=k,k+1,⋯,n+1),再将除akk外的第k列的所有元素都变为0,即aij等于aij−aikakj(i=k,j=k+1,⋯,n+1),经过n步计算后得到100⋮0010⋮0⋯⋯⋯⋱⋯000⋮1a1,n+1a2,n+1a3,n+1⋮an,n+1,这样就不需要回代即可得出解。
其实这个过程就相当于Ax=b⇒Ex=A−1b,其中E为单位阵。
例:用高斯-若尔当消元法与全主元消元法相结合解方程⎩⎨⎧−3x1+8x2+5x3=62x1−7x2+4x3=9x1+9x2−6x3=1.
解:写出−3218−7954−6691,按照全主元消元法找出绝对值最大的元素为9,按照高斯-若尔当消元法将第三行元素都除以9得−32918−7154−966991,将1所在列变为零得−93592591001331−32−9694698891;再从除1所在列外的系数矩阵A部分[−935925331−32]中找出最大的元素是331,重复前述步骤得−9335925910011−32−96934698891→−933593235−93130011009346939409341→−93351−931300110093462359409341→010001100241,故解为x3=2、x1=4、x2=1。
可将,将高斯-若尔当消元法与全主元消元法相结合,可以得到不用换行、不用换列,也不用回代,并且精度很高的算法。
例:用高斯-若尔当消元法与;列主元消元法结合求矩阵A的逆矩阵,A=123245356.
解:原理是A−1(A∣E)=(A−1A∣A−1E)=(E∣A−1),即线性代数中的用增广矩阵求逆的方法。
写出123245356100010001,找出第一列中最大的元素是3,交换第1行和第3行得321542653001010100,第一行元素除以3(标准化)再将第一列其他位置化为0(消元)得10035323121100101031−32−31,重复前述步骤,最后得到1000100011−32−33−12−10.
2. 三角分解法
道立特(Doolittle)分解法
引入:高斯消元法实际上是对系数矩阵和常向量进行初等变换,而初等变换可以看作是左乘初等矩阵,即Ln−1Ln−2⋯L1(A,b)=a11(1)a12(1)a22(2)⋯⋯⋯a1n(1)a2n(2)⋮ann(n)b1(1)b2(2)⋮bn(n),或Ln−1Ln−2⋯L1Ax=Ln−1Ln−2⋯L1b,令Ln−1Ln−2⋯L1A=U,则A可以写成A=L1−1L2−1⋯Ln−1−1U=LU,其中Lk−1=100000⋱00001mk+1,k⋮mn,k⋱⋱0⋱01,而L1−1L2−1⋯Ln−1−1=L也是一个下三角阵且对角线元素都是1,称为单位下三角阵,而U=a11(1)a12(1)a22(2)⋯⋯⋯a1n(1)a2n(2)⋮ann(n)。
LU分解又叫三角分解,当L为单位下三角而U为非奇异上三角的分解称为道立特(Doolittle)分解;当L为一般下三角而U为单位上三角的分解称为克路特(Crout)分解。
定理:若A的所有顺序主子式均不为零,则A的LU分解唯一(其中L为单位下三角阵)。
证明:由前面可知LU分解存在,只需证明其唯一性。假设不唯一,设A=L1U1=L2U2,则U1=L1−1L1U1=L1−1L2U2,两端同时右乘U2−1得U1U2−1=L1−1L2,观察可知,U1和U2−1是上三角,相乘仍为上三角,而L1−1和L2是下三角,相乘仍为下三角,显然只有当等式两端都是单位阵时才能成立,即U1=U2、L1=L2。
Doolittle分解法的步骤:
(1)三角分解:通过比较法直接导出L和U的计算公式,观察a11⋮⋮an1⋯⋯a1n⋮⋮ann=1l21⋮ln11⋯⋯⋱⋯1u11⋯⋯u1n⋮⋮unn,可看出aij=∑k=1min(i,j)likukj,若L的r−1列与U的前r−1行已经算好,则ur,j=ar,j−∑k=1r−1lrk⋅ukj(j=r,⋯,n),lir=urr1(air−∑k=1r−1likukr)(i=r+1,⋯,n);
比如1⋅u1j=a1j⇒u1j=a1j(j=1,2,⋯,n),li1⋅u11=ai1⇒li1=u11ai1(i=2,⋯,n),l21⋅u1j+u2j=a2j⇒u2j=a2j−li1u1j(j=2,⋯,n),li1⋅u12+li2⋅u22=ai2⇒li2=u22ai2−li1u12(i=3,⋯,n);可以看出lr1⋅u1j+lr2⋅u2j+⋯+lr,r−1⋅ur−1,j+ur,j=ar,j,可推出ur,j=ar,j−∑k=1r−1lrk⋅ukj(j=r,⋯,n);同理,由li1⋅u1r+li2⋅u2r+⋯+li,r−1⋅ur−1,r+lir⋅urr=air,可得lir=urrair−∑k=1r−1likukr(i=r+1,⋯,n)。
(2)求出A的LU分解后,Ax=b→LUx=b,设Ux=y,得Ly=b,先解出y再解Ux=y即可。
对于Ly=b,即1l21⋮ln11⋮⋯⋱⋯1y1y2⋮yn=b1b2⋮bn,则yi=bi−∑k=1i−1likyk(i=1,2,⋯,n);
对于Ux=y,即u11u12u22⋯⋯⋱u1nu2n⋮unnx1x2⋮xn=y1y2⋮yn,则xi=uii1(yi−∑k=i+1nuik⋅xk)(i=n,n−1,⋯,1)。
例:用Doolittle分解法求解方程组⎩⎨⎧2x1+x2+x3=4x1+3x2+2x3=6x1+2x2+2x3=5.
解:对于211132122=1l21l311l321u11u12u22u13u23u33,根据前面的分析知u1j=a1j,故u11=2、u12=1、u13=1,同时li1=u11ai1,故l21=0.5、l31=0.5,同理u22=a22−l21u12=3−0.5=2.5,u23=a23−l21u13=2−0.5=1.5,同时l32=u22a32−l31u12=2.52−0.5=0.6,同理u33=a33−l31u13−l32u23=0.6;
Ly=b,即10.50.510.61y1y2y3=465⇒y1y2y3=440.6,Ux=y,即20012.5011.50.6x1x2x3=440.6⇒x1x2x3=111.
平方根法-对称正定系数矩阵
定义:对于矩阵A=(aij)n×n,如果aij=aji,则称A为对称阵。
定义:对于矩阵A=(aij)n×n,如果xTAx>0对任意非零向量x都成立,则称A为正定阵。
回顾对称正定阵的几个性质:(1)A−1也正定,且aii>0;(2)A的顺序主子阵Ak也对称正定;(3)A的特征值λi>0;(4)A的全部顺序主子式det(Ak)>0;
定理:设矩阵A对称正定,则存在非奇异下三角阵L∈Rn×n使得A=LLT,若限定L对角元为正,则分解唯一。
证明:先对A作LU分解,即A=LU;
先证明uii都大于零,将A=LU写成分块运算的形式Ak=LkUk(k=1,2,⋯,n),根据正定的性质,A的各阶主子式的行列式值都大于零,所以detAk=detLk⋅detUk⇒∏i=1kuii>0,所以uii>0;
进一步将U分解为U=DU′=u11u22⋱unn1u11u121⋯⋯⋱u11u1nu22u2n⋮1,则A=LDU′,由于A对称所以AT=A,故LDU′=U′TDTLT,由于D是对角阵D=DT,观察可知L=U′T,即A=LDTLT,由于前面证明了对称正定矩阵的uii>0,于是可以将D进一步分解为D=D′D′,其中D′=u11⋱unn,令L∗=LD′,则A=LD′D′TLT=L∗L∗T。
平方根法的步骤(要求A对称正定):
(1)利用A=LLT分解,对于l11⋮ln1⋱⋯lnnl11⋯⋱ln1⋮lnn=a11⋮an1⋯⋯a1n⋮ann,当i>j时lij=ljjaij−∑k=1j−1lik⋅ljk,当i=j时lii=(aii−∑k=1i−1lik2);
比如l11⋅l11=a11⇒l11=a11,类似地第一列有li1⋅l11=ai1⇒li1=l11ai1(i=2,⋯,n),依此类推有li1⋅lj1+li2⋅lj2+⋯+li,j⋅lj,j=aij⇒lij=ljjaij−∑k=1j−1lik⋅ljk(i>j),同理li1⋅li1+li2⋅li2+⋯+lii⋅lii=aii⇒lii=(aii−∑k=1i−1lik2)(i=j)。
同时可以发现lii2=aii−∑k=1i−1lik2>0⇒aii>∑k=1i−1lik2⇒∣lik∣<aii<1≤i≤nmaxaii,因此L的元素有界且lii>0,故平方根法是比较稳定的方法,且精度比较好。
(2)求出L后,Ax=b→LLTx=b,令LTx=y,先解出Ly=b,再求解LTx=y即可,公式为yi=lii1(bi−∑k=1i−1likyk)(i=1,2,⋯,n),xi=lii1(yi−∑k=i+1nlikxk)(i=n,n−1,⋯,1)。
改进平方根法(要求A对称正定):
(1)由于使用平方根法分解矩阵A时,需要做n次开方运算,为避免开方,可以直接用A=LDLT分解来运算:A=LDLT⇒a11a21⋮an1a12a22⋮an2⋯⋯⋱⋯a1na2n⋮ann=1l21⋮ln11⋮ln2⋱⋯1d11d22⋱dnn1l211⋯⋯⋱l1nl2n⋮1,将LD乘到一起得a11a21⋮an1a12a22⋮an2⋯⋯⋱⋯a1na2n⋮ann=d11l21d11⋮ln1d11d22⋮ln2d22⋱⋯dnn1l211⋯⋯⋱l1nl2n⋮1,写出aij=li1d11l1j+li2d22l2j+⋯+li,j−1dj−1,j−1lj−1,j+lijdjj=∑k=1j−1likdkkljk+lijdjj,特别地,aii=∑k=1i−1lik2dkk+dii,令likdkk=Tik,则{aij=∑k=1j−1Tikljk+Tijaii=∑k=1i−1Tiklik+dii,于是⎩⎨⎧d11=a11Tij=aij−∑k=1j−1Tikljklij=djjTijdii=aii−∑k=1i−1Tiklik;
(2)对于Ax=b→LDLTx=b→{Ly=bDLTx=y;对于Ly=b,即1l21⋮ln11⋮⋯⋱⋯1y1y2⋮yn=b1b2⋮bn,则yi=bi−∑k=1i−1likyk(i=1,2,⋯,n);对于DLTx=y,即d11d22⋱dnn1l121⋯⋯⋱l1nl2n⋮1x1x2⋮xn=y1y2⋮yn,算出d11d11l12d22⋯⋯⋱d11l1nd22l2n⋮dnnx1x2⋮xn=y1y2⋮yn,则xn=dnnyn,而yi=diixi+diili,i+1xi+1+⋯+diilinxn故xi=diiyi−∑k=i+1nlikxk(i=n,n−1,⋯,2,1,并且由于L转置后仍使用原来的下标,所以这里的lik=lki)。
例:用改进平方根法求解方程组Ax=b,其中A=121−3250−510141−3−5115,b=12168.
解:按照公式有i=1:i=2:i=3:i=4:d11=1T21=2,l21=2,d22=1T31=1,T32=−2,l31=1,l32=−2,d33=9T41=−3,T42=1,T43=6,l41=−3,l42=1,l43=32,d44=1,再根据公式可以解出{y1=1,y2=0,y3=15,y4=1x1=1,x2=1,x3=1,x4=1。
追赶法-解三对角线方程组
追赶法:对于三对角线方程组b1a2c1b2⋱c2⋱an−1⋱bn−1ancn−1bnx1x2⋮⋮xn=d1d2⋮⋮dn,可以使用追赶法:
(1)先将A分解为A=LU=α1γ1⋱⋱⋱γnαn1β1⋱⋱⋱βn−11=α1γ2α1β1γ2β1+α2⋱α2β2⋱γi⋱γiβi−1+αi⋱αiβi⋱γn−1⋱γn−1βn−2+αn−1γnαn−1βn−1γnβn−1+αn,对比原来的A=b1a2c1b2⋱c2⋱an−1⋱bn−1ancn−1bn,可得⎩⎨⎧γi=aiβi=ci/αiα1=b1αi=bi−γiβi−1i=2,3,⋯,ni=1,⋯,n−1i=2,3,⋯,n;
(2)追:对于Ax=LUx=d,求解Ly=d,即α1γ1⋱⋱⋱γnαny1y2⋮yn=d1d2⋮dn,得出{y1=α1d1yi=αi(di−γiyi−1)i=2,⋯,n;
(3)赶:再求解Ux=y,即1β1⋱⋱1βn−11x1x2⋮xn=y1y2⋮yn,得出{xn=ynxi=yi−βixi+1i=n−1,⋯,1。
由第二步可知该方法要求αi不等于零,并不是任何三对角阵都可以使用此方法求解。
定理(充分条件):若A为三对角线矩阵,并且满足⎩⎨⎧∣b1∣>∣c1∣>0∣bi∣≥∣ai∣+∣ci∣且ci=0,ai=0∣bn∣>∣an∣>0i=2,3⋯,n−1,则追赶法可以求解以A为系数矩阵的方程组。
该定理要求三条对角线上都不能有零元素,对于方程组来说太过苛刻,因为它只是充分条件而非必要条件,所以可以有例外的情况:如果A是严格对角优势的三对角线矩阵,则不要求三对角线上的所有元素非零。
根据不等式∣βi∣<1,∣bi∣−∣ai∣<∣bi−γiβi−1∣<∣bi∣+∣ai∣可知,分解的过程中,矩阵元素不会过分增大,算法保证稳定。
3. 迭代法求方程组的近似解
迭代原理与误差分析
迭代法思路:与解f(x)=0的不动点迭代类似,将Ax=b等价改写为x=Bx+f的形式,建立迭代x(k+1)=Bx(k)+f,从初值x(0)出发,得到序列{x(k)}。迭代法精度可控,特别适用于求解系数为大型稀疏矩阵的方程组。
例:用迭代法解方程组⎩⎨⎧8x1−3x2+2x3=204x1+11x2−x3=336x1+3x2+12x3=36.
解:把Ax=b改写成x=Bx+f的形式⎩⎨⎧x1=81(3x2−2x3+20)x2=111(−4x1+x3+33)x3=121(−6x1−3x2+36),即x1x2x3=0−114−21830−41−411110⋅x1x2x3+2533,建立迭代格式x(k+1)=Bx(k)+f,得⎩⎨⎧x1(k+1)=81(3x2(k)−2x3(k)+20)x2(k+1)=111(−4x1(k)+x3(k)+33)x3(k+1)=121(−6x1(k)−3x2(k)+36)(矩阵形式略),初始向量取(0,0,0)T,迭代得
x(k) |
x1 |
x2 |
x3 |
x(0) |
0 |
0 |
0 |
x(1) |
2.5 |
3 |
3 |
x(2) |
2.875 |
2.364 |
1 |
x(3) |
3.1365 |
2.0455 |
0.9715 |
x(4) |
3.02418 |
1.94777 |
0.92038 |
x(5) |
3.000318 |
1.983965 |
1.000963 |
x(6) |
2.993746 |
1.999971 |
1.003849 |
x(7) |
2.999026 |
2.002624 |
1.003134 |
直接解方程得知精确解为x∗=(3,2,1)T,迭代七次后的误差e(7)=x(7)−x∗=(−0.000974,0.002624,0.003134)T,可见用此迭代格式进行迭代,得到的向量序列是逐步逼近方程组精确解的。
但是不是所有迭代序列都可以逼近精确值的,如果用⎩⎨⎧x1=9x1−3x2+2x3−20x2=4x1+12x2−x3−33x3=6x1+3x2+13x3−36,取x(0)=(0,0,0)T,得x(1)=(−20,−33,−36)T,x(2)=(−173,−473,−723)T,显然,这个迭代是发散的。
为了更好地度量误差,需要引入向量范数和矩阵范数的概念。
定义:Rn空间的向量范数∣∣⋅∣∣对任意x,y∈Rn满足下列条件:(1)正定性:∣∣x∣∣≥0,∣∣x∣∣=0⇔x=0;(2)齐次性:∣∣αx∣∣=∣α∣⋅∣∣x∣∣对任意α∈C成立;(3)三角不等式:∣∣x+y∣∣≤∣∣x∣∣+∣∣y∣∣。
最常用的范数是Lp范数(p-范数):∣∣x∣∣p=(∑i=1n∣xi∣p)p1,当p取1、2、∞时分别是:∣∣x∣∣1=∑i=1n∣xi∣,∣∣x∣∣2=∑i=1n∣xi∣2,∣∣x∣∣∞=1≤i≤nmax∣xi∣,其中p→∞lim∣∣x∣∣p=∣∣x∣∣∞。
定义:向量序列{x(k)}收敛于向量x∗是指对每一个1≤i≤n都有k→∞limxi(k)=xi∗,也可以理解为∣∣x(k)−x∗∣∣∞→0。
定义:若存在常数C>0使得对任意x∈Rn有∣∣x∣∣A≤C∣∣x∣∣B,则称范数∣∣⋅∣∣A比范数∣∣⋅∣∣B强。
定义:若范数∣∣⋅∣∣A比范数∣∣⋅∣∣B强,同时∣∣⋅∣∣B也比∣∣⋅∣∣A强,即存在常数C1,C2>0使得C1∣∣x∣∣B≤∣∣x∣∣A≤C2∣∣x∣∣B,则称∣∣⋅∣∣A与∣∣⋅∣∣B等价。
定理:Rn上一切范数都等价。
定义:Rm×n空间的矩阵范数∣∣⋅∣∣对任意A,B∈Rm×n满足:(1)正定性:∣∣A∣∣≥0,∣∣A∣∣=0⇔A=0;(2)齐次性:∣∣αA∣∣=∣α∣⋅∣∣A∣∣对任意α∈C成立;(3)三角不等式:∣∣A+B∣∣≤∣∣A∣∣+∣∣B∣∣;(4)相容性(m=n时):∣∣AB∣∣≤∣∣A∣∣⋅∣∣B∣∣。
要说明的是,不是所有矩阵范数都满足相容性,因为可能部分教材没有此条件,但是仍用前面三个条件定义了一些矩阵范数。
常用的矩阵范数有:
Frobenius范数(F-范数):∣∣A∣∣F=∑i=1m∑j=1n∣aij∣2,这是向量范数∣∣⋅∣∣2的直接推广;如果A∈Rn×n且x∈Rn,则有∣∣Ax∣∣2≤∣∣A∣∣F⋅∣∣x∣∣2(可以用Cauchy不等式证明)。
算子范数:如果A是方阵,则可以由向量范数∣∣⋅∣∣p导出关于矩阵A∈Rn×n的p-范数,∣∣A∣∣p=x=0max∣∣x∣∣p∣∣Ax∣∣p=∣∣x∣∣p=1max∣∣Ax∣∣p;如果A、B是同阶方阵,则有∣∣AB∣∣p≤∣∣A∣∣p∣∣B∣∣p,∣∣Ax∣∣p≤∣∣A∣∣p∣∣x∣∣p,特别地,当p为∞、1、2时有:(1)行和范数:∣∣A∣∣∞=1≤i≤nmax∑j=1n∣aij∣;(2)列和范数:∣∣A∣∣1=1≤j≤nmax∑i=1n∣aij∣;(3)谱范数:∣∣A∣∣2=λmax(ATA)(其中λmax(ATA)指ATA之后的最大的那个特征根)。
注意:Frobenius范数不是算子范数,我们这里只关心有相容性的范数,而算子范数总是相容的。即使A中元素全为实数,其特征根和相应的特征向量仍可能是复数,将上述定义中绝对值换成复数模仍均成立。
定义:矩阵A的谱半径记为ρ(A)=1≤i≤nmax∣λi∣,其中λi为A的特征根。
定理:对任意算子范数∣∣⋅∣∣有ρ(A)≤∣∣A∣∣。
证明:由算子范数的相容性可得∣∣Ax∣∣≤∣∣A∣∣⋅∣∣x∣∣,将任意一个特征根λ对应的特征向量u代入得∣λ∣⋅∣∣u∣∣=∣∣λu∣∣=∣∣Au∣∣≤∣∣A∣∣⋅∣∣u∣∣。
误差分析:方程组{12x1+35x2=5912x1+35.000001x2=59.000001的解为{x1=2x2=1,由于某种原因,第二个方程组的系数有一个小小的扰动(误差),变为{12x1+35x2=5912x1+34.999999x2=59.000002,此时方程组的解为{x1=10.75x2=−2,可见很小的误差也可能会对结果产生较大的影响,于是我们需要研究求解Ax=b时,A和b的误差对解x有何影响。
情况1:设A精确,b有误差变为δb,则得到的解为x+δx,即A(x+δx)=b+δb,消去Ax=b得δx=A−1δb,根据相容性可知∣∣δx∣∣=∣∣A−1δb∣∣≤∣∣A−1∣∣⋅∣∣δb∣∣,因此将∣∣A−1∣∣称为绝对误差放大因子;再看∣∣b∣∣=∣∣Ax∣∣≤∣∣A∣∣⋅∣∣x∣∣⇒∣∣x∣∣1≤∣∣b∣∣∣∣A∣∣,因此相对误差∣∣x∣∣∣∣δx∣∣≤∣∣A∣∣⋅∣∣A−1∣∣⋅∣∣b∣∣∣∣δb∣∣,因此将∣∣A∣∣⋅∣∣A−1∣∣称为相对误差放大因子。
情况2:设b精确,A有误差δA,得到的解为x+δx,即(A+δA)(x+δx)=b⇒A(x+δx)+δA(x+δx),消去Ax=b得Aδx+δA(x+δx)=0⇒δx=−A−1δA(x+δx),根据相容性和三角不等式可知∣∣δx∣∣≤∣∣A−1∣∣⋅∣∣δA∣∣⋅∣∣x+δx∣∣≤∣∣A−1∣∣⋅∣∣δA∣∣⋅∣∣x∣∣+∣∣A−1∣∣⋅∣∣δA∣∣⋅∣∣δx∣∣,于是得到(1−∣∣A−1∣∣⋅∣∣δA∣∣)⋅∣∣δx∣∣≤∣∣A−1∣∣⋅∣∣δA∣∣⋅∣∣x∣∣,故相对误差∣∣x∣∣∣∣δx∣∣≤1−∣∣A−1∣∣⋅∣∣δA∣∣∣∣A−1∣∣⋅∣∣δA∣∣=1−∣∣A∣∣⋅∣∣A−1∣∣⋅∣∣A∣∣∣∣δA∣∣∣∣A∣∣⋅∣∣A−1∣∣⋅∣∣A∣∣∣∣δA∣∣,即相对误差也与∣∣A∣∣⋅∣∣A−1∣∣有关。
Jacobi迭代法
Jacobi迭代法:对于方程组⎩⎨⎧a11x1+a12x2+⋯+a1nxn=b1a21x1+a22x2+⋯+a2nxn=b2⋯an1x1+an2x2+⋯+annxn=bn,或写成矩阵的形式a11a21⋮an1a12a22⋮an2⋯⋯⋱⋯a1na2n⋮annx1x2⋮xn=b1b2⋮bn,若aii=0,则有⎩⎨⎧x1=a111(−a12x2−⋯−a1nxn+b1)x2=a221(−a21x1−⋯−a2nxn+b2)⋯xn=ann1(−an1x1−⋯−an,n−1xn−1+bn)或写成矩阵形式x1x2⋮xn=−0a22a21⋮annan1a11a120⋮annan2⋯⋯⋱⋯a11a1na22a2n⋮0x1x2⋮xn+a11b1a22b2⋮annbn,即迭代原理中的把Ax=b写成x=Bx+f的形式,则Jacobi迭代格式为⎩⎨⎧x1(k+1)=a111(−a12x2(k)−⋯−a1nxn(k)+b1)x2(k+1)=a221(−a21x1(k)−⋯−a2nxn(k)+b2)⋯xn(k+1)=ann1(−an1x1(k)−⋯−an,n−1xn−1(k)+bn)(矩阵形式略),可以简写为x(k+1)=Bx(k)+f。
对于Ax=b,分析矩阵形式:如果将A分为A=LDU,即右上角元素组成矩阵U、对角线元素组成矩阵D、左下角元素组成矩阵L,则Ax=b⇒(D+L+U)x=b⇒x=−D−1(L+U)x+D−1b=Bx+f,我们把−D−1(L+U)称为Jacobi迭代阵,于是有迭代格式:x(k+1)=−D−1(L+U)x(k)+D−1b。
例:用Jacobi方法解方程组⎩⎨⎧2x1−x2−x3=−5x1+5x2−x3=8x1+x2+10x3=11.(已知精确解为x∗=(−1,2,1)T)
解:将方程组写成等价形式⎩⎨⎧x1=0.5x2+0.5x3−2.5x2=−0.2x1+0.2x3+1.6x3=−0.1x1−0.1x2+1.1,或写成矩阵形式x1x2x3=0−0.2−0.10.50−0.10.50.20x1x2x3+−2.51.61.1,于是迭代格式为⎩⎨⎧x1(k+1)=0.5x2(k)+0.5x3(k)−2.5x2(k+1)=−0.2x1(k)+0.2x3(k)+1.6x3(k+1)=−0.1x1(k)−0.1x2(k)+1.1,取初始值x(0)=(1,1,1)T,计算结果如下表:
k |
x1(k) |
x2(k) |
x3(k) |
∣∣x(k)−x(k−1)∣∣∞ |
0 |
1 |
1 |
1 |
|
1 |
-1.5 |
1.6 |
0.9 |
2.5 |
2 |
-1.25 |
2.08 |
1.09 |
0.48 |
3 |
-0.915 |
2.068 |
1.017 |
0.335 |
4 |
-0.9575 |
1.9864 |
0.9847 |
0.0816 |
5 |
-1.01445 |
1.9844 |
0.99711 |
0.05695 |
6 |
-1.00722 |
2.00231 |
1.0026 |
0.01387 |
7 |
-0.997543 |
2.00197 |
1.00049 |
0.009687 |
Gauss-Seidel迭代法
引入:在Jacobi迭代格式中,如果算到xi(k+1),则xi(k+1)完全是根据x1(k),⋯,xn(k)计算出来的,而前面计算出来的x1(k+1),⋯,xi−1(k+1)并没有被利用到,考虑如果把新算出来的x1(k+1),⋯,xi−1(k+1)代进xi(k+1)的公式中,会不会使其收敛得更快。
Gauss-Seidel迭代格式:⎩⎨⎧x1(k+1)=a111(−a12x2(k)−a13x3(k)−a14x4(k)−⋯−a1nxn(k)+b1)x2(k+1)=a221(−a21x1(k+1)−a23x3(k)−a24x4(k)−⋯−a2nxn(k)+b2)x3(k+1)=a331(−a31x1(k+1)−a32x3(k+1)−a34x4(k)−⋯−a3nxn(k)+b3)⋯xn(k+1)=ann1(−an1x1(k+1)−an2x(k+1)−an3x3(k+1)−⋯−an,n−1xn−1(k+1)+bn)。
与Jacobi迭代格式的矩阵表示类似,它可以写成x(k+1)=−D−1(Lx(k+1)+Ux(k))+D−1b,进一步可以写成(D+L)x(k+1)=−Ux(k)+b⇒x(k+1)=−(D+L)−1Ux(k)+(D+L)−1b=Bx+f,我们把−(D+L)−1U称为Gauss-Seidel迭代阵。
例:用Gauss-Seidel法解方程组⎩⎨⎧2x1−x2−x3=−5x1+5x2−x3=8x1+x2+10x3=11.
解:迭代格式为⎩⎨⎧x1(k+1)=0.5x2(k)+0.5x3(k)−2.5x2(k+1)=−0.2x1(k+1)+0.2x3(k)+1.6x3(k+1)=−0.1x1(k+1)−0.1x2(k+1)+1.1,取初始值x(0)=(1,1,1)T,计算结果如下表:
k |
x1 |
x2 |
x3 |
∣∣x(k)−x(k−1)∣∣ |
0 |
1 |
1 |
1 |
|
1 |
-1.5 |
2.1 |
1.04 |
2.5 |
2 |
-0.93 |
1.994 |
0.9936 |
0.57 |
3 |
-1.0062 |
1.99996 |
1.000624 |
0.0762 |
4 |
-0.999708 |
2.000064 |
0.99996416 |
0.006492 |
本例题的方程组和Jacobi法中的方程组完全相同,对比可以发现,Gauss-Seidel法确实收敛得更快。
在某些情况下,Jacobi法和Gauss-Seidel法可能其中一种收敛,另一种不收敛,甚至两种都不收敛。比如:
例:分别用Jacobi法和Gauss-Seidel法解方程组{x1+12x2=2515x1+x2=17.
解:Jacobi法:取初始值x(0)=(0,0)T,得x(1)=(17,20)T、x(2)=(−223,−235)T,显然是发散的;
Gauss-Seidel法:取初始值x(0)=(0,0)T,得x(1)=(17,−235)T、x(2)=(2827,−42535)T,显然也是发散的。
但是如果交换两个方程的次序后再构造相应的迭代公式,则两种方法都收敛,为此有必要了解迭代法的收敛条件。
迭代法的收敛性
无论是何种迭代方法,迭代格式都可以写成x(k+1)=Bx(k)+f的形式,所以第k+1次的迭代误差可以写成e(k+1)=x(k+1)−x∗=(Bx(k)+f)−(Bx∗+f)=B(x(k)−x∗)=Be(k),于是可以得到第k次迭代的误差为e(k)=Bke(0),因此收敛的充要条件为:当k→∞时e(k)→0⇔Bk→0。
定义(矩阵序列的极限):设A=(aij)n×n,Ak=(aij(k))n×n∈Rn×n,k→∞limAk=A是指k→∞limaij(k)=aij对所有1≤i,j≤n成立,也可以理解为当k→∞时∣∣Ak−A∣∣→0。
定理:设x=Bx+f存在唯一解,则从任意x(0)出发,迭代x(k+1)=Bx(k)+f收敛⇔Bk→0。
定理:B(k)→0⇔ρ(B)<1。
证明:由前面的推导知,∣∣e(k)∣∣≤∣∣B∣∣⋅∣∣e(k−1)∣∣≤⋯≤∣∣B∣∣k⋅∣∣e(0)∣∣,若∣∣B∣∣<1,则当k→∞时∣∣B∣∣k→0,即∣∣e(k)∣∣→0。
定理(充分条件):若存在一个矩阵范数使得∣∣B∣∣=q<1,则迭代收敛,且有下列误差估计:(1)∣∣x∗−x(k)∣∣≤1−qq∣∣x(k)−x(k−1)∣∣;(2)∣∣x∗−x(k)∣∣≤1−qqk∣∣x(1)−x(0)∣∣。
根据该定理,若事先给出误差的控制精度,可以估计出迭代次数,即∣∣x∗−x(k)∣∣≤1−qqk∣∣x(1)−x(0)∣∣≤ε,解出k≥ln∣∣B∣∣ln∣∣x(1)−x(0)∣∣ε(1−∣∣B∣∣).
例:若用Jacobi法解方程组⎩⎨⎧20x1+2x2+3x3=24x1+8x2+x3=122x1−3x2+15x3=30,取x(0)=(0,0,0)T,问Jacobi法是否收敛,若收敛,需要迭代多少次才能保证各分量误差绝对值小于10−6?
解:Jacobi迭代格式为x1(k+1)x2(k+1)x3(k+1)=0−81−152−2020153−203−810x1(k)x2(k)x3(k)+20248121530=Bx+f,因为∣∣B∣∣∞=31<1,所以迭代法收敛,迭代一次得到x1(1)=56、x2(1)=23、x3(1)=2,∣∣x(1)−x(0)∣∣=2,由1−qqk∣∣x(1)−x(0)∣∣≤10−6,得到k>ln31ln210−6(1−21)≈13,因此需要迭代14次。
前面定理中的∣∣B∣∣<1只是迭代序列收敛的充分条件,即使∣∣B∣∣<1对任何范数都不成立,迭代序列仍可能收敛。
例:设x(k+1)=Bx(k)+f,其中B=[0.90.300.8],f=[12],讨论迭代序列{x(k)}的收敛性.
解:显然∣∣B∣∣∞=1.1、∣∣B∣∣1=1.2、∣∣B∣∣2=1.043、∣∣B∣∣F=1.54,B的范数均大于1,但是由于ρ(B)=0.9<1,故迭代序列{x(k)}仍是收敛的。
定理(充分条件):若A为严格对角优势阵(strictly diagonally
dominant matrix),则解Ax=b的Jacobi迭代和Gauss-Seidel迭代均收敛。
定义:如果A∈Rn×n满足∣aii∣>∑j=1,j=in∣aij∣(i=1,2,⋯,n),则称A为严格对角优势阵。
定义:如果A∈Rn×n满足∣aii∣≥∑j=1,j=in∣aij∣(i=1,2,⋯,n),且其中至少有一个等号严格成立,则称A为弱对角优势阵。
比如⎩⎨⎧5x1+x2+2x3=−32x1−8x2+4x3=2x1+3x2+12x3=11,A=5211−832412,显然A为严格对角优势阵,因此Jacobi迭代和Gauss-Seidel迭代均收敛。
四、插值与拟合
1. 插值多项式的唯一性
有时我们会遇到这样的问题:由实验或测量得到一批离散样点,要求作出一条通过这些点的光滑曲线,以便满足设计要求或进行加工,此外,还有一些函数虽有表达式,但因式子复杂,不易计算其值和进行理论分析。
当精确函数y=f(x)非常复杂或未知时,在一系列节点x0,⋯,xn处测得函数值y0=f(x0),⋯,yn=f(xn),由此构造一个简单易算的近似函数g(x)≈f(x),满足条件g(xi)=f(xi)(i=0,⋯,n),这里的g(x)就称为f(x)的插值函数。我们常用代数多项式作为插值函数。
插值多项式是指根据给定的n+1个点(xi,yi)(i=0,1,⋯,n),求一个n次多项式p(x)=a0+a1x+⋯+anxn。
定理(插值多项式唯一性):满足P(xi)=yi(i=0,1,⋯,n)的n阶插值多项式是唯一存在的,其中x0,⋯,xn为互不相同的节点。
证明:(利用范德蒙(Vandermonde)行列式论证)
对于⎩⎨⎧p(x0)=a0+a1x0+⋯+anx0np(x1)=a0+a1x1+⋯+anx1n⋯p(xn)=a0+a1xn+⋯+anxnn,其中a0,⋯,an是n+1个待定系数,其系数行列式为11⋮1x0x1⋮xn⋯⋯⋱⋯x0nx1n⋮xnn=0(由于x0,⋯,xn互异,根据范德蒙行列式的计算公式∏1≤j≤i≤n(xi−xj),必不等于零),由于系数行列式不等于零,故解唯一存在。
2. 拉格朗日插值
求n次多项式Pn(x)=a0+a1x+⋯+anxn使得Pn(xi)=yi(i=0,1,⋯,n),其中当i=j时xi=xj,即无重合节点。
拉格朗日线性插值:当n=1时,P1(x)=a0+a1x,P1(x0)=y0、P1(x1)=y1,可见P1是过点(x0,y0)和(x1,y1)两点的直线,根据直线方程,P1(x)=y0+x1−x0y1−y0(x−x0),写成一般形式P1(x)=(x0−x1x−x1)y0+(x1−x0x−x0)y1=l0(x)y0+l1(x)y1=∑i=01li(x)yi,我们称li(x)为拉格朗日基函数(Lagrange
Basis),满足条件li(xj)=δij(其中δij是克罗内克函数,Kronecker
Delta,当i=j时函数值为1,否则为0),称P1(x)为一次插值多项式或线性插值多项式(显然l0(x)和l1(x)也是一次插值多项式)。
可见插值基函数与y0、y1无关,而由插值点x0,x1所决定。
拉格朗日抛物线插值:当n=2时,设插值多项式为P2(x)=l0(x)y0+l1(x)y1+l2(x)y2,类似n=1时的情况,要求:①插值基函数l0,l1,l2为二次多项式;②它们的函数值满足下表:
|
x0 |
x1 |
x2 |
l0(x) |
1 |
0 |
0 |
l1(x) |
0 |
1 |
0 |
l2(x) |
0 |
0 |
1 |
可见l0(x)只在x0处为1,在x1,x2处为0,即x1,x2是l0(x)的零点,故l0(x)=a(x−x1)(x−x2),再根据l0(x0)=1解出a=(x0−x1)(x0−x2)1,即l0(x)=(x0−x1)(x0−x2)(x−x1)(x−x2);同理可得l1(x)=(x1−x0)(x1−x2)(x−x0)(x−x2)、l2(x)=(x2−x0)(x2−x1)(x−x0)(x−x1)。
拉格朗日n次插值:当n>2时,假定Pn(xi)=yi(i=0,1,⋯,n),设Pn(x)=∑i=0nli(x)yi,其中li(xj)=δij,和n=2的情况类似,推导出li(x)=(xi−x0)⋯(xi−xi−1)(xi−xi+1)⋯(xi−xn)(x−x0)⋯(x−xi−1)(x−xi+1)⋯(x−xn)=∏j=0,j=in(xi−xj)(x−xj)。
有时也将拉格朗日插值多项式Pn(x)记作Ln(x)。
例:已知lg10=1、lg20=1.3010,利用一次插值多项式求lg12的近似值.
解:设f(x)=lgx,则f(10)=1、f(20)=1.3010,则l0(x)=x0−x1x−x1=10−20x−20=−101(x−20),l1(x)=x1−x0x−x0=101(x−10),故L1(x)=l0(x)y0+l1(x)y1=−101(x−20)y0+101(x−10)y1=−101(x−20)+101.3010(x−10),则L1(12)=1.0602。
例:若已知
xi |
10 |
15 |
20 |
yi=lgxi |
1 |
1.1761 |
1.3010 |
用二次插值多项式求lg12近似值.
解:设x0=10、x1=15、x2=20,根据公式得到l0(x)=(10−15)(10−20)(x−15)(x−20)=501(x−15)(x−20),l1(x)=(15−10)(15−20)(x−10)(x−20)=−251(x−10)(x−20),l2(x)=(20−10)(20−15)(x−10)(x−15)=501(x−10)(x−15),故L2(x)=y0l0(x)+y1l1(x)+y2l2(x)=501(x−15)(x−20)−251.1761(x−10)(x−20)+501.3010(x−10)(x−15),所以L2(12)=1.0766。
lg12的精确值为1.079181246,对比两个例题,发现高次插值的误差要比低次插值的误差小,但这不是绝对的。
定理(拉格朗日插值余项):设节点a≤x0<x1<⋯<xn≤b,且f满足条件f∈Cn[a,b],f(n+1)在[a,b]存在,则∀x∈[a,b],其截断误差为Rn(x)=f(x)−Pn(x)=(n+1)!f(n+1)(ξx)∏i=0n(x−xi)。
证明:回顾罗尔定理:若φ(x)充分光滑,且φ(x0)=φ(x1)=0,则存在ξ∈(x0,x1)使得φ′(ξ)=0.
推广1:若φ(x0)=φ(x1)=φ(x2)=0,则存在ξ0∈(x0,x1)、ξ1∈(x1,x2)使得φ′(ξ0)=φ′(ξ1)=0,并且存在ξ∈(ξ0,ξ1)使得φ′′(ξ)=0.
推广2:若φ(x0)=⋯=φ(xn)=0,则存在ξ∈(a,b)使得φ(n)(ξ)=0。
因为拉格朗日插值多项式Ln(x)经过(x0,y0),(x1,y1),⋯,(xn,yn),故在这些点处的误差Rn(xi)=0,因此Rn(x)至少有n+1个根,可设Rn(x)=K(x)∏i=0n(x−xi);任意固定的x=xi(i=0,1,⋯,n),考察φ(t)=Rn(t)−K(x)∏i=0n(t−xi),显然φ(t)有n+2个不同的根x0,⋯,xn,x,根据前面罗尔定理的推广知,存在ξx∈(a,b)使得φ(n+1)(ξx)=0(其中φ(n+1)是对t求导),即φ(n+1)(ξx)=Rn(n+1)(ξx)−K(x)(n+1)!=f(n+1)(ξx)−Ln(n+1)(ξx)−K(x)(n+1)!=0,其中Ln(x)是x的n次多项式,求n+1阶导后结果为零,故K(x)=(n+1)!f(n+1)(ξx),将K(x)代入Rn(x)中得证。
注意:通常不能确定ξx,而是对∀x∈(a,b)估计∣f(n+1)(x)∣≤Mn+1,得到n+1阶导的上限Mn+1,将(n+1)!Mn+1∏i=0n∣x−xi∣作为误差估计上限。特别地,当f(x)为任意一个次数≤n的多项式时,f(n+1)(x)≡0,即插值多项式对于次数≤n的多项式是精确的。
3. 牛顿插值
Lagrange插值虽然格式整齐规范,但却没有承袭性质,若要增加一个节点,全部基函数li(x)都要重新算过。如果可以把Lagrange插值改写为a0+a1(x−x0)+a2(x−x0)(x−x1)+⋯+an(x−x0)⋯(x−xn−1)的形式,这样每加一个节点,只需附加一项上去就可以了。
为介绍牛顿插值,需引入差商的概念。
定义:差商用归纳定义法来定义:1阶差商为f[xi,xj]=xi−xjf(xi)−f(xj)(i=j、xi=xj);2阶差商为f[xi,xj,xk]=xi−xkf[xi,xj]−f[xj,xk](i=k);⋯;k+1阶差商为f[x0,⋯,xk+1]=x0−xk+1f[x0,x1,⋯,xk]−f[x1,⋯,xk,xk+1]=xk−xk+1f[x0,x1,⋯,xk]−f[x0,⋯,xk−1,xk+1]。
差商的性质:
- 差商与函数值的关系:k阶差商f[x0,x1,⋯,xk]是由函数值f(x0),f(x1),⋯,f(xk)的线形组合而成,即f[x0,x1,⋯,xk]=∑i=0k(xi−x0)⋯(xi−xi−1)(xi−xi+1)⋯(xi−xk)1f(xi);
- 对称性:差商的值只与节点有关,而与xi的顺序无关,即,若i0,i1,⋯,ik为0,1,⋯,k的任一排列,则f[x0,x1,⋯,xk]=f[xi0,xi1,⋯,xik];
我们常把差商列成表,形式如下表(计算时先算一阶,再算二阶,依此类推):
i |
xi |
f(xi) |
一阶差商 |
二阶差商 |
⋯ |
n阶差商 |
0 |
x0 |
f(x0) |
|
|
|
|
1 |
x1 |
f(x1) |
f[x0,x1] |
|
|
|
2 |
x2 |
f(x2) |
f[x1,x2] |
f[x0,x1,x2] |
|
|
3 |
x3 |
f(x3) |
f[x2,x3] |
f[x1,x2,x3] |
|
|
⋮ |
⋮ |
⋮ |
⋮ |
⋮ |
⋱ |
|
n |
xn |
f(xn) |
f[xn−1,xn] |
f[xn−2,xn−1,xn] |
⋯ |
f[x0,⋯,xn] |
例:计算(−2,17)、(0,1)、(1,2)、(2,19)的一至三阶差商.
解:列出差商表如下
i |
xi |
f(xi) |
f[xi−1,xi] |
f[xi−2,xi−1,xi] |
f[xi−2,xi−1,xi] |
0 |
-2 |
17 |
|
|
|
1 |
0 |
1 |
f[x0,x1]=f[−2,0]=−8 |
|
|
2 |
1 |
2 |
f[x1,x2]=f[0,1]=1 |
f[x0,x1,x2]=f[−2,0,1]=3 |
|
3 |
2 |
19 |
f[x2,x3]=f[1,2]=17 |
f[x1,x2,x3]=f[0,1,2]=8 |
f[x0,x1,x2,x3]=45 |
比如f[x0,x1]=f[−2,0]=x1−x0f(x1)−f(x0)=0−(−2)1−17=−8,f[x1,x2]=f[0,1]=x2−x1f(x2)−f(x1)=1−02−1=1,f[x2,x3]=f[1,2]=x3−x2f(x3)−f(x2)=2−119−2=17,f[x0,x1,x2]=f[−2,0,1]=x2−x0f[x1,x2]−f[x0,x1]=1−(−2)1−(−8)=3,f[x1,x2,x3]=f[0,1,2]=x3−x1f[x2,x3]−f[x1,x2]=2−017−1=8,f[x0,x1,x2,x3]=f[−2,0,1,2]=x3−x0f[x1,x2,x3]−f[x0,x1,x2]=2−(−2)8−3=45。
牛顿插值多项式:形式为a0+a1(x−x0)+a2(x−x0)(x−x1)+⋯+an(x−x0)⋯(x−xn−1),其中a0=f(x0)、ai=f[x0,⋯,xi]。
证明:根据差商公式有Ⅰ.f(x)=f(x0)+(x−x0)f[x,x0]、Ⅱ.f[x,x0]=f[x0,x1]+(x−x1)f[x,x0,x1]、⋯、Ⅲ.f[x,x0,⋯,xn−1]=f[x0,⋯,xn]+(x−xn)f[x,x0,⋯,xn],将式1+(x−x0)×式2+⋯+(x−x0)⋯(x−xn−1)×式3,整理后得到f(x)=f(x0)+f[x0,x1](x−x0)+f[x0,x1,x2](x−x0)(x−x1)+⋯+f[x0,⋯,xn](x−x0)⋯(x−xn−1)+f[x,x0,⋯,xn](x−x0)⋯(x−xn−1)(x−xn),其中前面的n+1项是牛顿插值多项式,记作Nn(x),最后一项是牛顿插值的余项,记作Rn(x)。
注意:由唯一性可知Nn(x)=Ln(x),只是计算方式不同,故其余项也相同,即f[x,x0,⋯,xn]ωn+1(x)=(n+1)!f(n+1)(ξx)ωn+1(x),因此f[x,x0,⋯,xn]=(n+1)!f(n+1)(ξx)。
例:已知x=1,4,9的平方根为1,2,3,利用牛顿差商公式求7的近似值.
解:先根据给定的节点及函数值,构造出差商表
x |
y |
一阶差商 |
二阶差商 |
1 |
1 |
|
|
4 |
2 |
4−12−1=31 |
|
9 |
3 |
9−43−2=51 |
9−151−31=−601 |
则二次牛顿插值多项式N2(x)=1=31(x−1)+60−1(x−1)(x−4),因此7的近似值为N2(7)=2.69992。
4. 分段低次插值
为了提高插值多项式对函数的逼近程度,自然希望增加节点个数,即提高插值多项式的次数,特别地,当n→∞时,期望Pn(x)→f(x),但是事实并非如此,比如:
例:在[−5,5]上考察f(x)=1+x21的Ln(x).
解:取xi=−5+n10i,其中i=0,⋯,n,则Ln(x)=∑i=0nf(xi)⋅li(x)=∑i=0nf(xi)⋅∏j=0,j=in(xi−xj)(x−xj),我们考察最后两个节点的中点,记作xn−21=21(xn−1+xn)=5−n5,如图所示红、绿、橙分别是n=2,5,10的曲线:
插值与拟合-分段低次插值-01
当n=5时L5(x)的最后两个点的中点是最接近原函数的,当n=10的时候偏差反而比n=5的时候大了。
也就是说,当n→∞时Ln(x)并不能逼近f(x),我们把这种n越大,端点附近抖动越大的现象称为Runge现象。
由于高次插值收敛性无法保证,因此当插值节点n较大时,通常不采用高次多项式插值,而改用分段低次插值。
分段线性插值:在每个区间[xi,xi+1]上,用1阶多项式(直线)逼近f(x),即f(x)≈P1(x)=xi−xi+1x−xi+1yi+xi+1−xix−xiyi+1,这种插值方法可以逼近函数,但是失去了原函数的光滑性(左右导数不相等)。
例:已知函数y=f(x)=1+x21在区间[0,5]上取等距插值节点(如下表),求区间上分段线性插值函数,并用它求出f(4.5)的近似值.
xi |
0 |
1 |
2 |
3 |
4 |
5 |
yi |
1 |
0.5 |
0.2 |
0.1 |
0.05882 |
0.03846 |
解:利用公式P(x)=k−(k+1)x−(k+1)yk+(k+1)−kx−kyk+1=−yk(x−k−1)+yk+1(x−k),得到⎩⎨⎧−(x−1)+0.5x−0.5(x−2)+0.2(x−1)−0.2(x−3)+0.1(x−2)−0.1(x−4)+0.05882(x−3)−0.05882(x−5)+0.03846(x−4),x∈[0,1],x∈[1,2],x∈[2,3],x∈[3,4],x∈[4,5],于是P(4.5)=0.04864。
5. 埃尔米特(Hermite)插值
有时我们不仅要求函数值重合,而且要求若干阶导数也重合。
提示:根据解方程的思想,如果题目给了N个条件,则可以构造N−1阶多项式。
下面通过例题了解埃尔米特插值多项式如何构造。
例:设x0=x1=x2,已知f(x0)、f(x1)、f(x2)和f′(x1),求多项式P(x)满足P(xi)=f(xi),且P′(x1)=f′(x1).
解:题目给出了4个条件,故P(x)的阶数为3,模仿Lagrange多项式的思想,将P(x)写成用插值基函数表示的形式,P3(x)=∑i=02f(xi)αi(x)+f′(x1)β1(x),其中αi(x)和β1(x)都是埃尔米特插值基函数,都是三次多项式,并且它们满足αi(xj)=δij、ai′(x1)=0、β1(xj)=0、β1′(x1)=1,这里的δij是克罗内克函数,列出函数值如下表:
|
|
α0(x) |
α1(x) |
α2(x) |
β1(x) |
函数值 |
x0 |
1 |
0 |
0 |
0 |
函数值 |
x1 |
0 |
1 |
0 |
0 |
函数值 |
x2 |
0 |
0 |
1 |
0 |
导数值 |
x1 |
0 |
0 |
0 |
1 |
比如α0(x0)=1,而α0(x1)=α0(x2)=0,因此α0(x)有x1,x2两个根,而且a0′(x1)=0,因此x1是重根,故可以设α0(x)=C0(x−x1)2(x−x2),其中常数C0可以通过α0(x)=1算出,最后得到α0(x)=(x0−x1)2(x0−x2)(x−x1)2(x−x2);(α2同理)
而α1(x)有x0,x2两个根,但x1不是重根,因此可设α1(x)=(Ax+B)(x−x0)(x−x2),根据α1(x1)=1和α1′(x1)=0可解出A和B;
而β1(x)有x0,x1,x2三个根,因此可设β1(x)=C1(x−x0)(x−x1)(x−x2),其中常数C1可以根据β1(x1)=1解出。
埃尔米特插值多项式的一般形式:已知x0,⋯,xn处有y0,⋯,yn和y0′,⋯,yn′,求H2n+1(x)满足H2n+1(xi)=yi,H2n+1′(xi)=yi′,则H2n+1(x)=∑i=0n[1−2li′(xi)(x−xi)]li2(x)yi+∑i=0n(x−xi)li2(x)yi,其中li(x)=∏j=i(xi−xj)(x−xj)。
推导(和例题类似):设H2n+1(x)=∑i=0nyiαi(x)+∑i=0nyiβi(x),其中αi(x)和βi(x)都是2n+1次多项式,并且满足αi(xj)=δij、αi′(xj)=0、βi(xj)=0、βi′(xj)=δij;
根据这些条件可知,对于αi(x),除xi外其余的x0,⋯,xn都是二重根,因此αi(x)=(Aix+Bi)li2(x),其中li(x)=∏j=i(xi−xj)(x−xj),根据αi(xi)=1和αi′(xi)=0可求出Ai和Bi,最后得到αi(x)=[1−2li′(xi)(x−xi)]li2(x);
对于βi(x),x0,⋯,xn都是它的根,而且除xi外其余的x0,⋯,xn都是二重根,因此βi(x)=Ci(x−xi)li2(x),其中li(x)=∏j=i(xi−xj)(x−xj),根据βi′(xi)=1可算出Ci=1,最后得到βi(x)=(x−xi)li2(x)。
(βi(x)图像特点:与x轴交点为x0,⋯,xn,且在xi处斜率为1,其余xj(j=i)处斜率为0)
埃尔米特余项:若f(x)满足f(2n+1)(x)在[a,b]上连续,f(2n+2)(x)在(a,b)上存在,又x0,x1,⋯,xn是n+1个互异节点,则满足插值条件H2n+1(xi)=yi、H2n+1′(xi)=yi′的埃尔米特插值多项式H2n+1(x)唯一存在,且插值余项为Rn(x)=(2n+2)!f(2n+2)(ξx)[∏i=0n(x−xi)]2。
6. 最小二乘法
最小二乘法是一种曲线拟合的方法。
对于一组数据y0=f(x0)、⋯、yn=f(xn),要确定y与x之间的近似表达式:(1)方法一:插值,在几何上插值曲线经过所有点;(2)方法二:曲线拟合,求一连续曲线y=φ(x)使得误差θ=∑i=0n[φ(xi)−yi]2(连续)或θ=0≤i≤nmax∣φ(xi)−yi∣(离散)达到最小(本来应该用误差的绝对值之和的,但是由于绝对值函数不便于分析,故改为平方和)。
插值法适用于数据精确或可靠度较高的情况,而曲线拟合法适用于数据本身就有误差的情况。当数据量特别大时一般不用插值法,因为高次插值效果不理想,而分段低次插值精度又不高,另外,由于测量数据本身就有误差,使插值曲线刻意经过这些点也不必要;而曲线拟合是根据草图画出一条拟合曲线(或使用低次多项式),然后根据最小二乘法求出该曲线,这条曲线未必经过所以已知点,但能反映处数据的基本趋势。
定义:δi=φ(xi)−yi,叫做偏差,在回归分析中又称为残差,其中φi(x)是拟合函数,yi是测量值。
最小二乘原则:使偏差的平方和最小。(顾名思义最小二乘法就是根据最小二乘原则选择拟合曲线y=φ(x)的方法)
数学描述如下:设(xi,yi)(i=1,2,⋯,m)为给定的一组数据,要求在函数类Φ={φ0(x),φ1(x),⋯,φn(x)}(n<m)中,求一函数ϕ∗(x)=∑j=0naj∗φj(x)满足∣∣δ∣∣22=∑i=1m(φ∗(xi)−yi)2=minφ∈Φ∑i=1m(φ(xi)−yi)2,其中φ(x)=∑j=0najφj(x)为Φ中任一函数。我们称φ∗(x)为最小二乘解,φ(x)为拟合函数。
定义:对于给定的一组实验数据(xi,yi)(xi互异,i=0,1,⋯,m),在函数类Φ={φ0(x),φ1(x),⋯,φn(x)}(n<m且φ1(x),⋯,φn(x)之间线性无关),存在唯一的函数φ∗(x)=a0∗φ0(x)+a1∗φ1(x)+⋯+an∗φn(x)=∑j=0naj∗φj(x)使得关系式∑i=0mωi(φ∗(xi)−yi)2=minφ∈Φ∑i=0mωi(φ(xi)−yi)2成立(ωi是权系数,如果不是加权最小二乘法则等于1),并且其系数ak∗(k=0,1,⋯,n)可以通过解(φ0,φ0)(φ1,φ0)⋯(φn,φ0)(φ0,φ1)(φ1,φ1)⋯(φn,φ1)⋯⋯⋯⋯(φ0,φn)(φ1,φn)⋯(φn,φn)a0a1⋯an=(φ0,f)(φ1,f)⋯(φn,f)得到,记作(h,g)=∑i=1mh(xi)g(xi)。
最小二乘法的多项式拟合形式的解法:对于给定的一组数据(xi,yi)(i=0,1,⋯,m),求作n次多项式(n≤m)φ∗(x)=a0∗+a1∗x+⋯+an∗xn=∑j=0naj∗xk使得∑i=0m(φ∗(xi)−yi)2=minφ∈Φ∑i=0m(φ(xi)−yi)2成立,即拟合函数取为多项式,这样的曲线拟合问题又叫做多项式拟合问题,相应的法方程为m∑i=1mxi⋯∑i=1mxin∑i=1mxi∑i=1mxi2⋯∑i=1mxin+1⋯⋯⋯⋯∑i=1mxin∑i=1mxin+1⋯∑i=1mxi2na0a1⋯an=∑i=1myi∑i=1mxiyi⋯∑i=1mxinyi,且该方程组存在唯一的一组解。
比如:直线拟合(一次多项式拟合):若y=φ(x)=a0+a1x,则a0,a1可通过方程组{na0+(∑k=1nxk)a1=∑k=1nyk(∑k=1nxk)a0+(∑k=1nxk2)a1=∑k=1nxkyk解出;
二次多项式拟合:若y=φ(x)=a0+a1x+a2x2,则a0,a1,a2可通过方程组⎩⎨⎧na0+(∑k=1nxk)a1+(∑k=1nxk2)a2=∑k=1nyk(∑k=1nxk)a0+(∑k=1nxk2)a1+(∑k=1nxk3)a2=∑k=1nxkyk(∑k=1nxk2)a0+(∑k=1nxk3)a1+(∑k=1nxk4)a2=∑k=1nxk2yk解出。
例:已知一组实验数据:
xk |
2 |
2.5 |
3 |
4 |
5 |
5.5 |
yk |
4 |
4.5 |
6 |
8 |
8.5 |
9 |
试用直线拟合这组数据(计算过程保留3位小数)
解:设直线y=a0+a1x,那么法方程公式为{na0+(∑k=1nxk)a1=∑k=1nyk(∑k=1nxk)a0+(∑k=1nxk2)a1=∑k=1nxkyk,代入数据得{6a0+22a1=4022a0+90.5a1=161.25,解出a0=1.229、a1=1.483,故所求直线方程为y=1.229+1.483x。
实际应用中,拟合函数可能是其他类型的函数,不一定用多项式进行拟合。对于非线性最小而二乘问题,一般有如下解法(1)化为线性最小二乘问题,部分可化为线性拟合问题的常见函数见下表;(2)马奎特(Marquardt)方法,计算机上求解非线性最小二乘拟合问题的最常用的方法之一(略)。
插值与拟合-最小二乘法-01
加权最小二乘法:有时数据中每一点的重要性可能是不一样的,因此设ωi表示数据点(xi,yi)的重度(重度:即权重或密度,统称为权系数),定义加权平方误差为∣∣δ∣∣22=∑i=0mωiδi2=∑i=0mωi[φ∗(xi)−yi]2,如果选用的拟合曲线为φ∗(x)=a0∗+a1∗x+⋯+an∗xn,那么相应的法方程为∑i=1mωi∑i=1mωixi⋯∑i=1mωixin∑i=1mωixi∑i=1mωixi2⋯∑i=1mωixin+1⋯⋯⋯⋯∑i=1mωixin∑i=1mωixin+1⋯∑i=1mωixi2na0a1⋯an=∑i=1mωiyi∑i=1mωixiyi⋯∑i=1mωixinyi。
例:已知一组数据(xi,yi)及权Wi如下表,若x与y之间有线性关系y=a+bx,试用最小二乘法确定系数a和b.
i |
1 |
2 |
3 |
4 |
Wi |
14 |
27 |
12 |
1 |
xi |
2 |
4 |
6 |
8 |
yi |
2 |
11 |
28 |
40 |
解:将数据代入相应的法方程公式得{54a+216b=701216a+984b=3580,解出a=−12.885、b=6.467。
五、数值积分
1. 数值积分的概念
要近似计算积分I=∫abf(x)dx,可以用一个近似f(x)且易于求原函数的函数代替f(x)。
比如用拉格朗日插值多项式来近似f(x):在[a,b]上取a≤x0<x1<⋯<xn≤b,做f的n次插值多项式Ln(x)=∑k=0nf(xk)lk(x),则∫abf(x)dx≈∫ab∑k=0nf(xk)lk(x)dx=∑k=0nf(xk)∫ablk(x)dx=∑k=0nf(xk)Ak,其中Ak=∫ab∏j=0,j=kn(xk−xj)(x−xj)dx由节点决定,与f(x)无关;
此时误差Rn[f]=∫abf(x)dx−∑k=0nAkf(xk)=∫ab[f(x)−Ln(x)]dx=∫abRn(x)dx,通过拉格朗日插值余项可得插值型求积公式的误差Rn[f]=∫ab(n+1)!f(n+1)(ξ)∏k=0n(x−xk)dx。
例:对于[a,b]上1次插值有L1(x)=a−bx−bf(a)+b−ax−af(b),则∫abL1(x)dx=∫aba−bx−bdx⋅f(a)+∫abb−ax−adx⋅f(b),A0=∫aba−bx−bdx=2b−a、A1=∫abb−ax−adx=2b−a,故∫abf(x)dx≈2b−a[f(a)+f(b)]。
观察发现,上述积分的近似值其实就是由两个端点及坐标轴围成的梯形的面积,故我们将2b−a[f(a)+f(b)]称为梯形公式。
定义:若某个求积公式所对应的误差R[f]满足:对任意k≤n阶的多项式有R[Pk]=0成立,且对某个n+1阶多项式有R[Pn+1]=0成立,则称此求积公式的代数精度为n。
考察梯形公式∫abf(x)dx≈2b−a[f(a)+f(b)]的精度:
逐次检查公式是否精确成立,取f(x)=1,则左端为∫ab1dx=b−a,右端2b−a[1+1]=b−a,左右两端相等,公式精确成立;
取f(x)=x,则左端∫abxdx=2b2−a2,右端2b−a[a+b],左右两端仍相等,公式精确成立;
取f(x)=x2,则左端∫abx2dx=3b3−a3,右端2b−a[a2+b2],此时左右两端不相等,故代数精度=1。
定理:求积公式∫abf(x)dx≈∑k=0nAkf(xk)至少有n次代数精度的充要条件是该公式为插值型求积公式(即Ak=∫ablk(x)dx,其中li(x)是插值基函数)。
2. 牛顿-柯特斯公式及其复合
Newton-Cotes公式
Newton-Cotes(牛顿-柯特斯)公式:当节点等距分布时,即xk=a+kh(其中h=nb−a,k=0,1,⋯,n),则Ak=∫x0xn∏j=0,j=kn(xk−xj)(x−xj)dx=令x=a+th∫0n∏j=0,j=kn(k−j)h(t−j)h×h dt=n k!(n−k)!(b−a)(−1)n−k∫0n∏j=0,j=kn(t−j)dt,其中n k!(n−k)!(−1)n−k∫0n∏j=0,j=kn(t−j)dt称为Cotes系数,记作Ck(n),因此有∫abf(x)dx≈∑k=0nf(xk)Ak=∑k=0nf(xk)(b−a)Ck(n),该公式称为Newton-Cotes公式,简记为N-C公式。
显然Newton-Cotes公式是一种插值型求积公式。(其复合形式亦然,因为它是通过拉格朗日插值求积通过换元化简得到的)
Cotes系数仅取决于n和k,与f(x)及区间[a,b]均无关,其值可查表得到(如下表)。
数值积分-插值型求积公式-01
当n比较大时,Cotes公式会开始出现负项,计算过程的稳定性没有保证,因此一般只使用n≤4的公式。
Newton-Cotes公式的截断误差可以通过拉格朗日插值多项式的截断误差推导出,Rn[f]=∫abRn(x)dx=∫ab(n+1)!f(n+1)(ξ)∏k=0n(x−xk)dx=(n+1)!hn+2∫0nf(n+1)(ξ)[∏j=0n(t−j)]dt,ξ∈[a,b],,该误差公式表面h越小,误差就越小。
Cotes系数的性质:
(1)权性:∑k=0nCk(n)=1,即每一行的Cotes系数之和等于1;
(2)对称性:Ck(n)=Cn−k(n);
一些比较常用的Newton-Cotes公式:
- n=1时,C0(1)=21、C1(1)=21,故A0=A1=2b−a,因此∫abf(x)dx≈2b−a[f(a)+f(b)],即前面的梯形公式,代数精度为1,误差Rn[f]=∫ab2!f′′(ξx)(x−a)(x−b)dx=令x=a+th,根据中值定理−121h3f′′(ξ),其中ξ∈[a,b]、h=1b−a;
- n=2时,查表得∫abf(x)dx≈6b−a[f(a)+4f(2a+b)+f(b)],该公式称为Simpson公式,代数精度为3,误差R[f]=−901h5f(4)(ξ),其中ξ∈[a,b]、h=2b−a;
- n=3时,查表得∫abf(x)dx≈8b−a[f(x0)+3f(x1)+3f(x2)+f(x3)],该公式称为Simpson83公式(或第二Simpson公式),代数精度为3,误差R[f]=−803h5f(5)(ξ);
- n=4时,得到Cotes求积公式,代数精度为5,误差R[f]=−9458h7f(6)(ξ)。
定理:n为偶数阶的Newton-Cotes公式至少有n+1次代数精度。
例:试分别用梯形公式和Simpson公式计算积分I=∫01exdx的近似值,并估计截断误差.
解:梯形公式:I≈2b−a[f(a)−f(b)]=2e0+e1≈1.85914,截断误差∣R1[f]∣=121∣h3f′′(ξ)∣≤12(1−0)3max0≤x≤1∣f′′(x)∣=12e≈0.22652(f′′(ξ)一般用二阶导绝对值的最大值替代);
Simpson公式:I≈6b−a[f(a)+4f(2a+b)+f(b)]=61(e0+4e21+e1)≈1.71886,截断误差R[f]=−2880(b−a)5max0≤x≤1∣f(4)(x)∣≤2880e≈0.00095。
显然Simpson公式的结果优于梯形公式的结果。
Newton-Cotes复合求积公式
根据Newton-Cotes公式的截断误差公式,步长h越小,截断误差就越小,为了得到比较精确的积分值,必须用高阶求积公式,但高阶(n≥8)的Newton-Cotes公式是不稳定的,因此不能通过提高Newton-Cotes公式阶数的方法来提高精度。
我们考虑对被积函数采用分段低次多项式插值(分段通常是等分),这样就得到了分段低次合成的Newton-Cotes复合求积公式,比如:
复合梯形公式:令h=nb−a、xk=a+kh(k=0,⋯,n),在每个[xk−1,xk]上用梯形公式,得到∫xk−1xkf(x)dx≈2xk−xk−1[f(xk−1)+f(xk)],其中k=1,⋯,n;再把每个区间的值加起来得到复合梯形公式∫abf(x)dx≈∑k=1n2h[f(xk−1)+f(xk)]=2h[f(a)+2∑k=1n−1f(xk)+f(b)],记作Tn,误差R[f]=−12h2(b−a)f′′(ξ),其中ξ∈(a,b);
复合Simpson公式:xk与xk+1的中点用xk+21表示,则∫xkxk+1f(x)dx≈6h[f(xk)+4f(xk+21)+f(xk+1)],把每个区间的值加起来得复合Simpson公式∫abf(x)dx≈6h[f(a)+4∑k=0n−1f(xk+21)+2∑k=0n−1f(xk+1)+f(b)],记作Sn,误差R[f]=−180b−a(2h)4f(4)(ξ),其中ξ∈(a,b);
由于公式中出现了x21、x23这样的半节点,为方便编程实现,令n′=2n为偶数,这时h′=n′b−a=2h,xk=a+kh′,于是Sn=3h′[f(a)+4∑odd kf(xk)+2∑even kf(xk)+f(b)]。
复合Cotes公式:类似地,∫xkxk+1f(x)dx≈90h[7f(xk)+32f(xk+41)+12f(xk+21)+32f(xk+43)+7f(xk+1)],加起来得复合Cotes公式∫abf(x)dx≈90h[7f(a)+14∑k=1n−1f(xk)+32∑k=0n−1f(xk+41)+12∑k=0n−1f(xk+21)+32∑k=0n−1f(xk+43)+7f(b)],记作Cn,误差Rc[f]=∫abf(x)dx−Cn=−9452(b−a)(4h)6f(6)(ξ),其中ξ∈(a,b)。
定义:若一个积分公式的误差满足h→0limhpR[f]=C<∞,且C=0是常数,则称该公式是p阶收敛的(收敛阶越高,收敛速度越快)。
前述三种复合积分公式的收敛阶数:Tn∼O(h2)、Sn∼O(h4)、Cn∼O(h6)。
例:计算π=∫011+x24dx,函数值如下表
x |
0 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
1 |
f(x) |
4 |
3.938461538 |
3.764705882 |
3.506849315 |
3.2 |
2.876404494 |
2.56 |
2.265486726 |
2 |
解:令xk=8k,则T8=161[f(0)+2∑k=17f(xk)+f(1)]=3.1 38988494,只有2位有效数字,而如果使用复合Simpson公式S4=241[f(0)+4∑oddf(xk)+2∑evenf(xk)+f(1)]=3.141592 502,差不多的计算量却有7位有效数字,实际上T215=3.141592 02才有7位有效数字。
通过上例的分析,有必要讨论给定精度ε,要如何取n才能达到精度要求。
复合梯形公式的误差分析:对于复合梯形公式,要求∣I−Tn∣<ε,则R[f]=−12h2(b−a)f′′(ξ)=−12h2∑k=1n[fn(ξk)⋅h]≈−12h2∫abf′′(x)dx=−12h2[f′(b)−f′(a)]。(其他公式类似)
上例若要求∣I−Tn∣<10−6,则∣Rn[f]∣≈12h2∣f′(1)−f′(0)∣=6h2<10−6,解出h<0.00244949,即n=hb−a应取409。
通常采用将区间不断对分的方法,即取n=2k。上例中2k≥409,即k=9时,T512=3.141592 02满足精度要求。
根据误差公式R[f],不难发现每次对分一次,误差大概会变成原来的41(n变为2n,则h变为2nb−a=2h,代入R[f]中),即I−TnI−T2n≈41⇒I−T2n≈31(T2n−Tn),如果采用区间一直对分的方法,可以使用此公式判断是否停止。
3. 变步长求积
前面介绍的Newton-Cotes公式是固定步长的方法,但是往往题目中只会给出精度要求,要根据精度要求求出步长的话要通过R[f],这时就会出现f(x)的高阶导数,不便于计算。
变步长求积思想:变步长方法就是根据规定的精度要求,在计算过程中将积分区间逐次分半,每对分一次就用同一种复合求积公式计算出相应的积分近似值,并同时查看相继两次计算结果的误差是否达到要求,直到所求得的积分近似值满足精度要求为止。(也就是说,点仍然是等距分布的,只是每次迭代都再对分一次区间)
以梯形公式为例,将其递推化为变步长的梯形公式:
(1)将积分区间[a,b]等分,等分点xk=a+kh(其中k=0,1,⋯,n、h=nb−a),复合梯形公式为Tn=2h[f(a)+2∑k=1n−1f(xk)+f(b)],画图可知是两个端点的函数值加一次,中间点的函数值全部加两次,最后再乘以2h;
(2)若区间精度达不到要求,则将[xk,xk+1]每个小区间二分一次,即令区间中点为xk+21=2xk+xk+1,该小区间二分前后的两个积分值分别记为Tk1和Tk2,代入梯形公式结合图像可知Tk1=2h[f(xk)+f(xk+1)]、Tk2=22h[f(xk)+2f(xk+21)+f(xk+1)],整理后得Tk2=21Tk1+2hf(xk+21);
(3)将二分后的所有小区间积分累加∑k=0n−1Tk2=∑k=0n−1[21Tk1+2hf(xk+21)],于是得到公式T2n=21Tn+2h∑k=0n−1f(xk+21),这就是梯形公式的递推化公式,也称为梯形公式的变步长法,式中h表示二分前的步长,即h=nb−a;
(4)计算过程中,常用∣T2n−Tn∣<ε来判断精度是否满足要求。
可见,计算T2n(分成2n份时的积分)时用到了Tn的结果,只需对新的中间节点求和即可,这样可以使计算量减小很多。
例:用变步长法计算∫01xsinxdx,使误差不超过10−6(假设xsinx的函数值已知).
解:先对整个积分区间[0,1]使用梯形公式,得T1=21[f(0)+f(1)]=0.920735492,通过T2n=21Tn+2h∑k=0n−1f(xk+21)有:
k |
n |
Tn |
∣Tn−T2n∣ |
0 |
1 |
0.920735492 |
|
1 |
2 |
0.939793285 |
0.019057793 |
2 |
4 |
0.944513522 |
0.004720237 |
3 |
8 |
0.945690864 |
0.001177342 |
4 |
16 |
0.94598503 |
0.000294166 |
5 |
32 |
0.946058561 |
7.3531×10−5 |
6 |
64 |
0.946076943 |
1.8382×10−5 |
7 |
128 |
0.946081539 |
4.596×10−6 |
8 |
256 |
0.946082687 |
1.148×10−6 |
9 |
512 |
0.946082975 |
2.88×10−7 |
故T512=0.946082975。
4.龙贝格(Romberg)积分
变步长梯形求积虽然算法简单,但是收敛速度仍较慢。(因为它本质上仍是梯形法,只是不需要每次分区间都再从头算一遍)
前面提到了梯形公式的误差有如下结论:I−TnI−T2n≈41⇒I−T2n≈31(T2n−Tn)。如果用31(T2n−Tn)对T2n进行误差补偿,即T=T2n+31(T2n−Tn)=34T2n−31Tn,那么由I≈4−14T2n−Tn=34T2n−31Tn来计算I效果是否好一些?事实上,容易验证4−14T2n−Tn=Sn,即用梯形法二分前后的两个积分值Tn和T2n按上式作线性组合,却得到了复合Simpson公式Sn,精度提高了。
再考察Simpson公式,其截断误差与h4成正比,因此如果将步长折半,则误差减至161,即I−SnI−S2n≈161,由此可得I≈1516S2n−Sn,容易验证,42−142S2n−Sn=Cn,即右端项就是复合Cotes公式。依此类推,43−143C2n−Cn=Rn,其中Rn是Romberg序列。
根据前面分析,得到公式一:4−14T2n−Tn=Sn,公式二:42−142S2n−Sn=Cn,公式三:43−143C2n−Cn=Rn,于是有Romberg算法:
(1)用梯形公式计算积分近似值T1,令T1=T0(0);
(2)按变步长梯形公式计算T2,令T2=T0(1);
(3)将T1、T2按公式一得到S1=T1(0),判断相邻两次积分值∣S1−T2∣是否小于ε,若满足精度要求则停止计算并输出S1,否则进行下一步;
(4)按变步长梯形公式计算T4,令T4=T0(2);
(5)将T2和T4按公式一得到S2=T1(1);
(6)将S1、S2按格式二得到C1=T2(0),判断∣C1−S2∣是否小于ε,若满足则停止计算并输出C1,否则进行下一步;
(7)按变步长梯形公式计算T8,令T8=T0(3);
(8)将T4、T8按公式一得到S4=T1(2);
(9)将S2、S4按公式二得到C2=T2(1);
(10)将C1、C2按格式三得到R1=T3(0);判断∣R1−C2∣是否小于ε,若满足则停止计算并输出R1,否则类似进行下去;
可画出过程如下:
数值积分-龙贝格积分-01
例:用Romber求积算法计算I=∫01xsinxdx的近似值,使其具有6位有效数字.
解:仿照过程的画图表示,列表如下
k |
T2k |
S2k−1 |
C2k−2 |
R2k−3 |
0 |
0.9207355 |
|
|
|
1 |
0.9397933 |
0.9461459 |
|
|
2 |
0.9445135 |
0.9460869 |
0.9400830 |
|
3 |
0.94456909 |
0.9460833 |
0.9460831 |
0.9460831 |
故I≈0.9460831。(精确值为0.946083070367⋯,即计算结果前6位确实是有效数字)
六、常微分方程的数值解法
1. 初值问题介绍
微分方程:有一个或多个导数及其函数的方程称为微分方程,它分为①常微分方程-只有一个自变量;②偏微分方程-一个以上自变量。
实际中求解常微分方程的定解问题有两类:初值问题和边值问题。(定解指已知因变量或其导数在某些点上是已知的)
边解问题(边值问题):约束条件已知,在自变量的任一非初值上,已知函数值或其导数值,如{y′′=f(x,y,y′)y(a)=α,y(b)=β,常常可以将边解问题转化为初值问题求解。
初值问题:约束条件为在自变量的初值上已知函数值,如{y′=f(x,y)y(x0)=y0⇒{dxdy=f(x,y)x0xy(x0)=y0,要求解y(x),可在a≤x0′≤x1′≤⋯≤xn′≤b上的y(xi)的近似值yi=y(xi)(i=0,1,⋯,n),通常取等距节点,令h=xi+1−xi,则xi=x0+ih(i=0,1,⋯,n)。初值问题的数值解法特点:按节点顺序依次推进,若已知y0,y1,⋯,yi,可根据递推公式求出yi+1。
初值问题的常用解法:(1)单步法:利用前一个单步的信息(即一个点),在y=f(x)上找下一点yi,欧拉法、龙格-库塔法都属于单步法;(2)预测校正法:又称多步法,利用一个以上的节点信息求f(x)的下一个yi,常用迭代法,如改进欧拉法、阿姆斯特当法。
单步递推法的基本思想是从(xi,yi)出发,以某一斜率沿直线达到(xi+1,yi+1)。
比如,方程xy′−2y=4x⇒y′=x2y+4,令f(x,y)=x2y+4,且给出初值y(1)=−3,就可以得到一阶常微分方程的初值问题{dxdy=f(x,y)=x2y+4y(1)=−3。
只要函数f(x,y)适当光滑连续,且关于y满足李普希兹(Lipschitz)条件(即存在常数L,使得∣f(x,y)−f(x,y)∣≤L∣y−y∣),则由常微分方程理论知,初值问题的解必存在且唯一。
数值解法的含义:设法将常微分方程离散化,建立差分方程,给出解在一些离散点上的近似值。
数学描述如下:设方程问题的解y(x)的存在区间是[a,b],令a=x0<x1<⋯<xn=b,其中hk=xk+1−xk(如果是等距节点h=nb−a则称为步长),由于y(x)的解析表达式不容易得到或无法得到,我们用数值方法求得y(x)在每个节点xk上y(xk)的近似值,用yk表示,即yk≈y(xk),这样y0,y1,⋯,yn称为微分方程的数值解。
2. 欧拉(Euler)方法、欧拉预校法
欧拉显格式计算公式(显式欧拉公式或显式欧拉格式):yi+1=yi+hf(xi,yi),它可循环求解。
推导:Taylor展开法,y(xi+1)=y(xi)+y′(xi)(xi+1−xi)+2!y′′(ξ)(xi+1−xi)2=y(xi)+hf(xi,y(xi))+2h2y′′(ξi),其中二阶导的部分可忽略,于是得到yi+1=yi+hf(xi,yi)(其中i=0,1,2,⋯,n−1,且根据初值问题的定义有dxdy=f(x,y))。
或者用向前差商近似导数y′(x0)≈hy(x1)−y(x0),即y(x1)≈y(x0)+hy′(x0)=y0+hf(x0,y0),将其记作y1,依此类推得到yi+1=yi+hf(xi,yi),这是显式格式的欧拉计算公式。
隐式欧拉法(隐式欧拉公式或隐式欧拉格式):yi+1=yi+hf(xi+1,yi+1)。
推导:用向后差商近似导数y′(x1)≈hy(x1)−y(x0),即y(x1)≈y0+hf(x1,y(x1)),依此类推得到yi+1=yi+hf(xi+1,yi+1),其中i=0,1,2,⋯,n−1。由于未知数yi+1同时出现在等式两边,不能直接得到,故称为隐式欧拉公式。使用时常用显式计算一个初值,在迭代求解。
例:用欧拉法解初值问题{dxdy=1−xyy(0)=0,0<x<1,取步长为h=0.2,计算过程保留4位小数.
解:令f(x,y)=1−xy,根据欧拉公式y(xi+1)≈yi+1=yi+hf(xi,yi)=yi+0.2(1−xiyi),其中i=0,1,2,3,4,5,得
i |
0 |
1 |
2 |
3 |
4 |
5 |
xi |
0 |
0.2 |
0.4 |
0.6 |
0.8 |
1 |
yi |
0 |
0.2000 |
0.3920 |
0.5606 |
0.6934 |
0.7824 |
除了欧拉格式外,还可以用梯形格式:yi+1=yi+2h[f(xi,yi)+f(xi+1,yi+1)](其中i=0,1,2,⋯,n−1),它是隐格式的。
观察可知,它是显、隐式两种算法的平均,它有两种计算思路(1)化为显格式;(2)用迭代法求yi+1,初值用Euler显格式确定。
中点欧拉公式:yi+1=yi−1+2hf(xi,yi)。
使用中心差商近似导数y′(x1)≈2hy(x2)−y(x0),即y(x2)≈y(x0)+2hf(x1,y(x1)),依此类推得yi+1=yi−1+2hf(xi,yi),其中i=1,⋯,n−1。
其实不同的迭代公式就是在每个小区间上用不同的形状的面积来近似积分值。
它们的优缺点如下:显式欧拉简单但精度低,隐式欧拉稳定性最好但精度低且计算量大,梯形公式精度高但计算量大,中点公式精度较高但需要多一个初值,可能影响精度。
为加快收敛速度,将显式欧拉格式与梯形格式结合起来就得到了欧拉预估-校正法。
欧拉预估-校正法(改进欧拉法)步骤:
(1)用显式欧拉公式作预测,算出yn+1=yi+hf(xi,yi);
(2)将yi+1代入隐式梯形公式的右半部分作校正,得到yi+1=yi+2h[f(xi,yi)+f(xi+1,yi+1)]。
综合以上两步,可得到yi+1=yi+2h[f(xi,yi)+f(xi+1,yi+hf(xi,yi))],其中i=0,⋯,n−1。易证,当2n∣∂y∂f∣≤2<1时,该方法关于i的迭代收敛。
欧拉预估-校正法也可以写成⎩⎨⎧yi+1=yi+2h(K1+K2)K1=f(xi,yi)K2=f(xi+h,yi+hK1)y0=α,其中i=0,⋯,n−1。
例:求初值问题{y′=y−y2xy(0)=1,0≤x≤1的数值解,取步长h=0.1。(精确解为y(x)=(1+2x)21)
解:⎩⎨⎧yi+1=yi+0.05(K1+K2)K1=yi−yi2xiK2=yi+0.1K1−yi+0.1K12(xi+0.1)y0=1,其中i=0,1,⋯,9,计算结果如下表(为对比不同方法,加入了欧拉格式和精确解)
i |
xi |
欧拉法yi |
欧拉预校法yi |
精确解y(xi) |
0 |
0 |
1 |
1 |
1 |
1 |
0.1 |
1.1 |
1.095909 |
1.095445 |
2 |
0.2 |
1.191818 |
1.184096 |
1.183216 |
3 |
0.3 |
1.277438 |
1.266201 |
1.264991 |
4 |
0.4 |
1.358213 |
1.343360 |
1.341641 |
5 |
0.5 |
1.435133 |
1.416402 |
1.414214 |
6 |
0.6 |
1.508966 |
1.485956 |
1.483240 |
7 |
0.7 |
1.580338 |
1.552515 |
1.549193 |
8 |
0.8 |
1.649783 |
1.616476 |
1.612452 |
9 |
0.9 |
1.717779 |
1.678168 |
1.673320 |
10 |
1 |
1.784770 |
1.737869 |
1.732051 |
3. 误差估计、收敛性、稳定性
定义:假设yi=y(xi),按某种方法由yi严格算出yi+1这一步的误差叫做局部截断误差,记为Ri+1=y(xi+1)−yi+1。
定义:由y0逐步严格算出yi+1的误差称为整体截断误差,记作εi+1=y(xi+1)−yi+1。
定义:若某种方法的局部截断误差为Ri+1=O(hp+1),则称该方法为p阶方法。(显然p越大越好)
比如,欧拉显格式的局部误差:完整的Taylor展开为y(xi+1)=y(xi)+hf(xi,y(xi))+2h2y′′(ξi),假设yi=y(xi),则根据欧拉显格式yi+1=yi+hf(xi,yi)=y(xi)+hf(xi,y(xi)),两式相减得Ri+1=y(xi+1)−yi+1=2h2y′′(εn)=O(h2),所以欧拉显格式是一阶方法。
同理,梯形法Ri+1=O(h3),欧拉预校法Ri+1=O(h3)。
定理:设f(x,y)满足关于第2个变元的Lipschitz条件∣f(x1,y1)−f(x2,y2)∣≤L∣y1,y2∣,且欧拉显格式的局部截断误差满足∣Ri∣≤2i2M2,则∣εi∣≤e(b−a)∣ε0∣+2LM2[e(b−a)−1]h,其中i=1,2,⋯,M2=a≤x≤bmax∣y′′(x)∣,[a,b]为求解区间。
若初始误差为ε0=0,则∣εi∣比∣Ri∣低一阶(具有普遍意义)。该定理揭示了局部与整体截断误差的关系,而讨论局部截断误差相对简单,所以我们这里只讨论局部截断误差。
定义:对某方法,任意固定x=xi=x0+ih,当h→0(同时i→∞)时,若有εi=y(xi)−yi→0,则称该方法收敛。
比如,初值问题{y′=λyy(0)=y0,考察欧拉显格式的收敛性:该问题的精确解为y(x)=y0eλx,欧拉公式为yi+1=yi+hλyi=(1+λh)yi,对任意固定的xi=ih,有yi=y0(1+λh)hxi=y0[(1+λh)λh1]λxi=重要极限y0eλxi=y(xi),因此欧拉显式法收敛(当h→0时εn=O(h)→0)。
同理,梯形法、欧拉预校法均收敛(当h→0时εn=O(h2)→0)。
定义:用某方法固定步长h作计算,由初值y0严格得出yi,现假设初值有微小误差δ0(即实际初值为y0+δ0),则引起第i步计算值有误差δi(实际为yi+Si),若∣δi∣≤∣δ0∣(i=1,2,⋯),即∣δi∣不随i无限扩大,则称该方法关于步长h绝对稳定。一般分析时为简单起见,只考虑试验方程y′=λy(可以是常数或复数)。
比如,对于欧拉法,yi+1=yi+h(λyi)=(1+λh)yi=⋯=(1+λh)i+1y0,设初值有小扰动δ0,则yi+1+δi+1=(1+λh)i+1(y0+δ0),两式相减得δi+1=(1+λh)i+1δ0,显然,要使欧拉法绝对稳定,就必须保证∣1+λh∣≤1,即h≤−λ1时欧拉法绝对稳定。
4.龙格-库塔(R-K)方法
前面介绍的欧拉法的各种变形所能达到的最高精度只有2阶,我们有必要构造更高精度的单步递推格式。
二阶龙格-库塔格式:⎩⎨⎧yi+1=yi+h(λ1K1+λ2K2)K1=f(xi,yi)K2=f(xi+ph,yi+phK1),且{λ1+λ2=1λ2p=21.
考察改进欧拉法(即欧拉预校法):⎩⎨⎧yi+1=yi+2h(K1+K2)K1=f(xi,yi)K2=f(xi+h,yi+hK1)y0=y(x0),若考虑把K1、K2改为其他不同的斜率,步长也不再一定是一个h,则可将其推广为⎩⎨⎧yi+1=yi+h(λ1K1+λ2K2)K1=f(xi,yi)K2=f(xi+ph,yi+phK1),我们希望能确定系数λ1、λ2、p,使得算法格式有2阶精度,即在yi=y(xi)的前提下,使得Ri=y(xi+1)−yi+1=O(h3),方法如下:
K2在(xi,yi)Taylor展开K2=f(xi+ph,yi+phK1)=f(xi,yi)+phfx(xi,yi)+phK1fy(xi,yi)+O(h2)=y′(xi)+phy′′(xi)+O(h2),而y′′(x)=dxdf(x,y)=fx(x,y)+fy(x,y)dxdy=fx(x,y)+fy(x,y)f(x,y)(其中y′=f(x,y)是我们定义的函数),将K2代入第一式得yi+1=yi+h{λ1y′(xi)+λ2[y′(xi)+phy′′(xi)+O(h2)]}=yi+(λ1+λ2)hy′(xi)+λ2ph2y′′(xi)+O(h3),对比Taylor展开y(xi+1)=y(xi)+hy′(xi)+2h2y′′(xi)+O(h3),若要求Ri=y(xi+1)−yi+1=O(h3),则必须有λ1+λ2=1,λ2p=21,满足这两个条件的有无穷多个解,所有满足上式的格式统称为二阶龙格-库塔格式。
特别地,当p=1、λ1=λ2=21时就是改进欧拉法。
高阶龙格-库塔格式:在二阶的基础上进行推广,得到⎩⎨⎧yi+1=yi+h(λ1K1+λ2K2+⋯+λmKm)K1=f(xi,yi)K2=f(xi+α2h,yi+β21hK1)K3=f(xi+α3h,yi+β31hK1+β32hK2)⋯Km=f(xi+αmh,y+βm1hK1+βm2hK2+⋯+βm,m−1hKm−1),其中λi、αi与βij均为待定系数,其确定方法和二阶时类似。
比如,三阶龙格-库塔法:⎩⎨⎧yi+1=yi+6h(K1+4K2+K3)K1=f(xi,yi)K2=f(xi+2h,yi+2hK1)K3=f(xi+h,yi−hK1+2hK2);四阶龙格-库法:⎩⎨⎧yi+1=yi+6h(K1+2K2+2K3+K4)K1=f(xi,yi)K2=f(xi+2h,yi+2hK1)K3=f(xi+2h,yi+2hK2)K4=f(xi+h,yi+hK3).
龙格-库塔法的计算量与最高精度阶数的关系如下表:
每步须算K的个数 |
2 |
3 |
4 |
5 |
6 |
7 |
n≥8 |
可达到的最高精度 |
O(h2) |
O(h3) |
O(h4) |
O(h4) |
O(h5) |
O(h6) |
O(hn−2) |
由于龙格-库塔法的导出基于泰勒展开,故精度主要受函数的光滑性影响。对于光滑性不太好的解,最好采用低阶算法而将步长h取小。
隐式龙格-库塔法:{yi+1=yi+h(λ1K1+⋯+λmKm)Kj=f(xi+αjh,yi+βj1hK1+⋯+βjmhKm),其中j=1,2,⋯,m。
对于显式格式的龙格-库塔法,阶数越高,其稳定的区域就越大。而对于隐式龙格-库塔法,其绝对稳定区域远高于显式格式。