【问题标题】:How can I contour plot a custom function?如何等高线绘制自定义函数?
【发布时间】:2017-05-21 12:36:21
【问题描述】:

我有一个自定义函数,它根据两个给定的输入返回 0 或 1:

function val = myFunction(val1, val2)

  % logic to determine if val=1 or val=0

end

如何在以下网格生成的x,y 坐标上创建函数的等高线图?

meshgrid(0:.5:3, 0:.5:3);

此图将仅显示函数在等高线图上的0 或1 位置。

【问题讨论】:

  • 注意 - 你应该使用比 0.5 更好的分辨率,除非函数非常慢。

标签: matlab function plot contour


【解决方案1】:

如果您的函数myFunction 不是为处理矩阵输入而设计的,那么您可以使用函数ARRAYFUN 将其应用于x 和y 的所有对应条目:

[x,y] = meshgrid(0:0.5:3);      %# Create a mesh of x and y points
z = arrayfun(@myFunction,x,y);  %# Compute z (same size as x and y)

然后您可以使用函数CONTOUR 为上述数据生成等高线图。由于您的 z 数据只有 2 个不同的值,因此您可能只绘制一个等值线水平(其值为 0.5,介于两个值之间)。您可能还想改用函数CONTOURF,它会生成颜色填充的轮廓,清楚地显示一和零的位置:

contourf(x,y,z,1);  %# Plots 1 contour level, filling the area on either
                    %#   side with different color


注意:由于您正在绘制只有 1 和 0 的数据,因此绘制等高线可能不是可视化它的最佳方式。我会改用函数IMAGESC 之类的东西,如下所示:

imagesc(x(1,:),y(:,1),z);

请记住,此图中的 y 轴将相对于 CONTOURF 生成的图反转。

【讨论】:

    【解决方案2】:

    下面会做:

    function bincontour
        clear; clc;
    
        xrange = 0:.5:3;
        yrange = 1:.5:5;
        [xmesh, ymesh] = meshgrid(xrange, yrange);
        z = arrayfun(@myFunction, xmesh, ymesh);
    
        contourf(xrange, yrange, z, 5)
    end
    
    function val = myFunction(val1, val2)
        val = rand() > 0.5;
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      相关资源
      最近更新 更多