GNU Octave/Rozwiązanie uwikłanego równania nieliniowego
Rozwiązanie uwikłanego równania nieliniowego
edytujRozwią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.