Как построить неявные уравнения - PullRequest
5 голосов
/ 15 июля 2009

Какой обычный метод или алгоритм используется для построения неявных уравнений двух переменных?

Я говорю о таких уравнениях, как

грех (х * у) * у = 20

х * х - у * у = 1

1009 * Etc. *

Кто-нибудь знает, как это делают Maple или Matlab? Мой целевой язык - C #.

Большое спасибо!

Ответы [ 4 ]

9 голосов
/ 15 июля 2009

Одним из способов сделать это является выборка функции из обычной двумерной сетки. Затем вы можете запустить алгоритм наподобие квадратов на результирующей 2D-сетке, чтобы нарисовать изо-контуры.

В связанном вопросе кто-то также связался с исходным кодом gnuplot. Это довольно сложно, но, возможно, стоит пройти. Вы можете найти его здесь: http://www.gnuplot.info/

5 голосов
/ 15 июля 2009

Повторяйте значение x по всему диапазону, который вы хотите построить. Для каждого фиксированного значения x решите уравнение численно, используя метод, такой как интервал деления на части или метод Ньютона-Рафсона (для которого можно вычислить производную с использованием неявного дифференцирования, или, возможно дифференцировать численно). Это даст вам соответствующее значение y для данного x. В большинстве случаев вам не потребуется слишком много итераций, чтобы получить очень точный результат, и в любом случае он очень эффективен.

Обратите внимание, что вам нужно будет преобразовать уравнение в форму f(x) = 0, хотя это всегда тривиально. Приятной особенностью этого метода является то, что он работает так же хорошо, как и наоборот (то есть принимает фиксированный диапазон y и вычисляет x на значение).

1 голос
/ 12 марта 2018

Есть несколько методов. Самый простой алгоритм, который я смог найти, описан здесь: https://homepages.warwick.ac.uk/staff/David.Tall/pdfs/dot1986b-implicit-fns.pdf и описывает то, что Нолдорин описал вам.

Здесь описан самый сложный и, по-видимому, тот, который действительно может решить множество особых случаев: https://academic.oup.com/comjnl/article/33/5/402/480353

0 голосов
/ 15 июля 2009

я думаю,

в Matlab вы даете массив в качестве ввода для х.

затем для каждого x вычисляется y.

затем рисует линию от x0, y0 до x1, y1

затем рисует линию от x1, y1 до x2, y2

...

...

...