一维插值

插值

拉格朗日方法

代码如下:

function y0=Lagrange(x,y,x0)
n=length(x);
l=ones(1,n);
y0=0;
for j=1:n
    for k=1:n
        if j~=k
           l(j)=l(j)*(x0-x(k))/(x(j)-x(k));
        end
    end
end
for i=1:n
    y0=y0+l(i)*y(i);
end

x,y为数组,用于拟合
y0为插值函数在x0点== (某一点)==的值

其他方法

yi = interp1(x,y,xi,‘method’)

⚠️ method要用单引号‘’框好

具体的method有:

  1. 最邻近插值 neareat
  2. 下一个邻点插值 next
  3. 前一个邻点插值 previous
  4. 线性插值 linear
  5. 三次样条插值 spline
  6. 保型分段三次插值 pchip
  7. 立方插值 cubic
  8. 在Matlab5中使用的三次卷积 cubic

默认为分段线性插值 linear

示例:
1、设f(x)=1/ (1+x2)。选取f(x)的部分点,即xdata= -5:5; ydata=f(xdata)。请使用拉格朗日插值方法、分段线性插值方法、三次样条插值方法,求出插值函数在x= -5:0.1:5处的函数值,并通过图像与f(x)比较。
代码:

xdata = -5:5;
ydata = 1./(1+xdata.^2);
x = -5:0.1:5;

y1 = interp1(xdata,ydata,x,'linear');%分段线性插值
y2 = interp1(xdata,ydata,x,'spline');%三次样条插值

y3=[];%建立空矩阵
for i=1:100%通过循环得到每一个拟合点处的拉格朗日方法求得的插值
    y3(i) = Lagrange(xdata,ydata,x(i));
    y3 = [y3,y3(i)];%并将其加入到空矩阵中
end

plot(xdata,ydata,'r*')%原始
hold on
plot(x,y1,'g-')%线性
hold on 
plot(x,y2,'b-')%样条
hold on
plot(x,y3,'y+')%拉格朗日
legend('原始曲线','分段线性插值','三次样条插值','拉格朗日');

所得图像:
一维插值_第1张图片

你可能感兴趣的:(Matlab,matlab)