黃陳思,劉 蓉
(福州大學(xué) 數(shù)學(xué)與計算機科學(xué)學(xué)院,福建 福州 350002)
計算機與數(shù)學(xué)的有機結(jié)合形成了“科學(xué)計算”的研究方法,它的核心內(nèi)容是以現(xiàn)代化的計算機以及數(shù)學(xué)軟件為工具,以數(shù)學(xué)模型為基礎(chǔ)進行模擬研究[1]。一個實際問題在計算機上的解決需要轉(zhuǎn)化成數(shù)學(xué)模型,當(dāng)數(shù)學(xué)模型不能夠得到精確解時,通常要用數(shù)值方法求它的近似解,而后再編制成程序在計算機上運行。顯然,這些計算方法是數(shù)值分析課程研究的對象,只有構(gòu)造出好的算法才能有效的在計算機上解決數(shù)學(xué)問題。然而,構(gòu)造計算方法的手段是近似,研究并分析算法的核心問題則是近似對計算結(jié)果的影響。隨著授課經(jīng)驗的積累以及對這門課程了解的深入,作者越來越覺得誤差的講解應(yīng)該成為整門課程講授的重點和核心。實際問題通過建立數(shù)學(xué)模型在計算機上得到解決,每一步都會產(chǎn)生誤差。只有一個對誤差進行詳盡分析的算法才能稱之為一個好的算法。下面就誤差對算法的影響以及算法的誤差分析等幾個方面進行闡述,從中可以看出將誤差分析在課堂講授中應(yīng)當(dāng)特別作為重點是很有實際意義的。
用一個算法進行計算,由于初始數(shù)據(jù)誤差在計算中傳播使計算結(jié)果誤差增長很快,就是數(shù)值不穩(wěn)定的[2]。在大部分?jǐn)?shù)值計算教材中都能見到這樣一個關(guān)于描述算法穩(wěn)定性的例子,式(1)與式(2)兩個公式是相互等價的,但是由于初始數(shù)據(jù)帶有誤差,計算結(jié)果就迥然不同。
當(dāng)初始數(shù)據(jù)帶有誤差時,式(1)的計算過程使得這個誤差急劇擴散,速度為n!,假設(shè)初始數(shù)據(jù)I0的誤差為δ,則當(dāng)n=7時I7的誤差為δ的5040倍。而式(2)卻能夠在計算的過程中逐步地縮小誤差,控制誤差的傳播。這就是算法的穩(wěn)定性問題。在常微分方程初值問題的數(shù)值解法中也會發(fā)生這樣的問題。例如,分別用歐拉顯、隱式格式和改進的歐拉格式計算初值問題在區(qū)間[0,0.5]上的數(shù)值解。結(jié)果如圖1所示:
圖1 常微分方程初值問題
注意到在這個結(jié)果里,局部截斷誤差為2階的改進歐拉法在h=0.3,0.4,0.5的值相對于局部截斷誤差為1階的歐拉隱式公式在這些點的計算結(jié)果更加偏離了精確解。這是由于歐拉隱式公式的穩(wěn)定性高于改進歐拉法。從這一方面也能夠看出算法的穩(wěn)定性問題在實際計算中的重要性。理論上的截斷誤差并不能正確地反映一個算法計算結(jié)果的好壞。
此時它的精確解為x=(1,1)T,從這個例子可以看到常數(shù)項的第2個分量只有萬分之一的微小變化,然而方程組的解卻變化很大。這樣的方程組就稱之為病態(tài)方程組。病態(tài)方程組的影響在《數(shù)值分析》的幾個章節(jié)中都是很有必要在課堂中加以解釋的。因此,必須要去尋求避免出現(xiàn)此類問題的解決方案。在這種情形下可以引導(dǎo)學(xué)生進行思考,既要保持原有的解法,又要避免求解線性方程組。解決的方法就是以正交的函數(shù)族代替φi(x),用正交多項式做最小二乘曲線擬合,系數(shù)矩陣變?yōu)閷蔷仃?,就可以避免利用線性方程組,而能夠直接計算出系數(shù)。同樣的,在插值法的推導(dǎo)以及數(shù)值微積分中,由于考慮到求解線性方程組可能會遇到病態(tài)方程組或者計算過程比較繁雜,都需要另外尋求解決方案,由此可見,清晰而明了地提醒學(xué)生時時需要注意到求解方程組的病態(tài)問題,才能夠盡可能地避免在實際求解中實際值偏離理論值的情況,這一點,無論是在算法的講解還是在實際問題的求解中都是不可避免的。
誤差的分析既可以對算法的優(yōu)劣進行判斷,還可以利用誤差來創(chuàng)造新的算法。例如,在數(shù)值微積分這一章節(jié)中的推導(dǎo)自適應(yīng)的積分方法,復(fù)合梯形公式的余項公式中涉及到f(x)在η點的二階導(dǎo)數(shù)f"(η),在實際中由于f(x)復(fù)雜或未知,難以通過余項公式來估計誤差,而需要改變思路。也就是誤差的估計不能使用余項公式,但觀察余項公式后,可以引導(dǎo)學(xué)生考慮利用區(qū)間折半以后的復(fù)合梯形公式的余項中f"(η)與折半前復(fù)合梯形公式余項中的f"(ξ)近似相等,得到如下的式子
綜上所述,算法的誤差分析與課程每一個環(huán)節(jié)都息息相關(guān),在講解算法的時候都很有必要提醒學(xué)生時刻注意到對誤差進行分析,如果脫離了誤差分析,而僅僅在于講授算法,就失去了算法應(yīng)用于實際的意義。本文并沒有對算法的誤差分析方法進行討論,而是從誤差分析的另一個角度剖析了這個內(nèi)容在課程講授中的重要性,引導(dǎo)學(xué)生在學(xué)習(xí)過程中要注意實際問題中的舍入誤差帶來的影響和理論誤差公式的應(yīng)用。通過強調(diào)誤差分析,能夠在一定程度上提升學(xué)生對待問題的嚴(yán)謹(jǐn)性與探索性,使得數(shù)值分析課程的教與學(xué)更加豐富,更加貼近工程計算的實質(zhì)。
[1]白峰杉.數(shù)值計算引論第2版[M].高等教育出版社,2010.
[2]李慶揚,等.數(shù)值分析第5版[M].清華大學(xué)出版社,2008.