數(shù)值分析知識與思想梳理

何謂數(shù)值分析?

眾所周知現(xiàn)實生活中科學技術上面的問題大多數(shù)都能夠通過建立對應的數(shù)學模型把實際問題轉(zhuǎn)化成一個數(shù)學問題,但是往往很多的實際問題即便建立了相對應的數(shù)學模型仍然無法有效的通過常規(guī)手法求得其解,或者求解的方法十分的復雜,為了簡化計算有效的求其解或者是近似解從而解決實際問題從而催生出了數(shù)值分析這一門課程。數(shù)值分析按我自己的理解就是通過有效的科學的手段簡便的求解數(shù)學模型的方式方法。因此數(shù)值分析也叫科學計算。同時隨著計算機的發(fā)展解放了人類的勞動力把許多數(shù)學工作者從繁復的計算中解脫了出來,計算機本來一開始就是為數(shù)學而生的,我們?nèi)祟惒皇侨f能的有其固有的局限性,隨著人類社會科學技術的發(fā)展越來越多的科學技術問題僅僅靠人力來計算無疑是癡人說夢異想天開的,有了計算機我們期待能夠把許多的數(shù)學模型都設置成一套算法放在計算機上面跑,把復雜的機械化的事情都交給計算機去做,而數(shù)值分析恰恰就是面向計算機的一門實用性很強的一門學科。用計算機求解科學技術問題通常經(jīng)歷以下步驟:

  • 根據(jù)實際問題建立數(shù)學模型

  • 由數(shù)學模型給出數(shù)值計算方法

  • 根據(jù)計算方法編制算法程序在計算機上得出結(jié)果
    第一步建立數(shù)學模型通常是應用數(shù)學的范疇,第二三步就是數(shù)值分析與科學計算的范疇


    數(shù)值分析與科學計算樹.png

數(shù)值分析思維導圖如下

由于人類的局限性與抽象模型與現(xiàn)實世界的差異所造成的誤差

誤差的分類:

  • 模型誤差:要建立數(shù)學模型就需要對現(xiàn)實世界進行抽象,既然是
    ? 抽象那么誤差就會必然的產(chǎn)生誤差
  • 觀測誤差:所謂觀測誤差顧名思義就是觀測不準造成的誤差,這主要是由于人類生理上的局限性造成的
  • 階段誤差或者方法誤差:這主要是人類智力上局限性造成的誤差,在解決數(shù)學問題的過程中大多數(shù)我們不能夠通過已有的方法得到精確解只能得到近似解,比如可微函數(shù)用泰勒多項式展開就必然會有余項即截斷誤差
  • 舍入誤差:這是由于計算機的字長有限把一個超過字長的數(shù)輸入計算機就會溢出從而得到不精確的數(shù)值。
    既然由于各種各樣的局限性造成的誤差的是不可避免的,我們要想克服我們?nèi)祟愖陨淼木窒扌跃捅仨殞W會如何去控制誤差,如果把誤差控制合理的范圍內(nèi),使得其對實際問題的影響微乎其微,得到一個與精確解近似的近似解,這又何嘗不是身為萬物之靈的人類征服自然超越自我的一種體現(xiàn)

誤差的基本概念

絕對誤差:
x^*為x的一個近似值那么稱e^*=x^*-x為近似值的絕對誤差
相對誤差:
相對性是自然界中普遍存在的真理,任何事情都是相對的,誤差也不例外,誤差的大小需要參考真實值的大小,因此\frac {x^*-x}{x}就稱為相對誤差,但是在實際問題中真實值x的大小我們通常是不知道的因此就用\frac{x^*-x}{x^*}來代替相對誤差。
相對誤差限:
相對誤差絕對值的上界就叫做相對誤差限。
數(shù)值運算的誤差估計:
當f為多元函數(shù)時例如計算A=f(x_1,x_2,\cdots,x_n),如果x_1,x_2,\cdots,x_n的近似值為x_1^*,x_2^*,\cdots,x_n^*時候,A的近似值為A^*=f(x_1^*,x_2^*,\cdots,x_n^*) 于是由泰勒展開得到e(A^*)=A^*-A=f(x_1^*,x_2^*,\cdots,x_n^*)-f(x_1,x_2,\cdots,x_n) \approx \sum\limits^n_{k=1}(\dfrac {\partial f(x_1^*,x_2^*,\cdots,x_n^*)}{\partial x_k})(x^*_k-x_k)=\sum\limits^n_{k=1}(\dfrac {\partial f}{\partial x_k})^*e^*_k 于是誤差限\varepsilon(A^*)\approx\sum\limits^n_{k=1}|(\dfrac {\partial f}{\partial x_k}^*)|\varepsilon (x^*_k),相對誤差限為\varepsilon^*_r=\dfrac {\varepsilon(A^*)}{|A|^*}\approx\sum\limits^n_{k=1}|(\dfrac{\partial f}{\partial x_k})^*|\dfrac {\varepsilon(x^*_k)}{|A^*|}

