GNU Octave/Rozwiązanie równania nieliniowego
Rozwiązanie równania nieliniowego
edytujRozwiązać numerycznie równanie .
Szukamy miejsc zerowych funkcji . Utwórzmy funkcję . W tym celu tworzymy osobny plik o nazwie P.m i treści:
function [y]=P(x) y=(6*x^4-x^3-7*x^2+x+1)+sin(x); endfunction;
Rozwiązujemy równanie za pomocją funkcji fsolve, która implementuje metodę podobną do metody Newtona. Jako parametry zadajemy funkcję "P" oraz pierwsze przybliżenie miejsca zerowego, np. 0:
octave:5> x0=fsolve("P",0.0) x0 = -0.27090
Uwaga: Octave musi widzieć plik P.m. Najłatwiej to osiągnąć, uruchamiając octave z tego samego katalogu, w którym znajduje się ten plik.
Miejscem zerowym jest . Sprawdźmy to:
octave:7> P(x0) ans = 0
Zadanie tolerancji
edytujSzukanie miejsc zerowych przy zadanej tolerancji:
fsolve_options("tolerance", 1e-5); fsolve("P",0.0);
Zadanie funkcji pochodnej
edytujPodawanie ręczne funkcji pochodnej (normalnie pochodna zostanie obliczona w sposób przybliżony):
function [y]=Pprim(x) y=(24*x^3-3*x^2-14*x+1) + cos(x); endfunction;
octave:13> mz=fsolve(["P"; "Pprim"], 0.0) mz = -0.27090
Szczegóły fsolve
edytujFunkcja fsolve zwraca również dodatkowe informacje:
- x - przybliżone miejsce zerowe
- info - informacja o wyniku wykonania, wartość 1 oznacza sukces,
- msg - komunikat dla użytkownika.
octave:19> [x,info,msg]=fsolve("sin", pi/2) x = 40.841 info = 3 msg = iteration is not making good progress
octave:20> [x,info,msg]=fsolve("sin", pi/3) x = 0 info = 1 msg = solution converged within specified tolerance