插值与拟合——插值

一般插值方法

一维插值函数:

yi=interp1(x,y,xi,‘method’)
其中method有:
nearest——最临近插值
linear——线性插值
spline——三次样条插值
cubic——立方插值

二维插值:

zz=interp2(x,y,z,xx,yy,’method’)
该指令的意思是根据数据向量x,y,z按method指定的方法来做插值,然后将xx,yy处插值函数的插值结点向量,如果xx,yy在插值范围之内,则返回值在zz中,否则返回值为空——NaN。’method’是插值方法可选项,具体要求同一维插值的情况。

该命令还有以下几种省略格式:
zz=interp2(z,xx,yy)
zz=interp2(x,y,z,xx,yy)
zz=interp2(z,ntimes)

三维插值

vi=interp3(x,y,z,v,xi,yi,zi,’method’)
解释同一、二维插值。

样条插值

yy=spline(x,y,xx)
其等同于yy=interp1(x,y,xx,’cubic’)。

网格节点数据案例

1.一维插值
例1:在1-12的11小时内,每隔1小时测量一次温度,,测得的温度依次为:5,8,9,15,25,29,31,30,22,25,27,24。试估计每隔1/10小时的温度值。

代码:

clear 
clc;
t=1:12;
tmp=[5 8 9 15 25 29 31 30 22 25 27 24];
h=1:0.1:12;
wd=interp1(t,tmp,h,'spline');
plot(t,tmp,'k+',h,wd,'b',t,tmp,'r:')
xlabel('时间')
ylabel('温度')

结果展示:
在这里插入图片描述
例2 在用外接电源给电容器充电时,电容器两端的电压V将会随着充电时间t发生变化,已知在某一次实验时,通过测量得到下列观测值,分别用拉格朗日插值法、分段线性插值法、三次样条插值法画出V随着时间t变化的曲线图,分别计算当时间t=7s时,三种插值法各自算得电容器两端电压的近似值。(具体数据见代码)

由于matlab没有提供拉格朗日插值的命令,因此需要编写程序。

%拉格朗日插值代码
function y=lglrcz(x_0,y_0,x)
n=length(x_0);
m=length(x);
for i=1:m
    z=x(i);
    s=0.0;
    for k=1:n
        q=1.0
        for j=1:n
            if j~=k
                q=q*(z-x_0(j))/(x_0(k)-x_0(j));
            end
        end
        s=q*y_0(k)+s;
    end
    y(i)=s;
end
%程序应用同时直接利用matlab中的命令。
clear
clc;
t=[1,2,3,4,6.5,9,12] ;
v=[6.2,7.3,8.2,9.0,9.6,10.1,10.4] ;
t_0=0.2:0.1:12.5;
lglr=lglrcz(t,v,t_0);
laglr=lglrcz(t,v,7) ;
fdxx=interp1(t,v,t_0) ;
fendxx=interp1(t,v,7) ;
scyt=interp1(t,v,t_0,'spline') ;
sancyt=interp1(t,v,7,'spline');
plot(t,v,'*',t_0,lglr,'r',t_0,fdxx,'g',t_0,scyt,'b')
gtext('lglr')%标记线条所属的方法
gtext('fdxx')
gtext('scyt')

2.二维插值案例:
z=interp2(x0,y0,z0,x,y,’method’)
要求x0,y0单调;x,y可取为矩阵,或x取行向量,y取为列向量,x,y的值分别不能超出x0,y0的范围

例:测得平板表面3*5网格点处的温度分别为:
82 81 80 82 84 79 63 61 65 81 84 84 82 85 86
试作出平板表面的温度分布曲面z=f(x,y)的图形。

clear
clc;
x=1:5;
y=1:3;
temps=[82 81 80 82 84;79 63 61 65 81;84 84 82 85 86];
mesh(x,y,temps)
%上面为原数据的图;下面为插值之后的温度分布
xi=1:0.2:5;
yi=1:0.2:3;
zi=interp2(x,y,temps,xi',yi,'cubic');
mesh(xi,yi,zi)

在这里插入图片描述

散点数据的插值

cz =griddata(x,y,z,cx,cy,‘method’)

要求cx取行向量,cy取为列向量。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值