1.已知下列數值表,求符合表值的插值多項式,並給出插值餘項的表達式。
xi |
0 |
1 |
2 |
yi |
2 |
1 |
2 |
yi′ |
−2 |
−1 |
|
yi′′ |
−10 |
|
|
|
|
|
|
解:採用牛頓插值:
P2(x)=f(x0)+f[x0,x1](x−x0)+f[x0,x1,x2](x−x0)(x−x1)
=x2−2x+2
由題目條件可得符合該表的插值多項式可設爲:
P5(x)=P2(x)+(ax2+bx+c)x(x−1)(x−2)
代入以下條件,有:
KaTeX parse error: Unknown column alignment: 1 at position 28: … \begin{array}{1̲}
P…
我們可以得到:
P5(x)=4x5−15x4+17x3−5x2−2x+2
R(f)=6!f(6)(ξ)x3(x−1)2(x−2),式中ξ位於x0,x1x2和x所界定的範圍內
解:
由給定條件,可確定不超過三次的插值多項式,其形式爲:
P(x)=f(x0)+f[x0,x1](x−x0)+A(x−x0)(x−x1),代入P′(x1)=f′(x1),得
A=x0−x1f′(x0)−f[x0,x1]
代入P(x),得:
P(x)=−(x1−x0)2(x−x1)(x−2x0+x1)f(x0)+x0−x1(x−x0)(x−x1)f′(x0)+(x1−x0)2(x−x0)2f(x1)
爲了求出餘項R(x)=f(x)−P(x),設R(x)=f(x)−P(x)=k(x)(x−x0)2(x−x1),其中k(x)爲待定常數
構造φ(t)=f(t)−P(t)−k(x)(t−x0)2(t−x1),∴φ(t)在(x0,x1)內有四個零點,根據羅爾定理結論,可得φ(3)(t)在(x0,x1)內至少有一個零點ξ,使得:
φ(3)(ξ)=f(3)(ξ)−3!k(x)=0
∴k(x)=6f(3)(ξ),R(x)=61(x−x0)2(x−x1)f(3)(ξ),x0<ξ<x1,證畢
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-z4NG02Jk-1587562372068)(https://s1.ax1x.com/2020/04/21/J8zKTU.png)]
解:
法一:構造正交多項式φ0(x),φ1(x),φ2(x)求解
φ0(x)=1a0=(φ0,φ0)(f,φ0)=14.5a1=(φ0,φ0)(xφ0,φ0)=2.5φ1(x)=(x−a1)φ0(x)=x−2.5β1=(φ1(x),φ1(x))(φ1(x),φ1(x))φ2(x)=(x−a1)φ1(x)−β1φ0(x)=x2−5x+5a2=(φ1,φ1)(xφ1,φ1)=0.5
∴y=a0φ0(x)+a1φ1(x)+a2φ2(x)=21x2+1049x−23
法二:取ϕ=span(1,x,x2),求解線性方程組,也可得到相同答案,不再贅述
4.求f(x)=x4+3x3−1在區間[0,1]上的三次最佳一致逼近多項式
解:
做變換;x=2t+1,有:f(t)=161(1+t)4+83(t+1)3−1
由首項爲1的切比雪夫多項式性質可得:
f(x)−P3(x)=161⋅81T4(t)
∴P3(x)=f(x)−1281T4(t)=5x3−45x2+41x−128129,x∈[0,1]
解:
由代數精度定義可知,分別令f(x)=1,x−x0,(x−x0)2,(x−x0)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(x−x0)(x−x0)4dx=h2(0+Bh4)+h3(0+4h3D)
所以該數值積分具有三次代數精度,餘項爲:
R(f)=∫x0x14!f(4)(ξ)(x−x0)3(x−x1)2=f(4)(η)4!⋅60h2=1440h2f(4)(η),x∈[x0,x1],ξ∈(x0,x1),η∈(x0,x1)
6.
證明:
對於插值基函數,有li(xj)=δij
∴∫abρ(x)lk2(x)dx=∑i=0nAilk2(xi)=Ak
∑k=0n∫abρ(x)lk2(x)dx=∑k=0nAk=∫abρ(x)dx
7.用龍貝格方法計算∫0.30.8x3+xsinx,使其誤差不超過0.1∗10−4:
解:編寫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 = [(self.integ_uplimit - self.integ_dowlimit) / (2 ** i) for i in range(0,5)]
print(hm)
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_seq1[i] = temp
print('T序列:'+ str(list(t_seq1)))
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 = [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 = [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())
運行結果:
、
最終我們得到,∫0.30.8xx3+sinx=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$