При построении графиков по математическим формулам, особенно если они заданы в полярных координатах или в параметрической форме в окрестностях некоторых точек они могут существенно искажаться. Обычно это происходит вблизи точки O с координатами 0;0, потому что ошибка округления в районе этой точки имеет такой же порядок или даже выше, что и значения функции. Но есть и вторая причина этого – для некоторых функций 0 является пограничной точки, то есть с одной стороны нуля, как правило, с положительной функция определена, а с другой, как правило отрицательной – неопределенна. Примером такой функции является квадратный корень.
В некоторых случаях это преодолевается с помощью математических выкладок... Читать далее
При построении графиков по математическим формулам, особенно если они заданы в полярных координатах или в параметрической форме в окрестностях некоторых точек они могут существенно искажаться. Обычно это происходит вблизи точки O с координатами 0;0, потому что ошибка округления в районе этой точки имеет такой же порядок или даже выше, что и значения функции. Но есть и вторая причина этого – для некоторых функций 0 является пограничной точки, то есть с одной стороны нуля, как правило, с положительной функция определена, а с другой, как правило отрицательной – неопределенна. Примером такой функции является квадратный корень.
В некоторых случаях это преодолевается с помощью математических выкладок, чтобы на всем промежутке функция была определена. Хотя этот способ имеет ряд недостатков:
Не является универсальным
Не для всех функций дает желаемый результат
Бывает чрезвычайно сложно найти требуемые уравнения функции.
Но мы все-таки рассмотрим этот теоретический способ на примере построения кривой Лемниската Бернулли, которая очень напоминает лежащую восьмерку или знак бесконечности.
Как известно, Лемниската Бернулли в полярных координатах имеет следующее уравнения:
Для построения программы была использована программа моей разработки, написанная на языке C# по технологии NET WPF, использующая две сторонних библиотеки mXparser и OxyPlot. На данный момент программа может строить графики явных функций и кривые, заданные параметрическими уравнениями.
Любое уравнение кривой в полярных координатах можно записать в декартовых в параметрической форме. Пусть функция задана в полярных координатах следующем уравнением:
где ρ – полярный радиус, а φ-полярный угол
Тогда данное уравнение можно записать в декартовой системе координат можно записать в параметрической форме следующим образом:
Однако надо помнить компьютер строит любое изображение в декартовой системе координат. Даже если мы не переводим явно преобразование полярные координаты в декартовые, то внутри программы такое преобразование все равно происходит. И это может вызвать артефакты на графике.
Но прежде запишем для Лемнискаты Бернулли параметрические уравнения для декартовой системы координат:
Ниже приводится график, который построен по этим формулам по 100 точкам:

Вместо лемнискаты Бернулли мы получили какую-то гантелеобразную кривую.
При увеличение числа точек до 200 мы видим, что кривая стала намного плавнее и больше похожа на лемнискату Бернулли. Но если присмотреться, то в районе начала координат не наблюдается пересечение линий.

Можно и дальше увеличивать число точек, и наш график будет все ближе и ближе приближаться к истинной лемнискате Бернулли, но это увеличивает объемы требуемых расчетов для построения графиков и требуемую память для хранения массива точек в ОЗУ.
Но мы можем поступить хитрее и разработать принципиально другую математическую модель для данной кривой, которая будет лишена указанных недостатков. Но для этого нам придется сделать несколько математических выкладок.
Прежде, чем выполнить их запишем уравнение лемнискаты Бернулли в полярных координатах немного в другом виде:
И соответственно в декартовой системе координат оно запишется следующей системой параметрических уравнений:
или
Если сложить уравнения в последней системе, то получим:
или
Чтобы исключить из последнего выражения переменную φ, используем формулы перевода декартовых координат в полярные:
Подставив эти формулы в последнее уравнение лемнискаты Бернулли и сделав несложные арифметические преобразования получим уравнение данной кривой в декартовой системе координат:
Данное уравнение является неявным уравнением Лемнискаты Бернулли. Из него довольно сложно вывести зависимость одной декартовой координаты от другой. Чтобы это легче было сделать, сделаем следующую подстановку y=x·t
Данное уравнение легко решить относительно x:
И соответственно для у мы получим:
Последние два выражения определены, если t принадлежит отрезку [-1;1]
Они являются параметрическими уравнениями правой половины лемнискаты Бернулли. Чтобы построить левую половину достаточно x взять со знаком минус.
Данная математическая модель лучше исходной по следующим причинам:
Мы избавились от тригонометрических функций, которые являются основным источником ошибки округления.
Свели отрезок аргумента к отрезку [-1;1];
Данный график был построен по последней математической модели.

Данная кривая наиболее похожа на лемнискату Бернулли.
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку