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 個點,利用...