• Matlab曲面拟合和插值


    转:https://blog.csdn.net/mingtian715/article/details/72677791

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

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

    这两种方法的确别在于:

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

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

    插值:

    对于一维曲线的插值,一般用到的函数yi=interp1(X,Y,xi,method) ,其中method包括nearst,linear,spline,cubic。

    对于二维曲面的插值,一般用到的函数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是一个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];

    %先考虑插值,需要用到的函数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

  • 相关阅读:
    webBrowser控制新窗口
    MSIL指令速 查表
    [转载]最新.NET Reactor v4.0.0.0 注册机
    如何得到webbrowser的句柄
    【C#】获取本地Cookie的问题
    visio 2007 简体中文版下载
    VMware Workstation(虚拟机) V6.0.2 Build 59824 汉化版 |
    ComponentOne Studio Enterprise 2010 v1
    [转载]MaxtoCode对.Net程序加密的原理及解密探讨三(实例解密)
    用WPF实现打印及打印预览
  • 原文地址:https://www.cnblogs.com/jiahenhe2/p/10152730.html
Copyright © 2020-2023  润新知