1. 已知函式在下列各點的值為
0.20.4
0.60.8
1.00.98
0.92
0.81
0.64
0.38
用插值法對資料進行擬合,要求給出lagrange插值多項式和newton插值多項式的表示式,並計算插值多項式在點的值。
程式:x=[0.2 0.4 0.6 0.8 1.0];
y=[0.98 0.92 0.81 0.64 0.38];
x0=[0.2 0.28 0.44 0.76 1 1.08];
[f,f0]=lagrange(x,y,x0)
function [f,f0] = lagrange(x,y,x0)
%求已知資料點的lagrange插值多項式f,並計算插值多項式f在資料點x0的函式值f0
syms t;
n = length(x);
f = 0.0;
for i = 1:n
l = y(i);
for j = 1:i-1
l = l*(t-x(j))/(x(i)-x(j));
end;
for j = i+1:n
l = l*(t-x(j))/(x(i)-x(j));
end;
f = f + l;
simplify(f);
if(i==n)
f0 = subs(f,'t',x0);
f = collect(f);
f = vpa(f,6);
endend
結果:>> untitled3
f =- 0.520833*t^4 + 0.833333*t^3 - 1.10417*t^2 + 0.191667*t + 0.98
f0 =
[ 49/50, 60137/62500, 56377/62500, 42497/62500, 19/50, 15017/62500]
牛頓:%y為對應x的值,a為差商表,c為多項式係數,l為多項式
%x為給定節點,y為節點值,x為待求節點
function[y,a,c,l] = newton(x,y,x,m)
n = length(x);
m = length(x);
for t = 1 : m
z = x(t);
a = zeros(n,n);
a(:,1) = y';
s = 0.0; p = 1.0; q1 = 1.0; c1 = 1.0;
for j = 2 : n
for i = j : n
a(i,j) = (a(i,j-1) - a(i-1,j-1))/(x(i)-x(i-j+1));
endq1 = abs(q1*(z-x(j-1)));
c1 = c1 * j;
endc = a(n, n); q1 = abs(q1*(z-x(n)));
for k = (n-1):-1:1
c = conv(c, poly(x(k)));
d = length(c);
c(d) = c(d) + a(k,k);
endy(t) = polyval(c,z);
endl = poly2sym(c);
x=[0.2 0.4 0.6 0.8 1.0];
y=[0.98 0.92 0.81 0.64 0.38];
x0=[0.2 0.28 0.44 0.76 1 1.08];
m=1;
[y,a,c,l]=newton(x,y,x0,m)
結果:y =
0.9800 0.9622 0.9020 0.6800 0.3800 0.2403
a =0.9800 0 0 0 0
0.9200 -0.3000 0 0 0
0.8100 -0.5500 -0.6250 0 0
0.6400 -0.8500 -0.7500 -0.2083 0
0.3800 -1.3000 -1.1250 -0.6250 -0.5208
c =-0.5208 0.8333 -1.1042 0.1917 0.9800
l =- (25*x^4)/48 + (5*x^3)/6 - (53*x^2)/48 + (23*x)/120 + 49/50
2. 在區間上分別取,用兩組等距節點對runge函式作多項式插值(lagrange插值和newton插值均可),要求對每個值,分別畫出插值多項式和函式的曲線。
程式:x=-1:0.2:1;
y=1./(1+25*x.^2);
x0=-1:0.01:1;
[f,f0]=lagrange(x,y,x0)
plot(x0,f0)
結果:f =
- 220.942*t^10 + 494.91*t^8 - 381.434*t^6 + 123.36*t^4 - 16.8552*t^2 + 1.0
3.下列資料點的插值
0.0114
9162536
4964
0.1123
4567
8可以得到平方根函式的近似多項式, 要求用上述9個點作8次插值多項式,並在區間畫出的曲線。
程式:x=[0.01 1 4 9 16 25 36 49 64];
y=[0.1 1 2 3 4 5 6 7 8];
x0=0.01:0.1:64;;
[f,f0]=lagrange(x,y,x0)
plot(x0,f0)
xlim([0 64]);
結果:f =
- 2.73858e-10*t^8 + 5.6069e-8*t^7 - 0.00000453906*t^6 + 0.000186698*t^5 - 0.00418177*t^4 + 0.0510128*t^3 - 0.32628*t^2 + 1.19115*t + 0.0881211
插值法(拉格朗日插值和牛頓插值)
牛頓插值 defnewton interpolation x,y,init sum y 0 temp np.zeros len x len x 將第一行賦值 for i in range 0,len x temp i,0 y i temp sum 1.0 for i in range 1,len x...
拉格朗日插值法與牛頓插值法
double f double xx 利用拉格朗日插值函式 f x sigma x xj xk xj yk k 1,2,3,4,總結 拉格朗日插值法和牛頓插值法可以使得插值函式完美的匹配給定的節點,在一般情況下,拉格朗日插值法就能滿足我們對於給定樣本進行插值的要求,但是當我們給定的節點個數在不斷增多...
拉格朗日插值 貓和老虎 牛頓插值法
牛頓插值的有記憶性是很討喜的,在此之前就要先介紹差商,可以理解為導數差分表示形式。差商有兩個比較好用性質 1.對稱性 可以任意交換節點的次序,例如 2.差商與導數的關係 差商和導數就好像是貓和老虎同屬貓科動物一樣,既然相差無幾總歸是有關係的吧。我們從拉格朗日中值定理中可以知道,會有乙個 中的某個 有...