Metoda Newtona (Stycznych)

Przestrzenie wektorowe, bazy, liniowa niezależność, macierze.... Formy kwadratowe, twierdzenia o klasyfikacji...
janusz47
Użytkownik
Użytkownik
Posty: 7918
Rejestracja: 18 mar 2009, o 16:24
Płeć: Mężczyzna
Podziękował: 30 razy
Pomógł: 1671 razy

Metoda Newtona (Stycznych)

Post autor: janusz47 »

Metoda Newtona (Stycznych)

Metoda Newtona jest najczęściej stosowaną metodą, ze wszystkich iteracyjnych metod rozwiązywania równań.

W metodzie tej zamiast siecznej używa się styczną, rozpoczynając od punktu początkowego \(\displaystyle{ x_{0} }\) możliwie bliskiego poszukiwanej wartości \(\displaystyle{ \alpha.}\).

Następną aproksymację \(\displaystyle{ x_{1}}\) otrzymujemy w wyniku przecięcia się stycznej do funkcji \(\displaystyle{ f }\) w punkcie \(\displaystyle{ (x_{0}, f(x_{0}) }\) z osią \(\displaystyle{ Ox. }\)

Jeśli \(\displaystyle{ x_{n+1} }\) jest wartością otrzymaną sukcesywnie przez przecięcie się z osią \(\displaystyle{ Ox }\) stycznej w punkcie \(\displaystyle{

(x_{n}, f(x_{n})) }\)
w \(\displaystyle{ (n+1) }\) iteracji, to \(\displaystyle{ x_{n+1}= x_{n} - \frac{f(x_{n})}{f'(x_{n})} , \ \ n\geq 0, \ \ (1)}\)

zakładając , że \(\displaystyle{ f'(x_{n}) \neq 0. }\)

Równanie stycznej do krzywej w punkcie \(\displaystyle{ ( x_{0}, f(x_{0}) }\) ma postać:

\(\displaystyle{ y -f(x_{0}) = f'(x_{0})\cdot (x-x_{0}).}\)

Jeśli przez \(\displaystyle{ x_{1}}\) oznaczymy punkt w którym ta styczna przecina oś \(\displaystyle{ Ox }\) dla \(\displaystyle{ (y=0) }\), to

\(\displaystyle{ -f(x_{0}) = f'(x_{0})(x_{1}-x_{0}). }\)

Wyznaczając z tego równania \(\displaystyle{ x_{1}, }\) otrzymujemy

\(\displaystyle{ x_{1} = x_{0} - \frac{f(x_{0})}{f'(x_{0})} }\)

Powtarzając proces iteracyjny dla stycznej w punkcie \(\displaystyle{ (x_{1}, f(x_{1}) }\) mamy

\(\displaystyle{ x_{2} = x_{1} - \frac{f(x_{1})}{f'(x_{1})}. }\)

I tak dalej, otrzymując \(\displaystyle{ (1).}\)

Przyjmujemy takie same kryteria stopu jak w metodzie siecznych.

Program w OCTAVE

Kod: Zaznacz cały

function newton(f,df,x0,tol,n)
iter=0;
u=feval(f,x0);
v=feval(df,x0);
err=abs(v/u);
disp('__________________________________________________________')
disp(' iter     x           f(x)          df(x)      |xn+1-xn|')
disp('__________________________________________________________')
fprintf('%2.0f %12.6f %12.6f %12.6f\n',iter,x0,u,v)
while (err>tol)&(iter<=n)&(v~=0)
  x1=x0-u/v;
  err=abs(x1-x0);
  x0=x1;
  u=feval(f,x0);
  v=feval(df,x0);
  iter=iter+1;
  fprintf('%2.0f %12.6f %12.6f %12.6f %12.6f\n',iter,x0,u,v,err)
end
if (v==0)
  disp('Dzieleie przez zero')
end
if (iter>n)
  disp('Metoda nie jest zbieżna')
end

function f=f1(x)
  f=x.^3-x.^2-1;

function f=df1(x)
  f=3*x.^2-2*x;

>> newton('f1','df1',1,10^(-4),40)
__________________________________________________________
 iter     x           f(x)         df(x)     |xn+1-xn|
__________________________________________________________
 0     1.000000    -1.000000     1.000000
 1     2.000000     3.000000     8.000000     1.000000
 2     1.625000     0.650391     4.671875     0.375000
 3     1.485786     0.072402     3.651108     0.139214
 4     1.465956     0.001352     3.515168     0.019830
 5     1.465571     0.000001     3.512556     0.000385
 6     1.465571     0.000000     3.512555     0.000000
 
 
Awatar użytkownika
Mariusz M
Użytkownik
Użytkownik
Posty: 6909
Rejestracja: 25 wrz 2007, o 01:03
Płeć: Mężczyzna
Lokalizacja: 53°02'N 18°35'E
Podziękował: 2 razy
Pomógł: 1246 razy

Re: Metoda Newtona (Stycznych)

Post autor: Mariusz M »

Janusz a co z układami równań bo np gdy mamy wielomian stopnia większego niż dwa o współczynnikach rzeczywistych
\(\displaystyle{ W\left( x\right)=a_{n}x^{n}+a_{n-1}x^{n-1}+a_{n-2}x^{n-2}+\cdots+a_{1}x+a_{0} }\)
oraz chcemy znaleźć wszystkie pierwiastki nawet te zespolone unikając jednak arytmetyki zespolonej
Pewnym pomysłem będzie wtedy rozkład na czynniki kwadratowe

\(\displaystyle{ W\left( x\right)=V\left( x\right)\left( x^2-px+q\right)+R\left( p,q\right)x+S\left( p,q\right) }\)
Teraz chcemy aby \(\displaystyle{ R\left( p,q\right)}\) oraz \(\displaystyle{ S\left( p,q\right)}\)
z każdą iteracją były coraz bliższe zeru aż do zadanego \(\displaystyle{ \varepsilon}\)
Wobec tego dobrze by było zastosować metodę Newtona do układu równań
\(\displaystyle{ \begin{cases} R\left( p,q\right) = 0 \\ S\left( p,q\right)=0 \end{cases} }\)
janusz47
Użytkownik
Użytkownik
Posty: 7918
Rejestracja: 18 mar 2009, o 16:24
Płeć: Mężczyzna
Podziękował: 30 razy
Pomógł: 1671 razy

Re: Metoda Newtona (Stycznych)

Post autor: janusz47 »

Zmodyfikowaną Metodę Newtona jak i metodę Newtona dla układów równań przedstawię w swoim cyklu Metod Numerycznych.
Awatar użytkownika
Mariusz M
Użytkownik
Użytkownik
Posty: 6909
Rejestracja: 25 wrz 2007, o 01:03
Płeć: Mężczyzna
Lokalizacja: 53°02'N 18°35'E
Podziękował: 2 razy
Pomógł: 1246 razy

Re: Metoda Newtona (Stycznych)

Post autor: Mariusz M »

Wypadałoby też coś wspomnieć o warunku koniecznym i wystarczającym zbieżności bo
co będzie gdy np w jednej z iteracji dostaniemy punkt podejrzany o ekstremum lokalne funkcji \(\displaystyle{ f\left( x\right) }\)
albo gdy iteracje wygenerują nam ciąg okresowy
(W tym pierwszym przypadku może może bardziej precyzyjnym byłoby stwierdzenie że w pewnej
iteracji styczna do wykresu funkcji \(\displaystyle{ f\left( x\right) }\) w punkcie \(\displaystyle{ x_{i}}\) może być równoległa do osi odciętych)
ODPOWIEDZ