插值方法

插值方法有很多,对应到MATLAB里面也有很多函数,和参数选择。

对应的原理分析,嘻嘻,我毕竟不是数学专业的学生,有时间能弄懂就弄懂吧,^_^

分段线性插值,拉格朗如插值,样条插值(B样条插值好熟悉的名字啊,图形学里面有哦)。

MATLAB实现:

插值函数

语法:y = interp1(x0,y0,x,'method');

参数method方法:

  'nearest' :最近项插值

  'linear' :线性插值

  'spline' :立方样条插值(三次样条插值)

  'cubic'  :立方插值

三次样条插值

栗子:机床加工(P88)

给出x,y数据,位于机翼断面的下轮廓线。完成插值操作。

线性插值(linear)

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);          % 线性插值

三次样条插值(spline)

y2 = interp1(x0,y0,x,'spline'); % 立方样条插值

对于三次样条插值,提倡使用函数csape,返回函数是pp类型。

默认的边界条件,即拉格朗日条件。

pp1 = csape(x0,y0);
y3 = fnval(pp1,x);
plot(x0,y0,'+',x,y3)

参数'second'表示,边界为二阶导数。

pp2 = csape(x0,y0,'second');
y4 = fnval(pp2,x);

栗子:给定曲线v(t)上的四个点,三次样条插值求位移:

x0 = 0.15:0.01:0.18;
y0 = [3.5 1.5 2.5 2.8];
pp = csape(x0,y0);
%format long g
XiShu = pp.coefs;
s = quadl( @ (t)ppval(pp,t),0.15,0.18);

求出三次样条插值系数,不需要求出那个对应的速度值,也就是不需要使用fnval函数,只需要求积分。

s =

0.0686

二维插值

二维插值,还是这些函数,只不过是加了一维。分为两类:1、插值节点为网格节点   2、插值节点为离散节点。

clear,clc
x = 100:100:500;
y = 100:100:400;

z = [636 697 624 478 450
    698 712 630 478 420
    680 674 598 412 400
    662 626 552 334 310];

pp = csape({x,y},z');
xi = 100:10:500;
yi = 100:10:400;

cz = fnval(pp,{xi,yi});
mesh(xi,yi,cz');

离散点:griddate函数。

clc,clear
x = [129 140 103.5 88 185.5 195 105 157 107.5 77 81 162 162 117.5];
y = [7.5 141.5 23 147 22.5 137.5 85.5 -6.5 -81 3 56.5 -66.5 84 -33.5];
z = -[4 8 6 8 6 8 8 9 9 8 8 9 4 9];
xmm = minmax(x);
ymm = minmax(y);
xi = xmm(1):xmm(2);
yi = ymm(1):ymm(2);
zi1 = griddata(x,y,z,xi,yi','cubic');
zi2 = griddata(x,y,z,xi,yi','nearest');
% mesh(xi,yi,zi1);
% zi = zi1;
% zi(isnan(zi1)) = zi2(isnan(zi1));

原文地址:https://www.cnblogs.com/TreeDream/p/8243033.html