如何盡量減少誤差:

  • 盡量減少運算次數(shù)
  • 設計算法盡量保證誤差不在計算過程中增長太快以及要避免出現(xiàn)病態(tài)問題
  • 要盡量使得計算公式避免或者減少有效數(shù)字的損失

迭代法與開方求值

迭代法是按照同一公式重復計算逐次逼近真實值的算法,是數(shù)值計算中普遍使用的方法,比如說開方運算,他不是四則運算,計算機只能處理四則運算因此在計算機上面要想開方就得將開方運算化解為四則運算,這就是迭代法

設使a\gt0,求\sqrt a等價與解方程組x^2-a=0現(xiàn)在用簡單的方法構造一個迭代公式

先取一個x_0\gt0為x真值的一個近似,另x=x_0+\varDelta x,\varDelta x是一個較正量,稱為增量于是(x_0+\varDelta x)^2=a

即得 x^2_0+2x_0\varDelta x+(\varDelta x)^2=a由于\Delta x是無窮小量,省略高階無窮小(\Delta x)^2則得:

x_0^2+2x_0\Delta x\approx a,即\Delta x\approx\dfrac{1}{2}(\dfrac {a}{x_0}-x_0)

于是:x=x_0+\Delta x\approx\dfrac{1}{2}(x_0+\dfrac{a}{x_0})=x_1

這里的x_1還不是真值,只是 x_0的進一步近似因此我們把x_1在做進一步的近似重復以上過程就可以得到迭代公式x_{k+1}=\dfrac 12(x_k+\dfrac{a}{x_k})

將迭代公式兩別取極限可得\lim\limits_{k\rightarrow \infty} x_k=x^*,x^*=\sqrt a,顯然序列{x_k}對任何x_0>0均收斂,且收斂很快

由上式迭代公式的推導可知道,要想構造迭代公式需要滿足迭代公式收斂而且收斂與真值,顯然迭代公式是十分適合計算機進行運算的重復的事情機械化的事情是計算機最擅長做的事情,我們把迭代公式輸入計算機,就相當于給了計算機一個運算規(guī)則,計算機根據(jù)這個規(guī)則就懂得如何求值

以直代曲的牛頓迭代法

牛頓迭代法是由求根公式構造出來的,現(xiàn)有一個函數(shù)y=f(x)我們要求其根x^*,那么現(xiàn)在x^* 附近取一個點(x_k,f(x_k))

過這一點做f(x)的切線求得切線與x軸的交點x_{k+1},顯然x_{k+1}是x_k相對于x^*的一個近似,重復做切線與x軸的交點極限值就是x^*

f(x)在(x_k,f(x_k))點的切線方程為y=f(x_k)+f^\prime(x_k)(x-x_k),令y=0 得到的根x_{k+1}就是x_k的進一步近似

x_{k+1}=x_k-\dfrac{f(x_k)}{f^\prime(x_k)} 即為著名的牛頓迭代公式

求重根的Newton迭代法

當x^*為f(x)=0的m重根的時候,Newton迭代格式僅是線性收斂的,收斂的比較慢,這時候可以將迭代格式修正為:

x_{k+1}=x_k-m\dfrac{f(x_k)}{f^\prime(x_k)}能夠證明此迭代格式至少是2階收斂的

事實上若x^*是f(x)的m重根則x^*是方程的u(x)=\dfrac{f(x)}{f^\prime(x)}的單根還可對u(x)=0應用Newton迭代公式具有2階收斂性

線性代數(shù)方程組的數(shù)值解法

在高等代數(shù)中我們學過界限行方程組如果其系數(shù)行列式不為零那么方程組有唯一解,則可以用Cramer法則求出唯一解但是Cramer法則計算量太大因此以現(xiàn)有的計算機的運算速度是吃不消的,因此必須研究其它數(shù)值解法。

Gauss消去法解線性方程組:

高等代數(shù)中學過如果一個矩陣非奇異,則其上三角舉證有唯一解如果把一個線性方程組的系數(shù)矩陣用Gauss消元法化成一個上三角舉證無疑會減少大量的計算量使得計算機的負荷沒那么大,(注意:高斯消去法的前提條件是消去法所形成的主元素均不為零,當n階矩陣的所有順序主子式都不為零時候條件滿足)

追趕法:

主要運用在三對角矩陣中運用Gauss消去法將對角線元素下的元素小消去

