GNU Octave/Rozwiązanie uwikłanego równania nieliniowego

Rozwiązanie uwikłanego równania nieliniowego

edytuj
 
Graficzne rozwiązanie uwikłanego układu równań

Rozwiązać numerycznie uwikłany układ równań:

 

Zauważmy, że układ ten opisuje przecięcie okręgu o środku 0 i promieniu 1 z prostą  . Istnieją zatem dwa rozwiązania i można je obliczyć dokładnie:

 

Numerycznie rozwiążemy równanie za pomocą funkcjji fsolve.

Zdefiniujmy pewną funkcję wektorową  :

 

Będziemy szukać miejsc zerowych dla h, czyli wektorów   takich, że  

Zdefiniujmy funkcję h w pliku h.m:

function z=h(x)
   a=x(1)*x(1)+x(2)*x(2)-1;
   b=x(1)+x(2);
   z=[a,b];
endfunction;

Zdefiniujmy macierz pochodnej h w pliku hprim.m

function [y]=hprim(x)
   y = [2*x(1), 2*x(2); 1, 1 ];
endfunction;

Rozwiązujemy równanie wektorowe funkcją fsolve:

octave:5> fsolve(["h"; "hprim"], [1.0, -1.0])
ans =
  0.70711
 -0.70711
octave:6> fsolve(["h"; "hprim"], [-1.0, 1.0])
ans =
 -0.70711
  0.70711

Widać, że Octave rozwiązał równania poprawnie.