GNU Octave/Rysowanie funkcji zadanej w sposób uwikłany
Rysowanie funkcji zadanej w sposób uwikłany
edytujFunkcja zadana jest w sposób uwikłany, należy narysować jej wykres w otoczeniu zadanego punktu. Na przykład: y(x), gdzie na przedziale (górny półokrąg). Użyć funkcji fsolve.
Stwórzmy funkcję okrag w pliku okrag.m.
function [z]=okrag(y) global x; z=x*x+y*y-1; endfunction;
Zanim wywołamy fsolve(okrag) zmienna 'x' będzie odpowiednio ustawiana na zmiennej globalnej.
Zadajmy dane do obliczeń:
#liczba punktów, w których przybliżamy N=200; #przedział [A,B], w którym przybliżamy A=-1; B=1; #warunek brzegowy v=0.0; #funkcja którą rozwikłujemy fun="okrag" #podziałka h=(B-A)/N; #zainicjowanie wyniku wx=A.+h.*(0:1:N); wy=zeros(1,N+1); wy(1)=v; #zmienna przechowująca globalne, aktualnie badane x global x
Obliczamy wektor wy. W każdym kroku obliczamy wartość funkcji w punkcie . Jako przybliżoną początkową wartość dla bierzemy wartość z poprzedniego kroku (to ważne!).
for (k=1:N) x=wx(k+1); y=fsolve(fun, wy(k)); wy(k+1)=y; endfor;
Rysujemy obliczony wykres funkcji:
plot(wx, wy, "-r", wx, -wy, "-b");
Inny przykład narysowany tą metodą to wykres funkcji y(x), gdzie
A=-100; B=100; v=0.005
dla funkcji:
function [z]=u(y) global x; z=y+x*sin(y)+sin(x); endfunction;
Rysowanie wykresu funkcji odwrotnej
edytujSzczególnym przypadkiem rysowania funkcji danej w sposób uwikłany jest rysowanie funkcji odwrotnej, np (czyli ).
Stwórzmy plik mysin.m
function [z]=mysin(x) global y; z=sin(x)-y; endfunction;
Zadajmy warunki brzegowe:
A=-1; B=1; v=-pi/2; fun="mysin";
Obliczamy funkcję odwrotną:
global y; for (k=1:N) y=wx(k+1); wy(k+1)=fsolve(fun,wy(k)); endfor;
Rysujemy:
plot(wx,wy,"-r;sin(x)-y=0;");