列主元Gauss消去法:

主要是為了防止舍入誤差給值帶來的負面影響,當Gauss消元進行到第K步的時候如果第K行的元素相對于其他行元素來說過于小的化當?shù)贙行乘上一個數(shù)加到其他行消元的時候會放大誤差,因此在消元的時候往往通過調(diào)換主元來控制誤差

矩陣的直接分解法:

Gauss消去法的過程實際上是對方程組的增廣矩陣實行行變換也就是左乘以n-1個矩陣(如果是n階矩陣的話),左乘的n-1個矩陣的乘積是一個下三角矩陣,因此矩陣A如果可以運用Gauss消元法的話就可以把A化為一個上三角矩陣以及一個下三角矩陣的乘積形式即A=LU,L為一個下三角矩陣,U為一個上三角矩陣(如果矩陣A的各階順序主子式均不為零則對A可做唯一的LU分解)

一個線性方程組的增廣矩陣A做LU分解如下:

A=\begin{pmatrix} {a_{11}}&{a_{12}}&{\cdots}&{a_{1n}}&{a_{1,n+1}}\\{a_{21}}&{a_{22}}&{\cdots}&{a_{2n}}&{a_{2,n+1}}\\{\vdots}&{\vdots}&{}&{\vdots}&{\vdots}\\{a_{n1}}&{a_{n2}}&{\cdots}&{a_{nn}}&{a_{n,n+1}}\end{pmatrix}=\begin{pmatrix}{1}&&&&&\\{l_{21}}&{1}\\{l_{31}}&{l_{32}}&{1}\\{\vdots}&{\vdots}&{\vdots}&{1}\\{l_{n-1,1}}&{l_{n-1,2}}&{l_{n-1,3}}&{\cdots}&{1}\\{l_{n,1}}&{l_{n,2}}&{l_{n,3}}&{\cdots}&{l_{n,n-1}}&{1}\end{pmatrix} \times\begin{pmatrix}{u_{11}}&u_{12}&u_{13}&{\cdots}&u_{1n}&u_{1,n+1}\\&u_{22}&u_{23}&{\cdots}&u_{2n}&u_{2,n+1}\\&&u_{33}&{\cdots}&u_{3n}&u_{3,n+1}\\&&&{\ddots}&{\vdots}&{\vdots}\\&&&&u_{nn}&u_{n,n+1}\end{pmatrix}

根據(jù)矩陣的乘法法則比較兩邊第一行和第一列的元素有

a_{1j}=u_{1j} (j=1,2,\cdots,n+1)

a_{i1}=l_{i1}u_{11} (i=2,3,\cdots,n)

即得:l_{i1}=\dfrac{a_{i1}}{a_{11}} (i=2,3,\cdots,n)

由已給出的L的前k-1列與U的前k-1行來確定L的第K列和U的第K行其公式如下:

a_{kj}=\sum\limits^n_{q=1}l_{kq}u_{qj}=\sum\limits^{k-1}_{q=1}l_{kq}u_{qj}+u_{kj} (j=k,k+1,\cdots,n+1)

a_{ik}=\sum\limits^{n}_{q=1}l_{iq}u_{qk}=\sum\limits^{k-1}_{q=1}l_{iq}u_{qk}+l_{ik}u_{kk} (i=k,k+1,\cdots,n+1)

對稱矩陣的直接分解法:

對于對稱矩陣而言由上面的計算公式可以推的l_{ik}=\dfrac{u_{ki}}{u_{kk}}因此公式計算更為簡單

迭代法:

對于線性方程組Ax=b,其中A非奇異,b\neq 0,因吃他有唯一解x^*構造與線性方程組同解的線性方程組

x=Bx+f,任取一跟個向量x^{(0)}作為線性方程組的近視解,用迭代公式

x^{(k+1)}=Bx^{(k)}+f若\lim\limits_{k\rightarrow \infty}x^{(k)}=x^*則等式兩邊取極限可得x^*=Bx^*+f于是x^*也是Ax=b的解

幾個常用的迭代格式:

  • Jacobi迭代格式

    由線性方程組\begin{cases}a_{11}x_1+a_{12}x_2+{\cdots}+a_{1n}x_n=b_1\\a_{21}x_1+a_{22}x_2+{\cdots}+a_{2n}x_n=b_2\\{\vdots}\\a_{n1}x_1+a_{n2}x_2+{\cdots}+a_{nn}x_n=b_n\end{cases}

    \begin{cases}x_1=[b_1-(a_{12}x_2+{\cdots}+a_{1n}x_n)]/a_{11}\\x_2=[b_2-(a_{21}x_1+{\cdots}+a_{2n}x_n)]/a_{22}\\{\vdots}\\x_n=[b_n-(a_{n1}x_1+a_{n2}x_2+{\cdots}+a_{n,n-1}x_{n-1})]/a_{nn}\end{cases}

