在给定级别切片轮廓图形

时间:2017-01-17 17:02:39

标签: matlab matlab-figure

我有以下函数(z),它应该输出一个图形,如果在f(x,y) = 0.001切片,结果图像应该是一条消息。

我写了这段代码,但我无法正确分割

[x,y] = meshgrid(-1.5:0.3:1.5,-2.5:0.5:2.5) ;
z=exp(-4*x.^2-2*y.^2)*cos(8*x)+exp(-3*((2*x+1)/2).^2-6*y.^2);           
% meshc (x,y,z, [0.001 0.001]);

meshc (x,y,z);

我错过了什么?

2 个答案:

答案 0 :(得分:0)

您需要使用contour而不是0.001来绘制网格与contour(x, y, z, [0.001 0.001]); 的交点,以便您可以准确指定要计算的值的值轮廓。

meshc

如果你想要使用LevelList,你可以使用包含轮廓图句柄的输出来将h = meshc(x, y, z); set(findobj(h, 'type', 'contour'), 'LevelList', [0.001 0.001]) 属性设置为你想要的值

{{1}}

至于获得可理解的信息,我认为智能是在旁观者眼中

enter image description here

答案 1 :(得分:0)

您可能正在寻找countour功能而不是meshcmeshc绘制网格图下的等高线图,但您不需要网格图来查看消息。实际上,countour文档显示了如何仅绘制特定级别的example

contour(x, y, z, [0.001 0.001])

我还怀疑你的功能没有正确定义。 exp(...) * cos(...)应该阅读exp(...) .* cos(...)

enter image description here

差的粒度使我相信应该减少样本间距(即,网格应该更精细):

[x,y] = meshgrid(-1.5:0.003:1.5,-2.5:0.005:2.5);

enter image description here

使用更精细的间距对原始函数进行轮廓描述也表明我认为*在表达式中可能应为.*的原因:

[x,y] = meshgrid(-1.5:0.003:1.5,-2.5:0.005:2.5);
z=exp(-4*x.^2-2*y.^2)*cos(8*x)+exp(-3*((2*x+1)/2).^2-6*y.^2);
contour(x, y, z, [0.001 0.001])

enter image description here

除非邮件是香肠形状的数量,否则我认为.*版本更有可能包含有用的信息。