【问题标题】:How can I plot a function with two variables in Octave or Matlab?如何在 Octave 或 Matlab 中绘制具有两个变量的函数?
【发布时间】:2013-05-27 21:53:05
【问题描述】:

我想使用 Octave 绘制具有两个变量的相当简单的函数,例如: f(x,y) = x^2 + 3y 。绘制单变量函数非常容易,但我在找出如何执行两个变量函数时遇到了很多麻烦。有谁知道这样做的最佳方法?

【问题讨论】:

    标签: matlab plot octave


    【解决方案1】:

    绘制一个包含两个变量的函数通常意味着一个 3 维绘图​​ - 在 MATLAB 中,您可以使用函数 plot3。要在 X 和 Y 的区间 [-10,10] 内绘制函数 f(x,y),可以使用以下命令:

    x = [-10:.1:10];
    y = [-10:.1:10];
    plot3(x, y, x.^2 + 3*y)
    grid on
    

    【讨论】:

      【解决方案2】:

      如果它可以帮助那里的人......我在 Octave 中运行了接受答案中的代码,我得到了这个情节:

      但我真的想要 x 和 y 的笛卡尔积中每个点的函数,而不仅仅是沿对角线,所以我使用函数 mesh 来获得这个 3D 图,其中投影轮廓线在 x,y飞机:

      x = [-10:.1:10];
      y = [-10:.1:10];
      [xx, yy] = meshgrid (x, y);
      z = xx.^2 + 3*yy;
      mesh(x, y, z)
      meshc(xx,yy,z) 
      xlabel ("x");
      ylabel ("y");
      zlabel ("f(x,y)");
      title ("f(x,y) = x^2 + 3y");
      grid on
      

      为了摆脱情节的网状线纹理,函数surf 做到了:

      x = [-10:.1:10];    
      y = [-10:.1:10];
      [xx, yy] = meshgrid (x, y);
      z = xx.^2 + 3*yy;
      h = surf(xx,yy,z);
      colormap hsv;
      set(h,'linestyle','none');
      xlabel ("x");
      ylabel ("y");
      zlabel ("f(x,y)");
      title ("f(x,y) = x^2 + 3y");
      

      另一种绘图方式是带有等高线的heatmap

      x = [-10:.1:10];
      y = [-10:.1:10];
      [xx, yy] = meshgrid (x, y);
      z = xx.^2 + yy.*3;
      contourf(xx,yy,z);
      colormap hsv;
      xlabel ("x");
      ylabel ("y");
      zlabel ("f(x,y)");
      title ("f(x,y) = x^2 + 3y");
      grid on
      

      为了完整起见,可以标记级别:

      x = [-10:.1:10];
      y = [-10:.1:10];
      [xx, yy] = meshgrid (x, y);
      z = xx.^2 + 3*yy;
      [C,h] = contour(xx,yy,z);
      clabel(C,h)
      xlabel ("x");
      ylabel ("y");
      zlabel ("f(x,y)");
      title ("f(x,y) = x^2 + 3y");
      grid on
      

      【讨论】:

      • 这是一个很好的答案。视觉效果可帮助初学者在此类事情上寻求最佳帮助。显示多个选项提供最高价值。
      • 您现在只需要surfc (see documentation) 使这个答案成为规范。希望你补充。
      【解决方案3】:

      除了来自@Toni@esskov 的出色答案之外,对于具有两个变量的函数的未来绘图仪,contourcontourf 函数对于某些应用程序很有用。

      MATLAB 代码(2018b):

      x = [-10:.1:10];    
      y = [-20:.1:20];
      [xx, yy] = meshgrid (x, y);
      z = xx.^2 + 3*yy;           % Borrowed 4 lines from @Toni
      
      figure
      s(1) = subplot(1,2,1), hold on  % Left Plot
          [M,c] = contour(xx,yy,z);   % Contour Plot
          c.ShowText = 'on';          % Label Contours
          c.LineWidth = 1.2;          % Contour Line Width
          xlabel('X')
          ylabel('Y')
          box on
      s(2) = subplot(1,2,2), hold on  % Right Plot
          [M2,c2] = contourf(xx,yy,z);
          colorbar                    % Add Colorbar
          xlabel('X')
          ylabel('Y')
          box on
      title(s(1),'Contour Plot')
      title(s(2),'Filled Contour Plot')
      

      更新:添加了surfc的示例

      h = surfc(xx,yy,z)
      

      【讨论】:

      • 当我用平面等高线图编辑我的答案时,我没有意识到你已经添加了等高线图。
      • @Toni 不用担心。您的回答非常出色,我只是认为这也应该添加。我看到你在我的帖子中添加了contourf。你的答案现在只是规范......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-07
      相关资源
      最近更新 更多