? 建立迭代格式

\begin{cases}x_1^{(k+1)}=[b_1-(a_{12}x_2^{(k)}+{\cdots}+a_{1n}x_n^{(k)})]/a_{11}\\x_2^{(k+1)}=[b_2-(a_{21}x_1^{(k)}+{\cdots}+a_{2n}x_n^{(k)})]/a_{22}\\{\vdots}\\x_n^{(k+1)}=[b_n-(a_{n1}x_1^{(k)}+a_{n2}x_2^{(k)}+{\cdots}+a_{n,n-1}x_{n-1}^{(k)})]/a_{nn}\end{cases}

  • Guss-Seidel迭代格式
    仔細觀察就能夠發(fā)現(xiàn)Jacobi迭代公式當計算出了x_i^{(k+1)}后在計算x_{i+1}^{(k+1)}的時候沒有用到已經(jīng)計算出來的x_i^{(k+1)}依舊在用x_i^{(k)}因此我們可以對Jacobi做適當?shù)母倪M利用已經(jīng)計算出的值來計算下一個的值因為理論上來講已經(jīng)經(jīng)過計算了的值更加的精確
    \begin{cases}x_1^{(k+1)}=[b_1-(a_{12}x_2^{(k)}+{\cdots}+a_{1n}x_n^{(k)})]/a_{11}\\x_2^{(k+1)}=[b_2-(a_{21}x_1^{(k+1)}+{\cdots}+a_{2n}x_n^{(k)})]/a_{22}\\{\vdots}\\x_n^{(k+1)}=[b_n-(a_{n1}x_1^{(k+1)}+a_{n2}x_2^{(k+1)}+{\cdots}+a_{n,n-1}x_{n-1}^{(k+1)})]/a_{nn}\end{cases}
    這就是Guss-Seidel迭代格式
    前面已經(jīng)說過要想知道構造的迭代公式使用與否,要看迭代公式是否收斂,那么如何判斷迭代公式是否收斂嘞?
    我們可以把Ax=b中的系數(shù)矩陣A拆分為一個對角元素為零的下三角矩陣L,一個對角元素為零的上三角矩陣U,以及一個除對角元素部位零外其余元素都為零的矩陣D的和即A=L+U+D,(L+U+D)x=b
    由此可以推得迭代格式x^{k+1}=Jx^{k}+f其中J=-D^{-1}(L+U),f=D^{-1}b
    同理可以推得Guss-Seidel的迭代格式為
    x^{(k+1)}=Gx^{(k)}+F
    G=-(D+L)^{-1}U,F=(D+L)^{-1}b
    迭代格式的收斂性:
    Jacobi迭代格式收斂的充分必要條件是\rho(J)<1(即J的特征根的最大值小于1)由J=-D^{-1}(L+U),f=D^{-1}b可以推得矩陣J的特征方程為A的主對角元素乘上一個\lambda后行列式等于零的解
    同理Gauss-Seidel迭代格式收斂的充分必要條件是\rho(G)<1 G=-(D+L)^{-1}U,F=(D+L)^{-1}b可以推得G的特征方程為A的主對角線上以及以下的元素乘上\lambda后行列式等于零的解。

    插值與逼近

? 在許多的科學問題中,經(jīng)常要研究變量與函數(shù)之間的關系y=f(x),如果f(x)的函數(shù)表達式很復雜或者f(x)只能夠得到有效的幾個點(x_1,f(x_1)),(x_2,f(x_2)),\cdots,(x_n,f(x_n))這都給研究問題帶來困難,因此我們希望用一個簡單的函數(shù)p(x)去近似的代替f(x)用以滿足實際問題的需要。但是由于近似度量標準的不同也就構成了插值與逼近。插值主要是用幾個已知條件去構造一個較為簡單的多項式函數(shù)來代替已知函數(shù),而逼近是用一個函數(shù)去逼近已知的函數(shù)。

Lagrange插值函數(shù)

設函數(shù)f(x)在區(qū)間[a,b]上由n+1個互異的節(jié)點x_0,x_1,x_2,x_3,\cdots,x_n如果存在一個不超過 n次的多項式p(x)使得p(x_i)=f(x_i),(i=0,1,2,\cdots,n)p(x)為f(x)的n次插值多項式

一般而言我們通過n+1個條件各已通過解線性方程組來確定n次多項式的系數(shù)從而確定多項式但是通過線性方程組解方程求系數(shù)過于麻煩因此我們希望有通過插值節(jié)點來構造插值多項式的公式

插值多項式有如下形式

