matlab runge现象,多项式插值与Runge现象

matlab中的插值问题

今天写数值分析作业,仔细的研究了一下matlab中的插值问题,现总结如下:

interp1 ,

是一维数据的插值函数,基本使用方法如下

yi =

interp1(x,Y,xi,method)

注意,这里常用的method有linear,spline。其中linear(线性)是默认的方法。spline应该和使用spline是一样的。

spline,三次样条插值。注意它默认使用的是not-a-knot边界条件,也就是第一个点的三次导数和第二点的三次导数一样;最后一个点的三次导数和倒数第一个点一样。当y=[df1,y,df2]时,表示第一点和第二个点的一阶导数分别为df1,df2。

x = -4:4;

y = [0 .15 1.12 2.36 2.36 1.46 .49 .06 0];

cs = spline(x,[0 y 0]);

xx = linspace(-4,4,101);

plot(x,y,'o',xx,ppval(cs,xx),'-');

x =

pi*[0:.5:2]; y = [0 1 0 -1 0 1 0; 1 0 1 0 -1 0 1];

pp = spline(x,y);

yy = ppval(pp, linspace(0,2*pi,101));

(以上例子参考matlab的help)

上例中pp是一种多项式的表达方式,通过ppval就能求解出相应的值。

csape,是计算在各种边界条件下的三次样条插值。

pp = csape(x,y,conds)

其中conds主要有以下的选项variational(自然边界条件,首末点二阶导数均为0),second(指定首末点的二阶导数),periodic(周期性边界条件,首末点的0~2阶导数相等),complete(给定导数情况,默认)

function pp = csape(x,y,conds,valconds)

%pp=csape(x,y,'变界类型','边界值'),生成各种边界条件的三次样条插值. 其中,(x,y)为数据向量

%边界类型可为:'complete',给定边界一阶导数.

% 'not-a-knot',非扭结条件,不用给边界值.

% 'periodic',周期性边界条件,不用给边界值.

% 'second',给定边界二阶导数. % 'variational',自然样条(边界二阶导数为0)

% .

%例 考虑数据

% x | 1 2 4 5

% ---|-------------

% y | 1 3 4 2

%边界条件S''(1)=2.5,S''(5)=-3,

% x=[1 2 4 5];y=[1 3 4 2];

% pp=csape(x,y,'second',[2.5,-3]);pp.coefs

% xi=1:0.1:5;yi=ppval(pp,xi);

% plot(x,y,'o',xi,yi);

pp0 =

csape(x,[1,zeros(1,length(y)),0],[1,0]);

pp = csape( x, [1 sin(x) 0],

[1 2] ) %左边的点一阶导数为1,右边的点二阶导数为0

splinetool是一个图形化的插值工具

lagrange插值,由于lagrange插值可能不收敛,所以工程中很少有人用这种插值。matlab中没有专门的lagrange插值函数。但我们可以自己编一个,如下:

%lagrange插值子函数

function y=lagrange(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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值