精华内容
下载资源
问答
  • 最近遇到个问题,如何利用一大堆三维坐标点,拟合三维曲面。不知道大家有没有遇见过,就是下面这种。我当然是上网百度啊之类的,想看看要怎么作,但转了一圈下来,发现网上几乎是关于下面情况的作图说明,即:我...

    07dd542c3db8681e71c3fa402a64d6cb.png

    最近遇到个问题,如何利用一大堆三维坐标点,拟合出三维曲面。

    不知道大家有没有遇见过,就是下面这种。

    3f4431c530ab7e590c4b683aebf076cb.png

    我当然是上网百度啊之类的,想看看要怎么作,但转了一圈下来,发现网上几乎是关于下面情况的作图说明,即:我现在知道x坐标y坐标,z坐标是关于每个(x,y)的函数表达式。就像最普遍的例子,看下图(其实下图是利用python的作图,不过意思差不多就这样)

    55c790e54ea9e289d66a2ec8160fc0a7.png

    但我这次是需要直接利用(x,y,z)坐标绘制三维曲面,那就要换种方法了,matlab开启。

    1.首先要将x,y,z坐标导入matlab

    x=xlsread('D:需重新画图的数据.xlsx','Sheet1','A1:A......');
    y=xlsread('D:需重新画图的数据.xlsx','Sheet1','B1:B......');
    z=xlsread('D:需重新画图的数据.xlsx','Sheet1','C1:C......');

    “......”代表数字,都懂的

    2.接着就要创建以x,y坐标为基准的网格

    xmax=max(x);
    xmin=min(x);
    ymax=max(y);
    ymin=min(y);
    [X,Y]=meshgrid(xmin:5:xmax,ymin:5:ymax);

    max(),min()命令就是取最大值最小值;

    这里meshgrid(xmin:5:xmax,ymin:5:ymax))的作用是:先看作m=xmin:5:xmax,n=ymin:5:ymax。分别产生以向量m为行,向量n为列的两个大小相同的矩阵,其中x的行是从xmin开始到xmax,每间隔5记下一个数据,并把这些数据集成矩阵X;同理y的列则是从ymin到ymax,每间隔5记下一个数据,并集成矩阵Y。

    我们创建了网格,z坐标才有了参照网格,最后才能绘制出曲面。

    3.利用griddata()函数实现插值拟合

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

    说实话,这个函数解释起来我好像有点难,看看网上是怎么解释吧,我就附上百度知道里怎么解释的吧。。。

    matlab中griddata函数怎么用_百度知道zhidao.baidu.com
    9e18ad48f6a4d2e9847107e39284fef3.png

    4.最后就是作图就可以了

    figure(1)
    surf(X,Y,Z)
    shading interp 
    colorbar

    绘制三维曲面图,经过我实验发现坐标点应该要足够多,处理的时间有点长(可能跟我的电脑有关)。

    最终处理出的图就像下面这样:

    f4a35b53605bb8dc321331b53de7e5a2.png

    就当是一次记录吧,其实我看网上的python有个函ax3.plot_trisurf(X,Y,Z,cmap='rainbow')好像也可以直接利用三维坐标作三维图,但我没有深究,作出来的图不忍直视,可能是拟合方式不一样。

    展开全文
  • 该工具是对matlab三维插值拟合函数griddata的改进,可以在3维空间中,为一组离散的点寻找一个最佳的拟合曲面,并且更加简单易用,做出来的图更加美观,打包的工具包内包含所有代码和使用说明,还有效果图
  • matlab函数大全-matlab函数大全.doc 比较白痴的东西,不过对初学者也许有用,特分享一下。不要喷我哦!函数具体用法可以用help查一下。附件内容与下面一样的。 Aabs 绝对值、模、字符的ASCII码值 acos 反余弦 ...
  • 1 目的 将4组三维数据,每组数据画散点图(fig1),拟合出一个曲面(fig2),并将特定Z值的等高线投影到XY平面(fig3)。2 主要函数scatter3( ) 三维散点图scatter3(X,Y,Z,S,C) % 向量 X、Y 和 Z 指定点的位置,都...

    1 目的

        将4组三维数据,每组数据画散点图(fig1),拟合出一个曲面(fig2),并将特定Z值的等高线投影到XY平面(fig3)。

    2 主要函数

    scatter3( ) 三维散点图

    scatter3(X,Y,Z,S,C)
    % 向量 X、Y 和 Z 指定点的位置,都是1维数组。size(Z) = size(X) * size (Y)
    % S 指定点的大小,默认50。也可以是一个和x,y长度一样的向量,设置不同点大小不同。
    % 默认点的形状是圆形。正方形s,圆形o,上三角形^,菱形d
    % C 指定的颜色绘制每个点。可以是字符串,RGB或者向量。使用向量可以不同点颜色不同

    mesh( ) 三维网格图

    mesh(X,Y,Z,C)
    % 绘制线框网格
    % 如果 X 和 Y 为向量,length(X) = n 且 length(Y) = m,其中 [m,n] = size(Z)。
    % 矩阵 C 确定网格颜色,大小与 Z 相同

    surf( ) 三维曲面图

    surf(X,Y,Z,C)
    % 默认的曲面颜色与 Z 成比例
    % 使用 C 将指定曲面颜色
    % 由于原始数据点偏少,最好先用griddata()插入更多数据点

    contour( ) 等高线图

    [C,h] = contour(X,Y,Z)
    % 返回等高线矩阵 C(包含定义等高线的数据)和 Contour 对象 h
    % 如只想画出Z在i处的等高线,则调用 [C,h] = contour(X,Y,Z,[i,i])。再调用 C 即可获得该等高线的数据
    % h 为等高线对象。可设置粗细、颜色等属性

    cell 数组

        多组数据绘图,我倾向使用循环解决。以上命令的 X,Y 都是矩阵(数组),matlab里可以用 cell 数组 存储矩阵。


    RGB 格式

        maltab 的 RGB 不是 [255 255 255] 形式,而是 [1 1 1]。对应 RGB 数值除以255即可。

    3 代码实现

    clear;clc;close all;
    
    %% data input
    data1 = importdata('sta_1');
    data2 = importdata('sta_2');
    data3 = importdata('sta_3');
    data4 = importdata('sta_4');
    color = [0.8588 0.2745 0.19216; 0.8941 0.6627 0.1961; 0 0.5412 0.7765; 0.6275 0.2 0.5765];        % 自定义颜色 red, yellow, blue, purple
    
    x = cell(4,1);y = cell(4,1);z = cell(4,1);
    
    % cell元胞数组,可以存数组.目的是利用cell循环作图.
    % x{i} = data{i}(:,1)
    % 第i组数据(xyz均为1维数据)分别存入X{i},Y{i},Z{i}
    for i = 1:4
        eval(['x{',num2str(i) '}= data' num2str(i) '(:,1)']);   % index 中调用变量,需要用到num2str()
        eval(['y{',num2str(i) '}= data' num2str(i) '(:,2)']); 
        eval(['z{',num2str(i) '}= data' num2str(i) '(:,3)']); 
    end
    real = [0.610293 0.559696 0.614283 0.63131];     % 需要画等高线的高度
    
    %% fig.1: sactter
    dot1 = {'s' 'o' '^' 'd'};   % dot shape
    
    figure;
    daspect([8 5 1]);    % 坐标轴xyz刻度比例
    hold on;
    grid on;
    
    for i = 1:4
        scatter3(x{i},y{i},z{i},dot1{i},'MarkerFaceColor',color(i,:),'MarkerEdgeColor',color(i,:));
    end
    view(40,25);
    xlabel('x');ylabel('y');zlabel('z');;xlim([0 16]);ylim([0 10]); title('xyz');
    set(gca,'xTick',[0:2:16],'yTick',[0:2:10],'LineWidth',2,'FontSize',20,'GridLineStyle' ,'--');  
    legend('1','2','3','4','location','northeast');
    
    hold off;
    % print('-depsc','-r800','fig1.eps'); 
    
    %% surface       
    X = cell(4,1);Y = cell(4,1);Z = cell(4,1);
    Xm = cell(4,1);Ym = cell(4,1);Zm = cell(4,1);
    
    figure
    daspect([8 5 1]);    % 坐标轴xyz刻度比例
    hold on;
    grid on;
    for i = 1:4
        [X{i},Y{i},Z{i}] = griddata(x{i},y{i},z{i},linspace(-1,17)',linspace(-1,11),'v4');
        C = zeros(size(X{i}));
        C(:,:,1) = color(i,1);C(:,:,2) = color(i,2);C(:,:,3) = color(i,3);
        surf(X{i},Y{i},Z{i},C);
    %     shading flat;  
    end
    legend('1','2','3','4','location','northeast');
    for i = 1:4
    %     shading flat;  
        Xm{i} = -1:17;Ym{i} = -1:17;Zm{i} = real(i)*ones(19);
        Cm = zeros(size(Zm{i}));
        Cm(:,:,1) = color(i,1);Cm(:,:,2) = color(i,2);Cm(:,:,3) = color(i,3);
        mesh(Xm{i},Ym{i},Zm{i},Cm); % 添加一张网格平面
    end
    alpha(0.8);     % transparency
    view(40,25);
    xlabel('x');ylabel('y');zlabel('z');xlim([0 16]);ylim([0 10]); title('xyz');
    set(gca,'LineWidth',2,'FontSize',20,'xTick',[0:2:16],'yTick',[0:2:10],'GridLineStyle' ,'--');
    hold off;
    
    %print('-depsc','-r800','fig2.eps');  
    
    %% contour
    cm = cell(4,1);
    hm = cell(4,1);
    
    figure
    hold on;
    for i = 1:4
        [cm{i},hm{i}]=contour(X{i},Y{i},Z{i},[real(i),real(i)]);    % cm(i)保存了等高线的数据
        set(hm{i},'color',color(i,:),'LineWidth',2);    % ,'ShowText','on'
    end
    legend('1','2','3','4','location','northeast');
    xlabel('x');ylabel('y');xlim([0 16]);ylim([0 10]);title('xyz');
    set(gca,'LineWidth',2,'FontSize',20,'xtick',[0:1:16],'ytick',[0:0.5:7]);
    hold off;
    
    % print('-depsc','-r800','fig3.eps'); 



        
    展开全文
  • 插值与拟合

    2017-09-01 20:20:15
    简介当面临一堆散乱的数据,...拟合:不一定都要这些数据点,但得到的曲线到这些真实数据点的距离应是最小的MATLAB 插值工具箱为了得到更平滑的曲线或曲面,可以采用次样条插值一插值(一元函数曲线)语法: y = inte

    简介

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

    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)

    这里写图片描述

    展开全文
  • 四、 7.2.4 三维数据的其他表现形式命令 35 第 3 节 通用图形函数命令 41 一、 7.3.1 图形对象句柄命令 41 二、 7.3.2 轴的产生和控制命令 51 三、 图形句柄操作命令 51 四、 7.3.4 图形窗口的控制...
  • matlab入门教程

    热门讨论 2011-07-01 02:15:45
    3.1.1 三维的曲线绘图 3.1.2 曲面及等值线绘图 第四章 MATLAB函数 --- 语音讯号分析 4.1 数学函数 4.1.1 常见数学函数 4.1.2 三角和双曲线函数 4.1.3 复数 4.1.4 多项式函数 4.2 数据分析函数 4.2.1 极值、...
  • matlab命令手册pdf

    2011-05-23 20:39:36
    13.5 三维图形 227 13.6 颜色控制 243 13.7 图形窗口的硬拷贝 246 13.8 声音 246 第14章 高级图形 248 14.1 图的结构 248 14.2 图形对象 250 14.2.1 通用函数 252 14.2.2 共有属性和方法 256 14.2.3 根对象 257 ...
  • 第一章 MATLAB简介 4 1.1 MATLAB初步介绍 4 1.1.1 MATLAB的传统优点 4 ...5.3.5 三维曲面与网格图 82 5.3.6 其它常见三维图形 84 5.4 剖面图 85 5.5 三维数据的其他表现形式命令 87 附件: 数据分析函数 91
  • matlab经典教程全集

    热门讨论 2010-05-20 14:30:04
    3.1.1 三维的曲线绘图 3.1.2 曲面及等值线绘图 第四章 MATLAB函数 --- 语音讯号分析 4.1 数学函数 4.1.1 常见数学函数 4.1.2 三角和双曲线函数 4.1.3 复数 4.1.4 多项式函数 4.2 数据分析函数 4.2.1 极值、...
  • 新版本的MATLAB对整个图形处理功能作了很大的改进和完善,使它不仅在一般数据可视化软件都具有的功能(例如二维曲线和三维曲面的绘制和处理等)方面更加完善,而且对于一些其他软件所没有的功能(例如图形的光照处理...
  • matlab各种函数,举例讲解,各种常用模型编程 目 录 前言 第1章 引言 1.1 概述 1.2 字体印刷约定 第2章 MATLAB基本特性 2.1 简单数学运算 2.2 MATLAB工作空间 2.3 保存和检索数据 2.4 数值显示格式 2.5 关于变量 2.6...
  • MATLAB程序设计与典型应用(源程序)

    热门讨论 2013-07-04 20:54:16
    三维曲面图绘制... 142 5.2.3 其他三维图形绘制... 146 5.2.4 透明度作图... 147 5.2.5 立体可视化... 148 5.3 图形颜色映像的应用... 151 5.4 光照和材质处理... 153 5.4.1 光照处理... 153 5.4.2 材质处理... 154 ...
  • 2.6.2三维图形的绘制 2.6.3PLOT工具栏 2.6.4图形对象属性设置 2.7MATLAB编程实例 2.7.1汉诺塔问题 2.7.2MATLAB在自动控制中的应用 2.7.3MATLAB在电力信号分析处理中的应用 2.8本章小结 第3章Simulink仿真基础 3.1...
  • 绘制三维曲面三维曲面上绘制指定的点 解决方案 函数拟合 使用MATLAB fitting curve tool中的多项式拟合解决函数拟合的需求 绘制三维曲面 采用ECharts GL实现B端的绘制,ECharts安装代码如下: <script src=...

    需要解决的问题

    1. 根据(x,y,z) 点集得到其拟合函数
    2. 绘制三维曲面
    3. 在三维曲面上绘制指定的点

    解决方案

    函数拟合

    使用MATLAB fitting curve tool中的多项式拟合解决函数拟合的需求

    绘制三维曲面

    采用ECharts GL实现B端的绘制,ECharts安装代码如下:

    <script src="lib/echarts.min.js"></script>
    <script src="lib/echarts-gl.min.js"></script>
    

    使用ECharts提供的series-surface,基础配置代码示例如下:

    <script>
    option = {
        tooltip: {},
        backgroundColor: '#fff',
        visualMap: {
            show: false,
            min: -1,
            max: 1,
            inRange: {
                color: ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026']
            }
        },
        xAxis3D: {
            type: 'value',
            min: 1000,
            max: 8000,
        },
        yAxis3D: {
            type: 'value'
            min: 30,
            max: 80,
        },
        zAxis3D: {
            type: 'value'
            min: 0.6,
            max: 1.0,
        },
        grid3D: {
            viewControl: {
                // projection: 'orthographic'
            }
        },
        series: [{
            type: 'surface',
            wireframe: {
                // show: false
            },
            equation: {
                x: {
                    step: 500,
    		        min: 1000,
    		        max: 8000,
                },
                y: {
                    step: 50,
    				min: 30,
    				max: 80,
                },
                z: function (x, y) {
                    if (Math.abs(x) < 0.1 && Math.abs(y) < 0.1) {
                        return '-';
                    }
                    return Math.sin(x * Math.PI) * Math.sin(y * Math.PI);
                }
            }
        }]
    }
    </script>
    
    

    在三维曲面上绘制点

    使用ECharts GL提供的series-scatter3D,基础配置代码示例如下:

    {
     	name: '工况点',
        type: 'scatter3D',
        symbol: 'pin',
        symbolSize: 20,
        zlevel: -9,
        itemStyle: {
            borderWidth: 1,
            borderColor: '#000'
        },
        label: {
            show: true,
            // formatter: '{a}: {c}',
            formatter: function (params) {
                return params.seriesName +
                    '\n\nx:\t' + params.data[0] + '\tkW' +
                    '\ny:\t'   + params.data[1] + '\tm' +
                    '\nz:\t'   + params.data[2];
            },
        },
        data: [[x, y, z]],
    }
    
    展开全文
  • 3.4.8 mesh 绘制三维网格图/92 3.5 神经网络工具箱/92 3.5.1 工具箱函数基本介绍/93 3.5.2 神经网络对象与属性/95 第 2 篇 原理篇 第 4 章 单层感知器( 教学视频:27 分钟)/104 4.1 单层感知器的结构/104 4.2 单层...
  • 三维曲面的呈现研究_基于VC_OpenGL.pdf 以LabVIEW为开发平台的电子式互感器校验仪设计.pdf 以VC++为平台电传训练系统研究与实现.pdf 使用MFC和ADO实现不规则窗口通讯录.pdf 分布式软件动态配置环境可视化的研究与...
  • Matlab基础及应用教程

    2018-09-03 19:54:43
    MATLAB 数值运算.............................65 3.1 多项式...................................................65 3.1.1 多项式的表达和创建...............65 3.1.2 多项式的四则运算...................65 ...
  • 1.5三维向量图 11.2曲面模型的建立 11.2.1函数表示的曲面 11.2.2~--次曲面 11.2.3样条曲面 11.2.4用给定数据绘图 t12.5非均匀采样数据的曲面图 11.2.6表面图绘制的数据格式问题 11.3多边形...
  • 5.3 三维图形绘制 5.3.1 曲线图绘制 5.3.2 网格图绘制 5.3.3 曲面图的绘制 5.3.4 光照模型 5.3.5 绘制等值线图 5.4 四维图形可视化 5.4.1 用颜色描述第四维 5.4.2 其他函数 5.5 本章小结 第2 篇 第...
  • 5.3 三维图形绘制 5.3.1 曲线图绘制 5.3.2 网格图绘制 5.3.3 曲面图的绘制 5.3.4 光照模型 5.3.5 绘制等值线图 5.4 四维图形可视化 5.4.1 用颜色描述第四维 5.4.2 其他函数 5.5 本章小结 第2 篇 第...
  • 三维曲面的呈现研究_基于VC_OpenGL.pdf 以LabVIEW为开发平台的电子式互感器校验仪设计.pdf 以VC++为平台电传训练系统研究与实现.pdf 使用MFC和ADO实现不规则窗口通讯录.pdf 分布式软件动态配置环境可视化的研究与...
  • 三维曲面的呈现研究_基于VC_OpenGL.pdf 以LabVIEW为开发平台的电子式互感器校验仪设计.pdf 以VC++为平台电传训练系统研究与实现.pdf 使用MFC和ADO实现不规则窗口通讯录.pdf 分布式软件动态配置环境可视化的研究与...
  • 三维曲面的呈现研究_基于VC_OpenGL.pdf 以LabVIEW为开发平台的电子式互感器校验仪设计.pdf 以VC++为平台电传训练系统研究与实现.pdf 使用MFC和ADO实现不规则窗口通讯录.pdf 分布式软件动态配置环境可视化的研究与...
  • 介绍Origin的一元线性拟合、一元多项式拟合和多元线性拟合三种拟合功能 第35集:拟合(二):拟合报表分析;介绍Origin的拟合报表的分析方法与操作 第36集:拟合(三):非线性拟合;介绍Origin的非线性曲线拟合、曲面...
  • 第110页 4.3.1 三维曲面图 第112页 4.3.2 三维参数图 第113页 4.3.3 三维曲线图 第113页 4.4 其他图形显示控件 第114页 4.4.1 极坐标图 第115页 4.4.2 最小-最大曲线显示控件 第116页 4.5 综合实例:绘制同心圆 第...

空空如也

空空如也

1 2
收藏数 26
精华内容 10
关键字:

matlab拟合三维曲面函数

matlab 订阅