p_n(x)=\sum\limits_{k=0}^{n}l(x)f(x_k)

l(x)=\begin{cases}1\quad\quad x=x_k\\0\quad\quad x\neq x_k\end{cases}

很自然的l(x) 有形式\dfrac{(x-x_0)(x-x_1)\cdots(x-x_{k-1})(x-x_{k+1})\cdots(x-x_n)}{(x_k-x_0)(x_k-x_1)\cdots(x_k-x_{k-1})(x_k-x_{k+1})\cdots(x_k-x_n)}

顯然這樣的形式滿足上面的條件,因此p_n(x)就是f(x)的n階插值多項式而且插值多項式式唯一的

Newton插值多項式與差分,差商

牛頓插值多項式的提出是在拉格朗日多項式的基礎上的,上面提到的拉格朗日插值多項式由于在構造插值多項式的時候插值節(jié)點式確定的,因此如果我們希望在多加幾個插值節(jié)點構造更高次的插值多項式那么我們就需要把拉格朗日的插值系數(shù)推倒從來很不靈活沒有插值公式的重用性,眾所周知我們在計算幾種輸入代碼的時候我們也希望提高代碼的重用性用以減輕編程人員的負擔,而牛頓插值多項式的提出恰好彌補了拉格朗日插值多項式的不足,使得插值公式更加的靈活,在之前節(jié)點數(shù)插值公式的基礎上可以只要經(jīng)過適當?shù)男拚涂梢缘玫叫碌牟逯刀囗検健?/p>

Newton插值多項式的思想

假設有已經(jīng)構造出的k?個節(jié)點的k-1?次的插值多項式L_{k-1}?我們希望通過L_{k-1}?推導出增加了一個節(jié)點的插值多項式L_{k}?g(x)=L_{k}-L_{k-1}?顯然根據(jù)插值多項式的定義g(x)?k?個零點,因此g(x)?有形式

g(x)=a_k(x-x_0)(x-x_1)(x-x_2)\cdots(x-x_{k-1})

因此L_k(x)=a_0+a_1(x-x_0)+a_2(x-x_0)(x-x_1)+\cdots+a_k(x-x_0)\cdots(x-x_{k-1})

L_n(x)=a_0+a_1(x-x_0)+a_2(x-x_0)(x-x_1)+\cdots+a_n(x-x_0)\cdots(x-x_{n-1})

如果常數(shù)可以確定出來那么我們就可以通過L_{k-1}來構造推導L_k

事實上我們通過推導得到的a_k=\sum\limits_{m=0}^{k}\dfrac{f(x_m)}{\prod\limits_{i=0,i\neq m}^k(x_m-x_i)}

然而直接通過公式來推導a_k的值式困難的,但是數(shù)學家們通過從最簡單的推導開始

差分的導出
對于一個插值節(jié)點的插值多項式L_0(x)=f(x)=a_0=f(x_0)
對于兩個插值節(jié)點的插值多項式為線性插值
L_1(x)=f(x)=f(x_0)+\dfrac{f(x_1)-f(x_0)}{x_1-x_0}(x-x_0)=a_0+a_1(x-x_0)a_1=\dfrac{f(x_1)-f(x_0)}{x_1-x_0}稱之為一階差商形式
同樣的L_2(x)=a_0+a_1(x-x_0)+a_2(x-x_0)(x-x_1),L_2(x_2)=f(x_2)可以推得a_2=\dfrac{\dfrac{f(x_2)-f(x_1)}{x_2-x_1}-\dfrac{f(x_1)-f(x_0)}{x_1-x_0}}{x_2-x_0}
定義為二階差商形式
數(shù)學家只通過推到了一階差商和二階差商,更高階的推到出來不現(xiàn)實,因此數(shù)學家們把a_1和a_2所具有的形式稱之為差商并且定義出來差商的形式,而且通過數(shù)學歸納法的驗證k階差商就是a_k
定義k階差商為f[x_0,x_1,\cdots,x_{k-1},x_{k}] = \dfrac{f[x_0,x_1,\cdots,x_{k-1}]-[x_1,\cdots,x_{k-1},x_k]}{x_0-x_k} = a_k=\sum\limits_{m=0}^{k}\dfrac{f(x_m)}{\prod\limits_{i=0,i\neq m}^k(x_m-x_i)}
這就是差商的由來,數(shù)學家們先發(fā)現(xiàn)從簡單的a_1,a_2開始然后猜想出a_k可能具有哪些形式然后把這種形式稱作差商,然后用數(shù)學歸納法證明差商就是推到差值公式的系數(shù),這就是差商產(chǎn)生的整個過程,大家不要小看這個過程,很多的數(shù)學公式的由來都是與差商推到相類似的思維方式。還有所謂的數(shù)學歸納法其實有點類似于大家都知道的多米諾骨牌效應只要證明第一個成立,并且只要前面的滿足導致后面的滿足,這個就是成立的。就像多米洛骨牌只要推到第一個其他的也會跟著倒下去,老實說筆者剛看書的時候也對這個差商是怎么來的百思不得其解,知道我多找了幾本書參考了之后才搞明白這個差商是怎么來的,差商的推到思維過程真的是很有意思嘞。
差商可以通過構造差商表來進行計算是分的方便,放到計算機中只要輸入算法,構造插值多項式是一件極其簡單的事情

