我想绘制重复圆弧的集合,但在绘制时遇到了伪线问题。例如,我想要的其中一个图由
a = @(x,y) ((mod(x,1) + 0.5).^2 + (mod(y,1) - 0.5).^2 - 1)
fimplicit(a,[-1,1],'MeshDensity',500)
但据我所知,输出是不正确的:
隐式函数在垂直线上肯定不是零。我假设f隐式算法和模算术发生了一些有趣的事情。有什么办法可以解决这个问题吗?谢谢!
发布于 2018-12-18 07:31:33
这很可能是因为你的函数是不连续的,在x=k这条线上有k个整数,如曲面图所示:
fsurf(a, [-2 2])
要验证中断是可能的原因,请考虑更简单的示例
f = @(x,y) (2*(x>=0)-1).*(2*(y>=0)-1);
这个函数在x= 0和y=0处是不连续的。它在x= 0和y= 0时从1跳到−1,但从不等于0。
fsurf(f, [-2 2])
可以看出,fimplicit
被不连续弄糊涂了,并认为函数在那里是0
的:
fimplicit(f,[-2,2],'MeshDensity',500)
查看fimplicit
的源代码,可以看到实际工作(至少在R2017b上)是由倒数第二行中的matlab.graphics.function.ImplicitFunctionLine
类完成的。该类是一个.p
文件,因此是混淆的,这意味着不幸的是它的源代码是不可见的。
https://stackoverflow.com/questions/53823969
复制相似问题