ложные линии, использующие fimplicit на модульной функции - PullRequest
0 голосов
/ 18 декабря 2018

Я хочу построить набор повторяющихся дуг окружности, и у меня возникли проблемы с появлением на графиках паразитных линий.Например, один из графиков, который мне нужен, задается как

a = @(x,y) ((mod(x,1) + 0.5).^2 + (mod(y,1) - 0.5).^2 - 1)
fimplicit(a,[-1,1],'MeshDensity',500)

, но, насколько я могу судить, вывод неверный: enter image description here

Неявныйфункция определенно не равна нулю на линиях вертикали.Я предполагаю, что что-то смешное происходит с неявным алгоритмом и модульной арифметикой.Есть идеи как обойти это?Спасибо!

1 Ответ

0 голосов
/ 18 декабря 2018

Это, вероятно, происходит, потому что ваша функция прерывистая в строках 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 файлом, и поэтому он запутан , что означает, что, к сожалению, его исходный код не виден.

...