差分及其等距節(jié)點的Newton插值多項式:

對于等距節(jié)點而言我們可以極大的減少計算差商的計算量,可以將差商形式化解為差分的形式。
等距節(jié)點其節(jié)點為x_i=a+ih (i=0,1,2,\cdots,n)
因為x_i-x_{i-1}的值是固定不變的因此我們可以定義設法化解差商
定義\Delta f_i=\Delta f_{i+1}-f_{i}
類似地,稱\Delta^kf_i=\Delta^{k-1}f_{i+1}-\Delta^{k-1}f_i稱之為f(x)x_i處以h為步長的k階向前差分,簡稱k階差分
然后我們應用數(shù)學歸納法可以證明差分與差商的關系如下:
f[x_i,x_{i+1},\cdots,x_{i+k}]= \dfrac{\Delta^kf_i}{k!h^k}
因此將差分與x=x_0+ht帶入Newton插值多項式可以得到:
N_n(x_0+th)=\sum\limits_{k=0}^n\dfrac{\Delta^kf_0}{k!}\prod\limits^{k-1}_{j=0}(t-j)
稱之為n此Newton前插公式

Hermite插值
前面介紹的插值公式都只是考慮到插值多項式在插值節(jié)點處取給定的函數(shù)值但是往往在實際問題中只要求函數(shù)值滿足還不夠還要要求在這些點上的導數(shù)值也相等這即是Hermite插值這里不做過多的討論感興趣的可以去翻看相關書籍。
高次插值的缺點及其分段插值
在進行高次插值的時候有可能會發(fā)生龍格函數(shù)函數(shù)的狀況,即高次插值的插值多項式有可能并不收斂于已知函數(shù)f(x)為了應對這種清苦保證插值函數(shù)一致收斂于已知函數(shù),我們可以把已知函數(shù)分成N個小區(qū)間然后在每個小區(qū)間上進行Newdon插值或者Lagrange插值,但是如果分成的插值小區(qū)間過多的時候在每個小區(qū)間上面我們其實不要選擇過多的插值節(jié)點就可以,因為區(qū)間小插值函數(shù)比較精準,所以一般我們每個小區(qū)間上面選取一個到四個插值節(jié)點就夠了,但是往往我們還要滿足插值節(jié)點的導數(shù)情況這樣我們只要知道區(qū)間端點的兩個函數(shù)值及其導數(shù)值我們就可以構建每個小區(qū)間上的三次插值多項式這就是三次樣條插值。
三次樣條插值:
設在區(qū)間[a,b]上給定(n+1)個插值節(jié)點
a=x_0\lt x_1 \lt \cdots \lt x_n=b及其相對應的函數(shù)值f(x_0),f(x_1),\cdots,f(x_n)
若函數(shù)S(x)滿足:
(1) S(x_i)=f(x_i)
(2) S(x)在每一個小區(qū)間[x_i,x_{i+1}]上是三次多項式
(3) S(x)在[a,b]上有連續(xù)的二階導數(shù)則稱S(x)為3次樣條插值函數(shù)
從定義可知要使得S(x)在每個小區(qū)間上都是三次多項式則每個小區(qū)間上需要S(x)滿足四個條件才能夠構建三次多項式,總共需要4n個條件,有已經(jīng)知條件有n+1個插值節(jié)點滿足的條件有n+1個條件,再加上聯(lián)結(jié)條件
\begin{cases} S(x_i-0)=S(x_i+0)\\S^\prime(x_i-0)=S^\prime(x_i+0)\\S^{\prime\prime}(x_i-0)=S^{\prime\prime}(x_i+0)\end{cases} i=1,2,\cdots,n-1
這里有3(n-1)個條件,一共就有了4n-2個條件
在加上2個邊界條件:
(1) S^\prime(x_0)=f^\prime(x_0),S^\prime(x_1)=f^\prime(x_1)
(2) S^{\prime\prime}(x_0)=f^{\prime\prime}(x_0),S^{\prime\prime}(x_1)=f^{\prime\prime}(x_1)
(3) S^{\prime\prime\prime}(x_0)=f^{\prime\prime\prime}(x_0),S^{\prime\prime\prime}(x_1)=f^{\prime\prime\prime}(x_1)
其中的一項總共就有4n個條件就可以確定唯一的三次樣條插值
至于三次樣條的求法這里不做過多描敘感興趣的自己去看書。

