插值多項式例子

2021-08-11 16:19:18 字數 1867 閱讀 4160

給定函式 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]

= , , };

heri[a_, f_, f1_] := block[,

n = length[a];

l = reverse[

x - subsets[a, ]]/(reverse[subsets[a, ]] - a) //

times @@@ # &;

l2 = l^2;

f (1 - 2 (x - a) (replaceall[#1, #2] & @@@

transpose)) l2 + f1 (x - a) l2 //

tr // expand

]heri[a, f, f1]

執行結果為 f(

827lagrange 插值多項式為 f(

x)=6

−11x+

6x2

其相應的 mathematica **為:

lagr[f_, a_] := block[,

reverse[

x - subsets[a, ]]/(reverse[subsets[a, ]] - a) //

times @@@ # & // # f & // tr // expand]

= import["hermite.txt", "table",

path -> "d:\\baiduyundownload\\我的堅果雲\\mma"][[-2 ;; -1]]

(* 儲存資料檔案位置*)

lagr[f, a]

x

1245

6f(x

)0212

2270

注意:利用多項式插值具有唯一性,從而其lagrange插值和newton插值結果應當一樣,此多項式插值的函式為:f(

x)=40

−79x+

50x2−

12x3+

x4。

對應的mathematica 實現為:

= import["hermite.txt", "table", 

path -> notebookdirectory][[9 ;; 10, 2 ;; -1]];

newt[a_, f_] := block[,

t = first /@

foldlist[differences[#1]/differences[a, 1, #2] &, f, range[n - 1]];

first[t] + rest[t] delete[foldlist[times, 1, x - a], , }] //

tr // expand]

newt[a, f]

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...

插值多項式 簡單例子 BIT數值分析5 9

按部就班 然後用陣列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...

實驗三 牛頓插值多項式

實驗三 牛頓插值多項式 實驗內容 天安門廣場公升旗的時間是日出的時刻,而降旗的時間是日落時分,根據天安門廣場管理委員會的公告,某年10月份公升降旗的時間如下 日期 1 15 22 公升旗 6 09 6 23 6 31 降旗 17 58 17 36 17 26 根據上述資料構造newton插值多項式,...