2009-07-15 15 views
5

Jaka jest zwykle stosowana metoda lub algorytm do wykreślania niejawnych równań 2 zmiennych?Jak wykreślić niejawne równania

mówię równań, takich jak

sin (x * y) * y = 20

X * X - Y * y = 1

itd

Czy ktoś wie, jak to robi Maple lub Matlab? Mój język docelowy to C#.

Wielkie dzięki!

Odpowiedz

9

Jednym ze sposobów jest wypróbowanie funkcji na zwykłej siatce 2D. Następnie możesz uruchomić algorytm, np. Maszerujące kwadraty na wynikowej siatce 2D, aby narysować iso-kontury.

W pokrewnym pytaniu ktoś również połączył się z kodem źródłowym gnuplot. Jest to dość skomplikowane, ale warto je przejrzeć. Możesz go znaleźć tutaj: http://www.gnuplot.info/

+2

Dziękuję za zapewnienie odpowiednich słów kluczowych do wyszukania. To wyszukiwanie (http://www.google.com.sg/search?q=Marching+squares+contours) szczególnie zwróciło kilka interesujących linków. – ARV

+0

@ARV który z tych interesujących linków rozwiązał twój problem. Czy udało Ci się pomyślnie utworzyć kod C#? – MySchizoBuddy

5

Powtórz wartość x w zakresie, który chcesz wydrukować. Dla każdej ustalonej wartości x rozwiąż równanie numerycznie za pomocą metody, takiej jak interval bisection lub Newton-Raphson method (dla której możesz obliczyć pochodną przy użyciu niejawnego różnicowania lub ewentualnie rozróżnić liczbowo). To da ci odpowiednią wartość y dla danego x. W większości przypadków nie trzeba wykonywać zbyt wielu iteracji, aby uzyskać dokładny wynik, a mimo to jest bardzo wydajny.

Zauważ, że będziesz musiał przekształcić równanie w formę f(x) = 0, choć zawsze jest to banalne. Zaletą tej metody jest to, że działa ona równie dobrze na odwrót (tj. Przyjmuje stały zakres y i oblicza x na wartość).

-3

myślę,

w Matlab podać tablicę jako wejście dla x.

następnie dla każdego x, oblicza y.

następnie rysuje linię od X0, Y0 do X1, Y1

następnie rysuje linię od x1, y1 do x2, y2

...

...