几种简单的插值方法与实例

简介: 插值方法及MATLAB实例解析

插值方法及MATLAB实例解析

插值:已知有限个已知数据点,求得的插值函数必须过这些点,然后在这个范围内用插值函数求得未知数据点的值。


拟合:已知有限个已知数据点,但拟合函数不用过每一个数据点,只要在这些点的总偏差最小。


下面的几种插值方法不再赘述,可以参考链接,具体的会在程序中注解。


1.分段线性插值

2.样条插值

3.拉格朗日插值多项式

拉格朗日插值的基函数为:

9cbb57423af2088328834cf2bf00584.png

拉格朗日基函数经过每一个已知点。

l i 是n次多项式,满足:

fb2a000ac9981a1aec882e56dd9fe39.png

拉格朗日插值函数:

72f4e14031f073f5797b9b53edcc8c4.png

举个简单的例子:

已知三个点( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x 3 , y 3 ) , x 1 ≠ x 2 ≠ x 3  ,那么拉格朗日插值函数就可以写成:b0e02adc8c9b2506b3e48658c1e53b0.png

不难发现:当x = x 1 , x 2 , x 3  的时候,刚好是已知点对应的函数值,要插值的时候只需将x xx换成该范围内的任意值即可,这下你应该很清楚了。

4. 例题与程序

%插值
clear,clc
x0=[0   3   5   7   9   11   12   13   14  15];       %已知数据点
y0=[0  1.2  1.7  2.0  2.1  2.0  1.8  1.2   1.0  1.6];
x=0:0.1:15;                   %要插值的点 
y1=interp1(x0,y0,x);          %第一种插值法:默认线性插值(分段线性插值)
y2=interp1(x0,y0,x,'spline'); %第二种插值法:三次样条插值
                              %csape(x0,y0,conds)
pp1=csape(x0,y0);             %csape()函数返回给定点(x0,y0)的三次样条插值,此处conds默认为complete
y3=ppval(pp1,x);              %ppval函数给出三次样条插值pp在x处对应的函数值
pp2=csape(x0,y0,'second');   %此处conds为边界为二阶导数,默认值为[0 0]
y4=ppval(pp2,x);
%y3和y4的差别在于conds的选择不同
%拉格朗日插值
syms t;
sum=0;
f=1;
for i=1:10
    for j=1:10
        if j==i
            continue;   %i=j时跳出本次循环
        else
        f=f.*(((t-x0(j))./(x0(i)-x0(j))));    %基函数表达式
        end
    end
    sum=sum+f.*y0(i);    
    f=1;
end
y5=vpa(subs(sum,t,x),6)            %将符号变量替换为x
A=[x',y1',y2',y3',y4',y5'];        %输出5种插值点的函数值
vpa(A,6)                           %显示5位有效数字
%-------------------------------绘图-----------------------------%
subplot(2,2,1)
plot(x0,y0,'+',x,y1,'-')     %绘制原来数据点和分段线性插值的图像
title('Piecewise linear')
subplot(2,2,2)               %用spline插值
plot(x0,y0,'+',x,y2)
title('Spline1')
subplot(2,2,3)               %用csape插值 
plot(x0,y0,'+',x,y3)
title('Spline2-csape')
subplot(2,2,4)               %用拉格朗日插值 
plot(x0,y0,'+',x,y5)
title('Lagrange')
%求x=0处的曲线斜率
dx=diff(x);
dy=diff(y3);
dy_dx=dy./dx;
dy_dx0=dy_dx(1)       
%求x<=13<=15内的最小点
ytemp=y3(131:151);        %步长是0.1
ymin=min(ytemp);          %找到y的最小的y值再找到对应的x值
index=find(y3==ymin);     %find()函数,返回.....的索引
xmin=x(index);
min_point_13_15=[xmin,ymin]   

结果如下:

2eac1849f671975c7f1d1fc67cb2f218_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzc2NDk3NA==,size_16,color_FFFFFF,t_70#pic_center.jpg


相关文章
|
编解码 运维 Serverless
函数计算的使用介绍
函数计算的使用介绍
85 1
|
10月前
|
C语言
函数
函数
51 1
|
7月前
|
弹性计算 Serverless 数据库
函数计算操作
函数计算脱盲体验
117 1
|
9月前
|
Serverless 编解码 运维
函数计算应用
本文介绍函数计算的典型应用场景,包括Web应用、数据ETL处理、AI推理、视频转码等。
192 9
|
8月前
|
算法 Python
`scipy.optimize`模块提供了许多用于优化问题的函数和算法。这些算法可以用于找到函数的最小值、最大值、零点等。
`scipy.optimize`模块提供了许多用于优化问题的函数和算法。这些算法可以用于找到函数的最小值、最大值、零点等。
|
10月前
Excel实例:数组公式和函数
Excel实例:数组公式和函数
定义求x的n次幂的函数,并返回计算结果
定义求x的n次幂的函数,并返回计算结果
|
10月前
|
编解码 人工智能 运维
函数计算应用-2
函数计算应用
97 8
|
10月前
|
JavaScript
可写计算属性
可写计算属性
|
10月前
|
算法
你知道几种乘法的计算方式?
你知道几种乘法的计算方式?
249 0