最佳一致逼近
之前的多項式插值都是要求在插值節(jié)點滿足被插值函數(shù)的一些條件,在插值節(jié)點處誤差為零,這是一種近似的度量標準,下面介紹另外的兩種近似度量標準,要求在整個區(qū)間上插值函數(shù)與被插值函數(shù)的誤差盡可能的小,但不要求相等。
最佳一致逼近多項式
f\in C[a,b]若存在p_n\in M_n 使得對任意的q_n\in M_n (M_n為所有次數(shù)不超過n的多項式的集合)
有: max|f(x)-p_n(x)|\leqslant max|f(x)-q_n(x)| \cdots a\leqslant x \leqslant b, 則稱 p_n(x)f(x)的最佳一致逼近多項式。
也就是說最佳一致逼近多項式是所有多項式中函數(shù)值與被插值函數(shù)的差的最大值最小的插值多項式
最佳一致逼近多項式的構建主要是利用最佳一致逼近多項式存在交錯偏差點的性質(zhì)。
為了求最佳一致逼近多項式以及求最佳近似一致逼近多項式可以引進Chebyshev多項式T_n(x)=cos(n arccosx),有最佳一致逼近多項式的定義可知,要求最佳一致逼近多項式也就是求p_n(x)-f(x)的最小零偏差問題,而正好Chebyshev多項式有在區(qū)間[0,1]上所有首項為一的n次多項式中2^{1-n}T_n(x)對零的偏差最小,因此可以借助Chebyshev多項式求最佳一致逼近多項式,而且Chebyshev多項式有很多的性質(zhì),比T_n(x)在區(qū)間[-1,1]n個不同的零點,還有一個交錯偏差點組,如果以Chebyshev多項式的零點做插值多項式則可以使得插值多項式的余項取得最小,這就是最佳近似一致逼近多項式。如果求不是在區(qū)間[-1,1]上構建一致逼近多項式,那么可以通過變換把它變?yōu)?img class="math-inline" src="https://math.jianshu.com/math?formula=%5B-1%2C1%5D" alt="[-1,1]" mathimg="1">上的被插值函數(shù)然后做一致逼近。
具體內(nèi)容請參考相關書籍
最佳平方逼近多項式
最佳一致逼近多項式考慮的是在區(qū)間上值的誤差的最大值最小,而最佳平方逼近多項式是考慮在整體上誤差最小,有些被插值函數(shù)僅僅只是在很小的一個區(qū)間上波動很大,這樣的被插值函數(shù)顯然用最佳一致逼近多項式去逼近并不合適,因此需要用另外的度量標準去度量近似程度。

  • 離散數(shù)據(jù)的最佳一致平方逼近
    f(x_k) k=0,1,2,\cdots,n若存在p_n(x)\in M_n 使得對任意的q_n(x)\in M_n (M_n為所有次數(shù)不超過n的多項式的集合)
    有: \sum\limits^n_{k=0}|f(x_k)-p_n(x_k)|^2\leqslant \sum\limits^n_{k=0}|f(x_k)-q_n(x_k)|^2 則稱 p_n(x)f(x)的最佳平方逼近多項式
  • 連續(xù)函數(shù)在[a,b]區(qū)間上的最佳一致逼近
    \int_a^b|f(x_k)-p_n(x_k)|^2dx\leqslant \int_a^b|f(x_k)-q_n(x_k)|^2 dx
    則稱 p_n(x)f(x)的最佳平方逼近多項式

數(shù)值積分與數(shù)值微分

