在模块化函数上使用 fimplicit 的伪线
spurious lines using fimplicit on a modular function
我想绘制重复圆弧的集合,但在绘图中出现虚假线条时遇到了问题。例如我想要的其中一个地块由
给出
a = @(x,y) ((mod(x,1) + 0.5).^2 + (mod(y,1) - 0.5).^2 - 1)
fimplicit(a,[-1,1],'MeshDensity',500)
但据我所知输出不正确:
隐函数在垂直线上绝对不为零。我假设 fimplicit 算法和模块化算法正在发生一些有趣的事情。任何想法如何解决这个问题?谢谢!
这可能是因为您的函数在 x = k 行 discontinuous with k 整数,如曲面图所示:
fsurf(a, [-2 2])
要验证不连续性是可能的原因,请考虑更简单的 示例
f = @(x,y) (2*(x>=0)-1).*(2*(y>=0)-1);
此函数在 x = 0 和 y = 0 处不连续。它在 [=38 处从 1 跳到 −1 =]x = 0 和 y = 0,但它永远不会等于 0.
fsurf(f, [-2 2])
可以看出fimplicit
被不连续性搞糊涂了,认为函数是0
那里:
fimplicit(f,[-2,2],'MeshDensity',500)
查看 fimplicit
的 源代码 ,实际工作(至少在 R2017b 上)由 class matlab.graphics.function.ImplicitFunctionLine
在倒数第二行。 class 是一个 .p
文件,因此被 混淆了 ,这意味着不幸的是无法看到它的源代码。
我想绘制重复圆弧的集合,但在绘图中出现虚假线条时遇到了问题。例如我想要的其中一个地块由
给出a = @(x,y) ((mod(x,1) + 0.5).^2 + (mod(y,1) - 0.5).^2 - 1)
fimplicit(a,[-1,1],'MeshDensity',500)
但据我所知输出不正确:
隐函数在垂直线上绝对不为零。我假设 fimplicit 算法和模块化算法正在发生一些有趣的事情。任何想法如何解决这个问题?谢谢!
这可能是因为您的函数在 x = k 行 discontinuous with k 整数,如曲面图所示:
fsurf(a, [-2 2])
要验证不连续性是可能的原因,请考虑更简单的 示例
f = @(x,y) (2*(x>=0)-1).*(2*(y>=0)-1);
此函数在 x = 0 和 y = 0 处不连续。它在 [=38 处从 1 跳到 −1 =]x = 0 和 y = 0,但它永远不会等于 0.
fsurf(f, [-2 2])
可以看出fimplicit
被不连续性搞糊涂了,认为函数是0
那里:
fimplicit(f,[-2,2],'MeshDensity',500)
查看 fimplicit
的 源代码 ,实际工作(至少在 R2017b 上)由 class matlab.graphics.function.ImplicitFunctionLine
在倒数第二行。 class 是一个 .p
文件,因此被 混淆了 ,这意味着不幸的是无法看到它的源代码。