zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    更新Centos 8 内核
    Docker安装
    微服务学习实战笔记 4.1-系统部署篇-Centos 8 下 安装配置K8S
    安装supervisor
    微服务学习实战笔记 4.2-系统部署篇-搭建 Harbor 镜像仓库服务器
    SRS流媒体服务器安装
    微服务学习实战笔记 1.1-系统架构篇-技术选型
    .Net Core 3.0 使用 Serilog 把日志记录到 SqlServer
    IdentityServer4 自定义授权模式
    IdentityServer4 保护.net framework webapi
  • 原文地址:https://www.cnblogs.com/jiahenhe2/p/10152730.html
Copyright © 2011-2022 走看看