給定函式 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插值多項式,...