Это, вероятно, происходит, потому что ваша функция прерывистая в строках x = k с k целым числом, как показывает поверхностный график:
fsurf(a, [-2 2])
Чтобы убедиться, что разрыв является вероятной причиной, рассмотрим более простой пример
f = @(x,y) (2*(x>=0)-1).*(2*(y>=0)-1);
Эта функция прерывиста при x = 0 ив y = 0. Он изменяется от 1 до -1 при x = 0 и в y = 0, но никогда не равно 0.
fsurf(f, [-2 2])
Можно видеть, что fimplicit
смущен разрывом и думает, что функция 0
там:
fimplicit(f,[-2,2],'MeshDensity',500)
Если посмотреть на исходный код из fimplicit
, то реальная работа (по крайней мере на R2017b) выполняется классом matlab.graphics.function.ImplicitFunctionLine
во второй строке.Этот класс является .p
файлом, и поэтому он запутан , что означает, что, к сожалению, его исходный код не виден.