插值与拟合

简介

当面临一堆散乱的数据,看不出这之间符合的函数的关系式,可以先对数据做一个初步整理,可以采用插值拟合的方法。
插值:得到的函数曲线都过这些数据点,只是在这些点的空隙,插入一些值,使之可以得到一个曲线轮廓
拟合:不一定都要这些数据点,但得到的曲线到这些真实数据点的距离应是最小的

MATLAB 插值工具箱

为了得到更平滑的曲线或曲面,可以采用三次样条插值

一维插值(一元函数曲线)

语法: y = interp1(x0,y0,x,’method’);
x0,y0,为真实插值点的行向量,x为插值点,y为插值得到的函数值,method指导插值的方法,默认是线性插值。插值的x0要求是单调的的

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; %插值点的间距为0.1
y1=interp1(x0,y0,x);%method省略默认是‘liner’线性插值
y2=interp1(x0,y0,x,'spline');%‘spline’表示立方插值
pp1=csape(x0,y0);%以下这两句表示三次样条插值
y3=ppval(pp1,x);
subplot(1,3,1)%subplot(m,n,p)m表示是图排成m行,n表示图排成n列
%p表示图所在的位置
plot(x0,y0,'+',x,y1)%plot是绘制一维曲线的基本函数
title('Piecewise linear')%图的标题
subplot(1,3,2)
plot(x0,y0,'+',x,y2)
title('Spline1')
subplot(1,3,3)
plot(x0,y0,'+',x,y3)
title('Spline2')
二维插值(二元函数曲面)
clear,clc
x=100:100:500;%x,y,z是真实已有数据
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});%三次样条插值
[i,j]=find(cz==max(max(cz)))  %找最高点的地址
x=xi(i),y=yi(j),zmax=cz(i,j)  %求最高点的坐标 
size(xi),size(yi),size(cz)
subplot(1,1,1),mesh(xi,yi,cz')%注意这里cz要转置,不然维度不一致

matlab插值时外插值是不确定的,可以采用混合插值,把不确定的值换成最近点的插值的结果

clc, clear
x=[129,140,103.5,88,185.5,195,105,157.5,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)  %求x的最小值和最大值
ymm=minmax(y)  %求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'); %最近点插值
zi=zi1;  %立方插值和最近点插值的混合插值的初始值
zi(isnan(zi1))=zi2(isnan(zi1))  %把立方插值中的不确定值换成最近点插值的结果
subplot(1,2,1), plot(x,y,'*')
subplot(1,2,2), mesh(xi,yi,zi)

曲线拟合的线性最小二乘法

上面我们可以用插值的方式,得到图像,更加明确的观察到数据的分布,但是还是不能得到数据之间的函数关系,现在我们通过拟合的方法,得到数据之间的函数关系

x0=[1990  1991  1992  1993  1994  1995  1996];
y0=[70   122   144   152   174   196   202];
a=polyfit(x0,y0,1)%曲线拟合函数,1表示一阶函数
%x, y为已知数据点向量, 分别表示横,纵坐标, m为拟合多项式的次数,
%结果返回m次拟合多项式系数, 从高次到低次存放在向量p中.
y97=polyval(a,1997)%是求值函数
y98=polyval(a,1998)
xmm=minmax(x0)  %求x的最小值和最大值
xi=xmm(1):xmm(2);
yi = a(1)*xi+a(2)
subplot(1,1,1),plot(x0,y0,xi,yi)

这里写图片描述

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值