matlab插值拟合

拟合

运用matlab提供的工具箱,在APP的CurveFitting里面
在这里插入图片描述

插值

一维插值

函数介绍

在这里我们介绍interp1函数的用法:
yi=interp1(x,y,xi,‘method’)
x:已知的自变量的值,是一个向量;
y:与x对应的因变量的值;
xi:用户另外指定的插值点的横坐标
yi:指定的插值点的纵坐标
method:插值方法,这里以三次样条插值为例

举例

我们看一个例题:
在这里插入图片描述
解答:机翼断面轮廓是封闭曲线,我们对其上下线进行三次样条插值,matlab代码如下:

>> x0=[0,3,5,7,9,11,12,13,14,15];%已知的x的坐标构成的向量
>> y01=[0,1.8,2.2,2.7,3.0,3.1,2.9,2.5,2.0,1.6];%已知的y坐标上线
>> y02=[0,1.2,1.7,2.0,2.1,2.0,1.8,1.2,1.0,1.6];%已知的y坐标下线
>> x=0:0.1:15;%插值点x的坐标,每间隔0.1插一个值
>> ysp1=interp1(x0,y01,x,'spline');%spline表示三次样条插值方式
>> ysp2=interp1(x0,y02,x,'spline');
>> plot([x0,x0],[y01,y02],'o');%对于每个坐标点标一个圈
>> hold on;%等一下
>> plot(x,ysp1,'r',x,ysp2,'r');%画两条线
>> xlabel('X');%指明横坐标名称
>> ylabel('Y');%指明纵坐标名称
>> legend('插值节点','三次样条插值','location','northwest')%图例

在这里插入图片描述
然后再用上线减下线即可,matlab提供专门的函数

>> S=trapz(x,ysp1)-trapz(x,ysp2)

在这里插入图片描述

二维插值

网格插值

函数介绍

zi=interp2(x,y,z,xi,yi,‘method’)
z=meshgrid(x,y):用于生成二维表格

举例

看具体的例子吧
在这里插入图片描述
代码如下:

x = 100:100:500;
y = 100:100:400;
[X,Y] = meshgrid(x,y);%生成二维网格
Z = [450  478  624  697  636
        420  478  630  712  698
        400  412  598  674  680
        310  334  552  626  662];
xd = 100:20:500;
yd = 100:20:400;
[Xd,Yd] = meshgrid(xd,yd);
figure;  
Zd = interp2(X,Y,Z,Xd,Yd,'spline');%进行二维的三次样条插值
surf(Xd,Yd,Zd);%绘图
xlabel('X'); ylabel('Y'); zlabel('Z'); title('interp2')%指明三个坐标轴名称及标题

在这里插入图片描述

散点插值

函数介绍

griddata
Zd = griddata(x,y,z,Xd,Yd);x,y和z是已知值,Xd,Yd是要插入的数据,Zd是得到的插值
xlsread:用于读取excel表格中的数据,返回的是一个矩阵
num=xlsread(filname):filname是文件名,用于读取该文件第一张表的数据
num=xlsread(filname,-1):和用户交互式读取
num=xlsread(filname,sheet):sheet表示读取第几张表
num=xlsread(filname,range):range表示单元格的范围
num=xlsread(filname,sheet,range):
x=linspace(x1,x2,n):x1是起始值,x2是结束值,n为元素的个数

举例在这里插入图片描述在这里插入图片描述

在这里插入图片描述
过程:
1 计算出插值点上的海拔高度和Cd元素浓度
2 绘制四维图,重金属浓度为第四维
代码如下:

xyz = xlsread('cumcm2011A.xls',1,'B4:D322');%读取sheet1的数据
Cd = xlsread('cumcm2011A.xls',2,'C4:C322');%读取sheet2的数据
x = xyz(:,1);%取出第一列的数据,即x
y = xyz(:,2);%取出第二列的数据,即y
z = xyz(:,3);%取出第三列的数据,即海拔
xd = linspace(min(x),max(x),60);
yd = linspace(min(y),max(y),60);
[Xd,Yd] = meshgrid(xd,yd);%生成网格矩阵
Zd = griddata(x,y,z,Xd,Yd);
Cd = griddata(x,y,Cd,Xd,Yd);
figure;
surf(Xd,Yd,Zd,Cd);
shading interp;
xlabel('X'); ylabel('Y'); zlabel('Z'); title('griddata');
colorbar;

在这里插入图片描述

  • 6
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值