GNU Octave/Rysowanie funkcji zadanej w sposób uwikłany

Rysowanie funkcji zadanej w sposób uwikłany

edytuj
 
Rysowanie okregu danego za pomocą funkcji uwikłanej  

Funkcja 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
 
Rysowanie wykresu funkcji danej w sposób uwikłany:  

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

edytuj

Szczególnym przypadkiem rysowania funkcji danej w sposób uwikłany jest rysowanie funkcji odwrotnej, np   (czyli  ).

 
Rysowanie wykresu funkcji odwrotnej do funkcji sinus.

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;");