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

Z testwiki
Wersja z dnia 15:25, 12 kwi 2008 autorstwa imported>Lethern (skopiowane ze str głównej GNU Octave)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacji Przejdź do wyszukiwania

Rozwiązanie uwikłanego równania nieliniowego

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

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

{x2+y2=1x+y=0

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

{x=±2/2±0.707107y=2/20.707107

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

Zdefiniujmy pewną funkcję wektorową h:

h(xy)=(x2+y21x+y)

Będziemy szukać miejsc zerowych dla h, czyli wektorów (x0y0) takich, że h(x0y0)=(00)

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.


Szablon:Nawigacja