MATLAB 学习心得(5) 插值

插值的定义:

在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点。

插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值。

插值:用来填充图像变换时像素之间的空隙。

一、一维插值 interp1

y = interp1(x,y,xi,'method') xi为变量范围,method为插值形式:不填为默认插值,nearest为临近点插值,spine为三次样条插值,pchine为分段三次hermite插值,V5cubic为MATLAB5中多项式的插值。

x=0:0.2:2;
y=(x.^2-3*x+5).*exp(-3*x).*sin(x);
xi=0:0.03:2;                            %要插值的数据
yi_nearest=interp1(x,y,xi,'nearest');   %临近点插值
yi_linear=interp1(x,y,xi);              %默认为线性插值
yi_spine=interp1(x,y,xi,'spine');       %三次样条插值
yi_pchip=interp1(x,y,xi,'pchip');       %分段三次Hermite插值
yi_v5cubic=interp1(x,y,xi,'v5cubic');   %MATLAB5中三次多项式插值
figure;                                 %画图显示
hold on;
subplot(231);
plot(x,y,'ro');
title('已知数据点');
subplot(232);
plot(x,y,'ro',xi,yi_nearest,'b-');
title('临近点插值');
subplot(233);
plot(x,y,'ro',xi,yi_linear,'b-');
title('线性插值');
subplot(234);
plot(x,y,'ro',xi,yi_spine,'b-');
title('三次样条插值');
subplot(235);
plot(x,y,'ro',xi,yi_pchip,'b-');
title('分段三次Hermite插值');
subplot(236);
plot(x,y,'ro',xi,yi_v5cubic,'b-');
title('MATLAB5中三次多项式插值');

二、二维插值 interp2

y = interp2(x,y,z,xi,yi,'method') xi为变量范围,yi为变量范围。method为插值形式:不填为默认插值,nearest为临近点插值,spine为三次样条插值,pchine为分段三次hermite插值,V5cubic为MATLAB5中多项式的插值。

[x,y]=meshgrid(-4:0.8:4);                   %原始数据
z=peaks(x,y);
[xi,yi]=meshgrid(-4:0.2:4);                 %插值数据
zi_nearest=interp2(x,y,z,xi,yi,'nearest');  %临近点插值
zi_linear=interp2(x,y,z,xi,yi);             %系统默认为线性插值
zi_spline=interp2(x,y,z,xi,yi,'spline');    %三次样条插值
zi_cubic=interp2(x,y,z,xi,yi,'cubic');      %三次多项式插值
figure;                                     %数据显示
hold on;
subplot(321);
surf(x,y,z);
title('原始数据');
subplot(322);
surf(xi,yi,zi_nearest);
title('临近点插值');
subplot(323);
surf(xi,yi,zi_linear);
title('线性插值');
subplot(324);
surf(xi,yi,zi_spline);
title('三次样条插值');
subplot(325);
surf(xi,yi,zi_cubic);
title('三次多项式插值');


三、三维插值 interp3 

v = interp2(x,y,z,v,xi,yi,zi,'method') xi为变量范围,yi为变量范围,zi为变量范围。method为插值形式:不填为默认插值,nearest为临近点插值,spine为三次样条插值,pchine为分段三次hermite插值,V5cubic为MATLAB5中多项式的插值。

[x,y,z,v]=flow(10);
[xi,yi,zi]=meshgrid(.1:.25:10,-3:.25:3,-3:.25:3);
vi = interp3(x,y,z,v,xi,yi,zi);                     % vi为25*40*25
slice(xi,yi,zi,vi,[6 9.5],2,[-2 .2]);
shading flat

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Matlab 中可以使用 `polyfit` 函数进行拉格朗日插值和抛物插值。 首先,我们需要定义要拟合的数据点和插值点。假设我们要在区间 [0, 1] 内进行插值,我们可以生成一些随机数据点: ```matlab x = linspace(0, 1, 10); % 数据点 y = sin(pi*x); % 对应的函数值 xx = linspace(0, 1, 100); % 插值点 ``` 接下来,我们可以使用 `polyfit` 函数进行拉格朗日插值。假设我们要使用 $n$ 个数据点进行插值,那么拉格朗日插值的多项式为: $$ P(x) = \sum_{i=1}^n y_i \prod_{j\neq i}\frac{x-x_j}{x_i-x_j} $$ 在 Matlab 中,我们可以利用 `polyfit` 函数来求解这个多项式的系数。具体来说,我们可以先计算每个数据点对应的拉格朗日基函数: ```matlab n = length(x); L = ones(n, length(xx)); for i = 1:n for j = 1:n if i ~= j L(i,:) = L(i,:) .* (xx - x(j)) / (x(i) - x(j)); end end end ``` 然后,我们可以将每个基函数乘上对应的函数值,并求和得到多项式的值: ```matlab yy = sum(y .* L); ``` 现在,我们已经得到了拉格朗日插值的结果。我们可以将数据点和插值点以及插值结果绘制出来: ```matlab plot(x, y, 'o', xx, yy); ``` 如果我们要进行抛物插值,可以使用 `polyfit` 函数的另一种调用方式。假设我们要使用三个数据点进行抛物插值,那么抛物插值的多项式为: $$ P(x) = a_1 x^2 + a_2 x + a_3 $$ 我们可以使用 `polyfit` 函数求解这个多项式的系数: ```matlab p = polyfit(x(2:4), y(2:4), 2); yy = polyval(p, xx); ``` 这里我们使用了 `x(2:4)` 和 `y(2:4)` 来表示我们要使用第二个、第三个和第四个数据点进行插值。同样地,我们可以将数据点和插值点以及插值结果绘制出来: ```matlab plot(x, y, 'o', xx, yy); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值