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

简介: 插值方法及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


相关文章
|
7月前
|
机器学习/深度学习 计算机视觉 Python
`GridSearchCV` 是一种穷举搜索方法,它会对指定的参数网格中的每一个参数组合进行交叉验证,并返回最优的参数组合。
`GridSearchCV` 是一种穷举搜索方法,它会对指定的参数网格中的每一个参数组合进行交叉验证,并返回最优的参数组合。
|
8月前
|
计算机视觉
图像处理之图像内插值与外插值
图像处理之图像内插值与外插值
52 0
|
9月前
|
资源调度 Serverless 计算机视觉
高斯函数 Gaussian Function
**高斯函数,或称正态分布,以数学家高斯命名,具有钟形曲线特征。关键参数包括期望值μ(决定分布中心)和标准差σ(影响分布的宽度)。当μ=0且σ²=1时,分布为标准正态分布。高斯函数广泛应用于统计学、信号处理和图像处理,如高斯滤波器用于图像模糊。其概率密度函数为e^(-x²/2σ²),积分结果为误差函数。在编程中,高斯函数常用于创建二维权重矩阵进行图像的加权平均,实现模糊效果。
476 1
|
9月前
|
数据可视化
R语言进行数据结构化转换:Box-Cox变换、“凸规则”变换方法
R语言进行数据结构化转换:Box-Cox变换、“凸规则”变换方法
|
9月前
|
Python
Python函数之计算规则图形的面积
Python函数之计算规则图形的面积
|
数据挖掘
插值应用案例1
插值应用案例1
109 0
|
算法
插值与拟合的区别以及如何选取
插值与拟合的区别以及如何选取
433 0
|
算法
ENVI_IDL:使用反距离权重法选取最近n个点插值(底层实现)并输出为Geotiff格式(效果等价于Arcgis中反距离权重插值)
ENVI_IDL:使用反距离权重法选取最近n个点插值(底层实现)并输出为Geotiff格式(效果等价于Arcgis中反距离权重插值)
351 0