Typesetting math: 100%

插值简述

①代数插值(Algebraic interpolation)

代数插值即多项式插值,所求插值函数为:

pn(x)=a0+a1x+a2x2+.......+anxn

显然,用待定系数法即可推出n+1

②泰勒差值(Taylor interpolation)

泰勒展开式:

pn(x)f(x0)+f(x0)(xx0)+f(x0)2!(xx0)2+......+f(n)(x0)n!(xx0)n

余项为:

R(n)=f(n+1)(ϵ)(n+1)!(xx0)n+1

显然,泰勒插值即为0-k阶的导数

但是并非所有多项式均可n阶可导,局限性很大

③拉格朗日差值(Lagrange interpolation )

Q:找出一个n次多项式pn(x),使得pn(xi)=yi(i=1,2,...,n)

基函数

先从二阶多项式研究。

已知x0,x1,y0,y1,求pn(x)=a0+a1x,使得pn(x)过这两个点

显然可求得:

pn(x)=y0+y1y0x1x0(xx0)=xx1x0x1y0+xx0x1x0y1

xx1x0x1xx0x1x0即为p(x)的两个基函数

推广至n

pn(x)均可化简为以下形式:

pn(x)=l0(x)y0+l1(x)y1+......+ln(x)yn

要使得pn(x0)=y0

则:

l0(x0)=1,l1(xi)=0(2in)

故可得基函数表:

x x0 x1 ... xn
l0(x) 1 0 ... 0
l1(x) 0 1 ... 0
M M M M M
ln(x) 0 0 ... 1

从而,基函数一般形式为:

l0(x)=(xx1)(xx2)...(xxn)(x0x1)(x0x2)...(x0xn)=1jnxxjx0xj

l1(x)=(xx0)(xx2)...(xxn)(x1x0)(x1x2)...(x1xn)=0jn,j1xxjx1xj

...

ln(x)=(xx1)(xx2)...(xxn1)(xnx0)(xnx2)...(xnxn1)=1jn1xxjxnxj

即:

lk(x)=j=0,jknxxjxkxj

pn(x)=k=0nlk(x)yk

余项为:

Rn(x)=f(n+1)(ϵ)(n+1)!i=0n(xxi)

code:

function y=lagr1(x0,y0,x)
n=length(x0); m=length(x);
for i=1:m
   z=x(i);
   s=0.0;
   for k=1:n
      p=1.0;
      for j=1:n
         if j~=k
            p=p*(z-x0(j))/(x0(k)-x0(j));
         end
      end
      s=p*y0(k)+s;
   end
   y(i)=s;
end

posted @   SxtoxA  阅读(257)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
12 13
点击右上角即可分享
微信分享提示