函數(shù)求導數(shù)與求微分的問題已經(jīng)在數(shù)學分析中得到解決了,但是如果是面對離散的數(shù)據(jù)時候求導與求積公式都不能使用,而且計算機是不能夠處理連續(xù)的問題的,因此如果要想把積分法則變成計算機程序就必須把積分變成離散的問題轉(zhuǎn)變?yōu)樗膭t運算而后才可以給計算機輸入一套算法。
實際上一個函數(shù)在某個區(qū)間上面的積分本身就可以看做是函數(shù)在這個區(qū)間上無窮多項的和\int_a^bf(x)dx \approx\sum\limits_{k=0}^nA_kf(x_k)我們不妨就設想積分有這樣的形式。設給定的一組節(jié)點a \leqslant x_0\lt x_1\lt x_2\lt \cdots \lt x_n\leqslant b已知函數(shù)在這組節(jié)點上的值為f(x_k)則可以做插值多項式L_n(x)=\sum\limits^n_{k=0}f(x_k)l_k(x),l_k(x)是插值基函數(shù)于是得到一個求積公式:I_n(f)=\int^b_aL_n(x)dx
得到I_n(f)=\sum\limits_{k=0}^nA_kf(x_k),A_k=\int_a^bl_k(x)dx為求積系數(shù)如果求積節(jié)點是等距的那么其插值型求積公式為Newton-Cotes求積公式求積系數(shù)的公式可以推導出來具體請參考相關書籍。

  • 當選取兩個求積節(jié)點的時候其求積公式如下:
    T(f)=\dfrac{b-a}{2}[f(a)+f(b)]是為梯形公式
  • 當選取三個節(jié)點的時候求積公式如下:
    S(f)=\dfrac{b-a}{6}[f(a)+4f(\dfrac{a+b}{2})+f(b)]是為Simpson公式
  • 當選取五個等距節(jié)點的時候是為Cotes公式,公式略
    代數(shù)精度的概念
    如果求積公式對所有m次多項式都精確成立且至少有一個m+1次多項式不成立則稱求積公式有m次代數(shù)精度,梯形公式有有2次代數(shù)精度,Simpson公式有3階代數(shù)精度Cotes有五階代數(shù)精度。
    復化求積公式
    所謂復化求積公式是當一個求積區(qū)間很大的時候我們可以把這個區(qū)間等分成很多分然后對每個小區(qū)間用插值型求積公式理論上來講區(qū)間分的越小越精確誤差越小
  • 復化梯形公式
    T_n(f)=\dfrac{h}{2}[f(x_0)+2\sum\limits^{n-1}_{k=1}f(x_k)]+f(x_n)
  • 復化Simpson公式
    S_n(f)=\sum\limits_{k=0}^{n-1}\dfrac{h}{6}[f(x_k)]+4f(x_{k+\frac{1}{2}})+f(x_{k+1})
  • 其他復化公式略。。。

常微分方程的數(shù)值解法

在常微分方程中我們學習過常系數(shù)線性方程組,變系數(shù)微分方程組,與非線性方程組的求解公式,但是在實際科學研究中往往有很多的問題非常的復雜,我們無法運用常規(guī)的方法求其公式解或者是即便求出來了也及其的不方便計算,因此我們就只能想辦法求其數(shù)值解。
Euler方法求解
Euler方法是求解初值問題的最簡單的數(shù)值方法
為了求數(shù)值解我們需要把區(qū)間[a,b]離散化為步長為hn+1個小區(qū)間
討論關于一階微分方程的初值問題
\begin{cases}y^\prime = f(x,y)\\y(a)=\eta\end{cases}
將方程組一式兩邊積分移項可得:
y(x_{i+1})=y(x_i)+\int_{x_i}^{x_{i+1}}(f(x,y(x))dx
然后運用左矩形公式可得:
y(x_{i+1})=y(x_i)+hf(x_i,y(x_i))+R R 為余項
y(x_{i+1}) \approx y(x_i)+hf(x_i,y(x_i))
則上式成為Euler公式實際上歐拉公式就是把函數(shù)在第i個小區(qū)間上的導數(shù)都用f(x_i,y(x_i))來代替然后運用直線公式求其在節(jié)點的函數(shù)值,顯然這種情況當區(qū)間選取足夠小的時候才會精確
構造更高精度的求解公式梯形公式
將式y(x_{i+1})=y(x_i)+\int_{x_i}^{x_{i+1}}(f(x,y(x))dx左邊運用梯形公式可得y(x_{i+1}) \approx y(x_i)+\dfrac{h}{2}[f(x_i,y(x_i))+f(x_{i+1},y(x_{i+1}))],不難想象如果在一個小區(qū)間上我們多選取幾個點求其斜率值的平均值那么求小區(qū)間內(nèi)求積節(jié)點的數(shù)值解的準確度會更高,梯形公式就想當與用了兩個點的平均斜率做函數(shù)在小區(qū)間上的斜率值,但是在這里我們的y_{i+1}是一個未知值因此我們需要將Euler公式與梯形公式合在一起用,先用Euler公式求得y(x_{i+1})的一個粗糙值,y^{(p)}_{i+1}=y_i+hf(x_i,y_i)然后將其帶入梯形公式
y(x_{i+1}) \approx y(x_i)+\dfrac{h}{2}[f(x_i,y(x_i))+f(x_{i+1},y^{(p)}_{i+1}(x_{i+1}))]
求數(shù)值解就是把連續(xù)的問題,離散化,然后利用遞推公式求值

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容