Do rysowania wykresu funkcji dwóch zmiennych można użyć funkcji plot3D(). Jednak nie zawsze trójwymiarowe przedstawienie pozwala na odczytanie szukanych punktów. Rozpatrzym przykładowo funkcję f(x, y) = x4 - 2x2y + y2. Funkcja ta opisuje poniższą płaszczyznę:
(%i1) | plot3d(x^4-2*x^2*y+y^2, [x, -2, 2], [y, 0, 10]); |
Wykres pozwala na zorientowanie się jak zmieniają się wartości funkcji w zależności argumentów oraz gdzie należy szukać lokalnych ekstremów. Podczas analizy funkcji dwóch zmiennych warto zapoznać się z planem warstwicowym funkcji.
Warstwica to taki zbiór punktów, który odpowiada pewna ustalona wartość c. Analizując tego typu zbiory można narysować plan warstwicowy. Wtedy zazwyczaj punkty ze zbioru tworzą krzywą, która przedstawiona na wykresie osiąga jedną i tą samą wartością c. Ogólnie pozwala to na przedstawienie funkcji dwóch zmiennych przy pomocy wykresu 2D. W programie Maxima istnieje funkcja contour_plot(), która rysuje plan warstwicowy dla podanej funkcji. Jej działanie polega na sprawdzeniu maksymalnej i minimalnej wartości w danym obszarze. Następnie zbiór wartości jest dzielona na pewną ilość równych przedziałów. Następnie dla każdej skrajnej wartości z każdego przedziału jest rysowana krzywa na wykresie.
W celu narysowania planu warstwicowego funkcji należy podać conajmniej trzy argumenty. Są to: wzór funkcji, zakres zmienności zmiennej x oraz y. Zapis tych argumentów pozostaje taki sam jak w przypadku tworzenia wykresu 2D oraz 3D. Oto przykładowy plan warstwicowy:
(%i2) | contour_plot(x^4-2*x^2*y+y^2, [x, -2, 2], [y, 0, 10]); |
Jak można zauważyć domyślnie rysuje się tylko parę linii co w przypadku bardzo dużej różnicy pomiędzy minimum, a maksimum może pozwolić poznać jak wygląda warstwica (jej kształt). Ponadto każda warstwa ma swój własny kolor, a w legendzie można podejrzeć jaką wartość reprezentuje.
Domyślnie program rysuje jedynie trzy kontuy. W celu dostosowania wykresu można dopisać argument gnuplot_preamble o wartości set cntrparam levels x, gdzie za x można wstawić dowolną liczbę. W ten sposób można określić ile warstw powinno zostać narysowanych. W przypadku bardzo dużej ilości warstw legenda bardzo szybko się rozrasta, więc warto ją ukryć ustawiając argument legend na false. W przypadku narysowania planu konturowego z 10 konturami plan przedstawia się teraz następująco:
(%i3) | contour_plot(x^4-2*x^2*y+y^2, [x, -2, 2], [y, 0, 10], [legend,false], [gnuplot_preamble, "set cntrparam levels 10"]); |
Ustawienia rysowania można ze sobą mieszać. Dzięki temu istnieje możliwość narysowania trójwymiarowego wykresu razem z konturami na podstawie. W ten sposób istnieje możliwość zapoznania się jak plan warstwicowy przechodzi na wykres 3D co nie musi być procesem oczywistym. W celu uzyskania takiego efektu należy użyć polecenia plot3D(), a w gnuplot_preamble dopisać set contour co da programowi wyraźny sygnał, że plan warstwicowy też powinien zostać narysowany. Przykładowo wykres może wyglądać następująco:
(%i4) | plot3d(x^4-2*x^2*y+y^2,[x,-2,2],[y,-0,10],[legend, false], [gnuplot_preamble,"set contour;set cntrparam levels 20"]); |
Wykres jest w pełni obracalny, ale najbardziej przydatny kąt widzenia jest z góry na wykres. Pod tym kątem kolory wykresu 3D oraz kontury zlewają się w jeden rysunek co powoduje, że można w prosty sposób określić jak szybko pomiędzy warstwami zmienia się wartość funkcji (patrząc po odcieniach kolorów). Ten szczególny przypadek to mapa funkcji i można go uzyskać zmieniając gnuplot_preamble na set view map. Dodając jeszcze informację o wyświetlaniu konturach można otrzymać poniższy wykres.
(%i5) | plot3d(x^4-2*x^2*y+y^2,[x,-2,2],[y,-0,10],[legend, false], [gnuplot_preamble,"set view map;set contour;set cntrparam levels 20"]); |
Teraz z wykresu można się dowiedzieć o wiele więcej niż z wykresu trójwymiarowego oraz samego wykresu konturowego. Dane są przejrzyste i jedyne co należy zrobic to dobrze się przyjrzeć. Jednak należy pamiętać, że każda metoda przedstawienia funkcji ma swoje wady jak i zalety.
Dana jest funkcja wzorem f(x, y) = (x2 + y2)0.5, która opisuje stożek. Wygeneruj plan warstwicowy oraz mapę funkcji. Przykładowy wykres łączący wykres 3D oraz plan warstwicowy powinien wyglądać następująco: