插值方法

Posted 树的种子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了插值方法相关的知识,希望对你有一定的参考价值。

插值方法有很多,对应到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));

 

以上是关于插值方法的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 这个简单的代码片段显示了如何使用有符号整数在C中完成插值。 for()循环确定要插入的范围

如何在片段着色器中找到 4 个顶点之间的插值位置?

如何使用插值来设置属性选择器?

数值计算方法 Chapter1. 插值

Jade变量插值 - 如果属性未定义,则为默认值?

数值计算方法实验之按照按三弯矩方程及追赶法的三次样条插值 (MATLAB 代码)