數值分析常見習題解答

11.已知下列數值表,求符合表值的插值多項式,並給出插值餘項的表達式。

xix_i 00 11 22
yiy_i 22 11 22
yiy_i^{'} 2-2 1-1
yiy_i^{''} 10-10

解:採用牛頓插值:

P2(x)=f(x0)+f[x0,x1](xx0)+f[x0,x1,x2](xx0)(xx1)P_2(x)=f(x_0)+f[x_0,x_1](x-x_0)+f[x_0,x_1,x_2](x-x_0)(x-x_1)

=x22x+2=x^2-2x+2

由題目條件可得符合該表的插值多項式可設爲:

P5(x)=P2(x)+(ax2+bx+c)x(x1)(x2)P_5(x)=P_2(x)+(ax^2+bx+c)x(x-1)(x-2)

代入以下條件,有:
KaTeX parse error: Unknown column alignment: 1 at position 28: … \begin{array}{1̲} P…

我們可以得到:

P5(x)=4x515x4+17x35x22x+2P_5(x)=4x^5-15x^4+17x^3-5x^2-2x+2

R(f)=f(6)(ξ)6!x3(x1)2(x2),ξx0,x1x2xR(f)=\frac{f^{(6)}(\xi)}{6!}x^3(x-1)^2(x-2),式中\xi位於x_0,x_1x_2和x所界定的範圍內

JNIPmD.png

解:

由給定條件,可確定不超過三次的插值多項式,其形式爲:

P(x)=f(x0)+f[x0,x1](xx0)+A(xx0)(xx1),P(x1)=f(x1),P(x)=f(x_0)+f[x_0,x_1](x-x_0)+A(x-x_0)(x-x_1),代入P^{'}(x_1)=f^{'}(x_1),得

A=f(x0)f[x0,x1]x0x1A=\frac{f^{'}(x_0)-f[x_0,x_1]}{x_0-x_1}

P(x):代入P_(x),得:

P(x)=(xx1)(x2x0+x1)(x1x0)2f(x0)+(xx0)(xx1)x0x1f(x0)+(xx0)2(x1x0)2f(x1)P_(x)=-\frac{(x-x_1)(x-2x_0+x_1)}{(x_1-x_0)^2}f(x_0)+\frac{(x-x_0)(x-x_1)}{x_0-x_1}f^{'}(x_0)+\frac{(x-x_0)^2}{(x_1-x_0)^2}f(x_1)

R(x)=f(x)P(x),R(x)=f(x)P(x)=k(x)(xx0)2(xx1),k(x)爲了求出餘項R(x)=f(x)-P(x),設R(x)=f(x)-P(x)=k(x)(x-x_0)^2(x-x_1),其中k(x)爲待定常數

φ(t)=f(t)P(t)k(x)(tx0)2(tx1),φ(t)(x0,x1)φ(3)(t)(x0,x1)ξ,使構造 \varphi(t)=f(t)-P(t)-k(x)(t-x_0)^2(t-x_1),\therefore\varphi(t)在(x_0,x_1)內有四個零點,根據羅爾定理結論,可得\\\varphi^{(3)}(t)在(x_0,x_1)內至少有一個零點\xi,使得:

φ(3)(ξ)=f(3)(ξ)3!k(x)=0\varphi^{(3)}(\xi)=f^{(3)}(\xi)-3!k(x)=0

k(x)=f(3)(ξ)6,R(x)=16(xx0)2(xx1)f(3)(ξ),x0<ξ<x1,\therefore k(x)=\frac{f^{(3)}(\xi)}{6},R(x)=\frac{1}{6}(x-x_0)^2(x-x_1)f^{(3)}(\xi),x_0<\xi<x_1,證畢

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-z4NG02Jk-1587562372068)(https://s1.ax1x.com/2020/04/21/J8zKTU.png)]

解:

φ0(x),φ1(x),φ2(x)法一:構造正交多項式\varphi_0(x),\varphi_1(x),\varphi_2(x)求解
φ0(x)=1a0=(f,φ0)(φ0,φ0)=14.5a1=(xφ0,φ0)(φ0,φ0)=2.5φ1(x)=(xa1)φ0(x)=x2.5β1=(φ1(x),φ1(x))(φ1(x),φ1(x))φ2(x)=(xa1)φ1(x)β1φ0(x)=x25x+5a2=(xφ1,φ1)(φ1,φ1)=0.5 \qquad \varphi_0(x)=1\\ \qquad a_0=\frac{(f,\varphi_0)}{(\varphi_0,\varphi_0)}=14.5\\ \qquad a_1=\frac{(x\varphi_0,\varphi_0)}{(\varphi_0,\varphi_0)}=2.5\\ \qquad\varphi_1(x)=(x-a_1)\varphi_0(x)\\\qquad=x-2.5 \\ \quad\beta_1=\frac{(\varphi_1(x),\varphi_1(x))}{(\varphi_1(x),\varphi_1(x))}\\ \qquad\varphi_2(x)=(x-a_1)\varphi_1(x)-\beta_1\varphi_0(x)\\=x^2-5x+5\\ a_2=\frac{(x\varphi_1,\varphi_1)}{(\varphi_1,\varphi_1)}=0.5\\

y=a0φ0(x)+a1φ1(x)+a2φ2(x)=12x2+4910x32\therefore y=a_0\varphi_0(x)+a_1\varphi_1(x)+a_2\varphi_2(x)=\frac{1}{2}x^2+\frac{49}{10}x-\frac{3}{2}

ϕ=span(1,x,x2),法二:取\phi=span(1,x,x^2),求解線性方程組,也可得到相同答案,不再贅述

4.f(x)=x4+3x31[0,1]4.求f(x)=x^4+3x^3-1在區間[0,1]上的三次最佳一致逼近多項式

:解:

;x=t+12,:f(t)=116(1+t)4+38(t+1)31做變換;x=\frac{t+1}{2},有:f(t)=\frac{1}{16}(1+t)^4+\frac{3}{8}(t+1)^3-1

1由首項爲1的切比雪夫多項式性質可得:

f(x)P3(x)=11618T4(t)f(x)-P_3(x)=\frac{1}{16}\cdot\frac{1}{8}T_4(t)

P3(x)=f(x)1128T4(t)=5x354x2+14x129128,x[0,1]\therefore P_3(x)=f(x)-\frac{1}{128}T_4(t)=5x^3-\frac{5}{4}x^2+\frac{1}{4}x-\frac{129}{128},x\in[0,1]

JNFrGt.png

:解:

f(x)=1,xx0,(xx0)2,(xx0)3,由代數精度定義可知,分別令f(x)=1,x-x_0,(x-x_0)^2,(x-x_0)^3,得:
KaTeX parse error: Unknown column alignment: 1 at position 28: … \begin{array}{1̲} A…

解得:
KaTeX parse error: Unknown column alignment: 1 at position 28: … \begin{array}{1̲} A…

同時有:

x0x1(xx0)(xx0)4dxh2(0+Bh4)+h3(0+4h3D)\int_{x_0}^{x_1}(x-x_0)(x-x_0)^4dx\neq h ^2(0+Bh^4)+h^3(0+4h^3D)

:所以該數值積分具有三次代數精度,餘項爲:

R(f)=x0x1f(4)(ξ)4!(xx0)3(xx1)2=f(4)(η)h24!60=h21440f(4)(η),x[x0,x1],ξ(x0,x1),η(x0,x1)R(f)=\int_{x_0}^{x_1}\frac{f^{(4)}(\xi)}{4!}(x-x_0)^3(x-x_1)^2=f^{(4)}(\eta)\frac{h^2}{4!\cdot60}=\frac{h^2}{1440}f^{(4)}(\eta),x\in[x_0,x_1],\xi\in(x_0,x_1),\eta\in(x_0,x_1)

6.6.

J8OH81.png

證明:

li(xj)=δij對於插值基函數,有l_i(x_j)=\delta_{ij}

abρ(x)lk2(x)dx=i=0nAilk2(xi)=Ak\therefore\int_a^b \rho(x)l_k^2(x)dx=\sum_{i=0}^nA_il_k^2(x_i)=A_k

k=0nabρ(x)lk2(x)dx=k=0nAk=abρ(x)dx\sum_{k=0}^n\int_a^b \rho(x)l_k^2(x)dx=\sum_{k=0}^nA_k=\int_a^b\rho(x)dx

70.30.8x3+sinxx,使0.1104:7.用龍貝格方法計算 \int_{0.3}^{0.8}x^3+\frac{sinx}{x}, 使其誤差不超過 0.1*10^{-4}:

Python解:編寫Python程序:


import math

'''
給定一個函數,如:f(x)= x^(3/2),和積分上下限a,b,用機械求積Romberg公式求積分。

'''
import numpy as np


def func(x):
    return x**2+math.sin(x)/x

class Romberg:
    def __init__(self, integ_dowlimit, integ_uplimit):
        '''
        初始化積分上限integ_uplimit和積分下限integ_dowlimit
        輸入一個函數,輸出函數在積分上下限的積分

        '''
        self.integ_uplimit = integ_uplimit
        self.integ_dowlimit = integ_dowlimit



    def calc(self):
        '''
        計算Richardson外推算法的四個序列

        '''
        t_seq1 = np.zeros(5, 'f')
        s_seq2 = np.zeros(4, 'f')
        c_seq3 = np.zeros(3, 'f')
        r_seq4 = np.zeros(2, 'f')
        # 循環生成hm間距序列
        hm = [(self.integ_uplimit - self.integ_dowlimit) / (2 ** i) for i in range(0,5)]
        print(hm)
        # 循環生成t_seq1
        fa = func(self.integ_dowlimit)
        fb = func(self.integ_uplimit)

        t0 = (1 / 2) * (self.integ_uplimit - self.integ_dowlimit) * (fa+fb)
        t_seq1[0] = t0

        for i in range(1, 5):
            sum = 0
            # 多出來的點的累加和
            for each in range(1, 2**i,2):
                sum =sum + hm[i]*func( self.integ_dowlimit+each * hm[i])#計算兩項值
            temp1 = 1 / 2 * t_seq1[i - 1]
            temp2 =sum
            temp =  temp1 + temp2
            # 求t_seql的1-4位
            t_seq1[i] = temp
        print('T序列:'+ str(list(t_seq1)))
        # 循環生成s_seq2
        s_seq2 = [round((4 * t_seq1[i + 1] - t_seq1[i]) / 3,6) for i in range(0, 4)]
        print('S序列:' + str(list(s_seq2)))
        # 循環生成c_seq3
        c_seq3 = [round((4 ** 2 * s_seq2[i + 1] - s_seq2[i]) / (4 ** 2 - 1),6) for i in range(0, 3)]
        print('C序列:' + str(list(c_seq3)))
        # 循環生成r_seq4
        r_seq4 = [round((4 ** 3 * c_seq3[i + 1] - c_seq3[i]) / (4 ** 3 - 1),6) for i in range(0, 2)]
        print('R序列:' + str(list(r_seq4)))
        r_seq5 = [round((4 ** 4 * r_seq4[i + 1] - r_seq4[i]) / (4 ** 4 - 1),6) for i in range(0, 1)]
        print('A序列:' + str(list(r_seq5)))
        return 'end'


rom = Romberg(0.3, 0.8)
print(rom.calc())

運行結果:

J37wp8.png

0.30.8x3+sinxx=0.635258最終我們得到,\int_{0.3}^{0.8}\frac{x^3+sinx}{x}=0.635258

  • 1),6) for i in range(0, 1)]
    print(‘A序列:’ + str(list(r_seq5)))
    return ‘end’

rom = Romberg(0.3, 0.8)
print(rom.calc())


$運行結果:$

[外鏈圖片轉存中...(img-l6ySF4Lu-1587562372076)]、

$最終我們得到,\int_{0.3}^{0.8}\frac{x^3+sinx}{x}=0.635258$



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章