• Matlab曲面拟合和插值


    插值和拟合都是数据优化的一种方法,当实验数据不够多时常常须要用到这样的方法来绘图。

    matlab中都有特定的函数来完毕这些功能。

     

    这两种方法的确别在于:

    当測量值是准确的,没有误差时,一般用插值;

    当測量值与真实值有误差时。一般用数据拟合。

     

    插值:

    对于一维曲线的插值,一般用到的函数yi=interp1(X,Y,xi,method) 。当中method包含nearstlinearsplinecubic

    对于二维曲面的插值,一般用到的函数zi=interp2(X,Y,Z,xi,yi,method)。当中method也和上面一样,经常使用的是cubic

     

    拟合:

    对于一维曲线的拟合,一般用到的函数p=polyfit(x,y,n)yi=polyval(p,xi)。这个是最经常使用的最小二乘法的拟合方法。

    对于二维曲面的拟合,有非常多方法能够实现。可是我这里自己用的是Spline Toolbox里面的函数功能。详细用法能够看后面的样例。

     

    对于一维曲线的插值和拟合相对照较简单。这里就不多说了。对于二维曲面的插值和拟合还是比較有意思的。

    总结归纳一下给出实例和解说。

     %第一给样例

    clc;clear;clf;
    %原始数据的定义
    x=[1:1:12];
    y=[1:1:5];
    %z是一个5乘12的矩阵。


    z=[0.2 0.24 0.25 0.26 0.25 0.25 0.25 0.26 0.26 0.29 0.25 0.29;
    0.27 0.31 0.3 0.3 0.26 0.28 0.29 0.26 0.26 0.26 0.26 0.29;
    0.41 0.41 0.37 0.37 0.38 0.35 0.34 0.35 0.35 0.34 0.35 0.35;
    0.41 0.42 0.42 0.41 0.4 0.39 0.39 0.38 0.36 0.36 0.36 0.36;
    0.3 0.36 0.4 0.43 0.45 0.45 0.51 0.42 0.4 0.37 0.37 0.37];
    %直接用原始数据绘图例如以下:
    %surf三维表面图
    surf(x,y,z);
    title('Original data Plot');
    xlabel('X'), ylabel('Y'), zlabel('Z'),
    %对X,Y,Z轴范围的控制
    axis([0 15 0 6 0.2 0.55]);

    %第二给样例

    clc;clear;clf;

    %原始数据的定义

    x=[1:1:12];

    y=[1:1:5];

    %z是一个512的矩阵。

    z=[0.2 0.24 0.25 0.26 0.25 0.25 0.25 0.26 0.26 0.29 0.25 0.29;

    0.27 0.31 0.3 0.3 0.26 0.28 0.29 0.26 0.26 0.26 0.26 0.29;

    0.41 0.41 0.37 0.37 0.38 0.35 0.34 0.35 0.35 0.34 0.35 0.35;

    0.41 0.42 0.42 0.41 0.4 0.39 0.39 0.38 0.36 0.36 0.36 0.36;

    0.3 0.36 0.4 0.43 0.45 0.45 0.51 0.42 0.4 0.37 0.37 0.37];

    %先考虑插值,须要用到的函数interp2

    x1=1:0.2:12;

    y1=1:0.2:5;

    [x2,y2]=meshgrid(x1,y1);

    t11=interp2(x,y,z,x2,y2,'cubic');

    surf(x1,y1,t11);

    title('After Fit data Plot');

    xlabel('X'), ylabel('Y'), zlabel('Z'),

    %X,Y,Z轴范围的控制

    axis([0 15 0 6 0.2 0.55]);
     

    %第三个样例

    x = rand(100,1)*16 - 8;

    y = rand(100,1)*16 - 8;

    r = sqrt(x.^2 + y.^2) + eps;

    z = sin(r)./r;

     

    xlin = linspace(min(x),max(x),33);

    ylin = linspace(min(y),max(y),33);

    [X,Y] = meshgrid(xlin,ylin);

     

    Z = griddata(x,y,z,X,Y,'cubic');

     

    mesh(X,Y,Z) %interpolated

    axis tight; hold on

    plot3(x,y,z,'.','MarkerSize',15) %nonuniform

     

     

     

     

  • 相关阅读:
    显因子模型简介
    关联规则中最小支持度和最小置信度
    Matlab读取音频数据
    初识禁忌搜索算法
    Word中将图表变为表格
    明尼苏达推荐系统导论(第一课 欢迎来到RS)
    python复杂网络分析库NetworkX
    python使用zlib实现压缩与解压字符串
    PostgreSQL 对字段大小写敏感
    pycharm快捷键及一些常用设置
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4593806.html
Copyright © 2020-2023  润新知