數值計算拉格朗日一維插值的求解

2021-10-14 15:25:20 字數 2913 閱讀 2291

matlab計算浮點數是有誤差的

p1=[0 1];

theta=logspace(-20,5,1000); %這裡是取對數刻度,取1000個數

p2=[theta theta+1];

y=2;

xex=1;%實際上y=2和p1,p2點組成的直線相交點的橫座標是1

xnum=theta./(1+theta-1);%這個是用matlab算出來的這兩條線交點的橫座標

x=abs(xex-xnum);

x2=2*10^(-16)./((2*10^(-16)+theta));%matlab機器雙精度浮點數e=2x10^-16

x3=abs(-2*10^(-16)./((theta-2*10^(-16))));

loglog(theta,x,'b'),hold on%畫圖,雙對數刻度圖

loglog(theta,x2,'g:'),hold on

loglog(theta,x3,'r--')

grid on

拉格朗日插值法的應用:

先求出基本多項式,再通過插值方法求出p的值;基本多項式的公式看課件上給的

function wert_basis=lagrangebasis(x,n,i,x_node)%x是要求的值,x_node是給的點

for i=1:i

s=1;

%y=[1 1];

for j=1:n+1 %n=length(x_node)-1

if j~=i

s=s*(x-x_node(j))/(x_node(i)-x_node(j));%累乘

% 為什麼要用s代替y,因為s=乙個值,這個變數不需要宣告,但是s=s*s時第乙個s不宣告系統無法識別第乙個s。

% y(j)=y(j)*(x-x_node(k))/(x_node(j)-x_node(k));

endend

wert_basis(j)=s;

end

求拉格朗日插值

function [y] = lagrangepolynom(x,n,x_node,y_node)

lp=0

for i=1:n+1

bs=1

for j=1:n+1

if not(j==i)

bs=bs*(x-x_node(j))./(x_node(i)-x_node(j));

endend

lp=lp+y_node(i)*bs %累加

endy=lp

end%還可以呼叫前面的求基本多項式的函式求

function [y1] = lagrangepolynom1(x,n,x_node,y_node)

l=0for i=1:n+1

y=lagrangebasis(x,n,i,x_node)

l=l+y*y_node(i)

endy1=l

end

對拉格朗日插值多項式求導數

首先是對基本多項式求導,這個式子要從內往外看,這個公式看課件裡面給了,寫的**也是

function dl = lagrangederivbasis(x,n,i,x_node)

for i=1:i

dbs=0

for m=1:n+1

if m~=i

p=1;

for k=1:n+1

if k~=i && k~=m

p= p*(x-x_node(k))/(x_node(i)-x_node(k));

endend

dbs=dbs+1/(x_node(i)-x_node(m))*p;

endend

dl=dbs;

endend

%按照圖裡面的公式,要有i,m,k都是從1取到n+1,其實i和n的值給乙個就夠了,i=1:n+1

然後再是整個多項式的導數,相乘然後累加

function [dy] = lagrangederivpolynom(x,n,x_node,y_node)

dl=0

for i=1:n+1

y=lagrangederivbasis(x,n,i,x_node)

dl=dl+y*y_node(i)

enddy=dl

end

畫圖的話,要取足夠的的點

clear;

x=0:0.005:4;x3=[0 1 2 3 4];y3=(x3./(1+x3)).^5;dy=5*(x.^4)./((1+x).^6);y=(x./(1+x)).^5;

for a=1:length(x)

wert_poly2(a)=lagrangepolynom(x(a),80,x3,y3,lagrangebasis(x(a), 4, 5, x3));

wert_dpoly2(a) = lagrangederivpolynom(x(a),80,x3,y3,lagrangederivbasis(x(a), 4, 5, x3));

endscatter(x3,y3,'filled','k'),hold on%在向量x和y指定的位置建立乙個包含圓形的散點圖,填充圓形,指定顏色

plot(x,wert_poly2,'b'),hold on

plot(x,wert_dpoly2),hold on

plot(x,y),hold on

plot(x,dy),hold on

axis([0 4 -0.05 0.35])

legend('stützstellen','polynom p4','earst ableitung polynom p4','exakt function f(x)','exakt function df(x)/dx','location','northwest')

拉格朗日插值

拉格朗日插值基函式 li x x x 0 x xi 1 x xi 1 x x n x i x0 xi xi 1 xi xi 1 xi xn 拉格朗日差值函式 ln x i 0 nyil i x 其中,x為缺失值對應的下表序號,ln x 為缺失值的插值結果,xi 為缺失值yi 的下表序號。對全部缺失值...

拉格朗日插值

function s larg1 x,y,xi m length x 求出插值節點向量長度 n length y if m n error 向量x與y的長度必須一致 這裡肯定一致,只是為了消除直接選取x,y資料的時候出錯而設定的 end s 0 for i 1 n z ones 1,length x...

拉格朗日插值

存在性和唯一性的證明以後再補。拉格朗日插值,emmmm,名字挺高階的 joy 它有什麼應用呢?我們在fft中講到過 設 n 1 次多項式為 y sum a i x i 有乙個顯然的結論 如果給定 n 個互不相同的點 x,y 則該 n 1 次多項式被唯一確定 那麼如果給定了這互不相同的 n 個點,利用...