按部就班
然後用陣列t儲存 t 的多項式的係數,再計算每一項然後累加
精度要求只需要delta(t) < 0.5*10**( - 小數點位數),即可
import numpy as np
# 5.9
xs = [2.4, 2.5, 2.6]
ys = [[ '*' for i in range(len(xs)) ] for j in range(len(xs))]
ys[0] = [0.0025, -0.0484, -0.0968]
# ys 每行就是行序號階的差分
# 差分
def chf(y):
l = len(xs)
for i in range( 1 , l ):
for j in range( 0 , l-i ):
# print("i,j:",i,',',j,)
y[i][j] = y[i-1][j+1] - y[i-1][j]
def jiech(n):
ans = 1
for i in range(1, n+1):
ans *= i
return ans
def cal_t(c):
t[0] = ( c-ys[0][0] ) / ys[1][0]
for i in range(1, len(xs)-1):
temp = ys[i+1][0] / ( jiech(i+1) * ys[1][0] )
t[i] = temp
print(" t :", t)
def cal_t(lim):
yu = 999
t[0] = t[0]
i = 1
while( yu >= lim ):
tsum = t[0]
temp = t[i-1]
for j in range(1, len(t)):
for k in range(1, len(t)):
temp *= (temp - k)
tsum -= temp * t[j]
yu = abs(t[i] - t[i-1])
print(" delta t : ", yu)
i += 1
print(" t : ", t)
# 正插xs,反插ys
def main():
chf(ys)
for i in range(len(ys[0])):
print(ys[i])
print("差分表:\n", np.transpose(ys))
# c = eval(input("輸入c:"))
c = 0
global t,t
t = ['*'] * (len(xs) - 1)
t = [0]
cal_t(c)
cal_t(0.0005)
h = xs[1] - xs[0]
ans = xs[0] + t[-1] * h
print(" 結果 x 約等於 => ", ans)
插值多項式例子
給定函式 ex 在區間 1,1 上的資料表如下 x 101 f x 0.3679 1.0000 2.7182f x 0.3679 1.0000 2.7182 給出 hermite 插值多項式,並計算其誤差。mathematica code create by zzw clear f,f1,a her...
lagrange插值多項式
簡潔版 hanshu input 請輸入函式f x s fprintf 請輸入差值區間最小值 n xmin input fprintf 請輸入差值區間最大值 n xmax input fprintf 請輸入等分份數 n n input fprintf 請輸入自變數x n xin input h xm...
實驗三 牛頓插值多項式
實驗三 牛頓插值多項式 實驗內容 天安門廣場公升旗的時間是日出的時刻,而降旗的時間是日落時分,根據天安門廣場管理委員會的公告,某年10月份公升降旗的時間如下 日期 1 15 22 公升旗 6 09 6 23 6 31 降旗 17 58 17 36 17 26 根據上述資料構造newton插值多項式,...