Metoda tangentei

Isaac Newton

În analiză numerică, metoda tangentei (de asemenea, cunoscut sub numele de metoda Newton sau metoda Newton-Raphson[1]), este o metodă de determinare a rădăcinii unei funcții reale

f ( x ) = 0 . {\displaystyle f(x)=0\,.}

Descrierea metodei

Funcția ƒ este marcată cu culoarea albastră, iar tangenta cu culoarea roșie. Se observă că xn+1 este o aproximare mai bună decât xn pentru rădăcina x a funcției f.

Având o funcție reală ƒ, iar derivata ei, ƒ ', se începe cu stabilirea unei valori inițiale pentru x0 pentru o rădăcină a funcției f. O aproximare mai bună pentru rădăcina funcției este

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

Geometric, (x1, 0) se află la intersecția cu axa x a tangentei funcției f în punctul (x0). Procesul se repetă

x n + 1 = x n f ( x n ) f ( x n ) , {\displaystyle x_{n+1}=x_{n}-{\frac {f(x_{n})}{f'(x_{n})}},\,}

până se atinge o valoare suficient de precisă.

Se începe procesul cu o valoare inițială arbitrară x0.

Istorie

Numele "Metoda Newton" este derivat din faptul că Isaac Newton a descris un caz particular al metodei în De analysi per aequationes numero terminorum infinitas (scris în 1669, publicat în 1711 de către William Jones) și în De metodis fluxionum et serierum infinitarum (scrisă în 1671, tradus și publicat ca Metoda fluctuațiilor în 1736 de către John Colson). Totuși, metoda lui diferă substanțial de metoda modernă de mai sus: Newton aplică metoda numai pentru polinoame. El nu calcula aproximări succesive x n {\displaystyle x_{n}} , dar calculează o secvență de polinoame și numai la sfârșit el ajunge la o aproximare a rădăcinii x. În cele din urmă, Newton consideră metoda ca pur algebrică și nu face nici o mențiune cu privire la calculul numeric. Metoda lui Isaac Newton poate fi derivată de la o metodă similară, dar mai puțin precisă, metoda lui Vieta. Esența metodei Vieta lui poate fi găsită în lucrările matematicianului persan Sharaf al-Din al-Tusi, în timp ce succesorul său Jamshīd al-Kāshī a folosit o formă a metodei Newton pentru a rezolva x P N = 0 {\displaystyle x^{P}-N=0} t pentru a găsi rădăcinile lui N. Un caz particular al metodei Newton pentru calcularea rădăcini pătrate a fost cunoscut mult mai devreme și este adesea numit „metoda babiloniană”.

Metoda Newton a fost folosită de către matematicianul japonez din secolul 17 Seki Kōwa pentru a rezolva ecuații cu o singură variabilă, deși legătura cu calculul lipsea.

Metoda Newton a fost publicată prima dată în 1685, în Tratat istoric și practic de algebră de John Wallis. În 1690, Joseph Raphson a publicat o descriere simplificată în Analysis aequationum universalis. Raphson prezenta metoda Newton ca o metodă pur algebrică și limita utilizarea sa la funcții polinomiale, dar el descrie metoda în termeni de aproximări succesivexn în loc de mai complicata secvență de polinoame utilizate de Newton.

În cele din urmă, în 1740, Thomas Simpson a descris metoda Newton ca o metodă iterativă pentru rezolvarea ecuațiilor generale neliniare utilizând calculul, oferind, în esență, descrierea de mai sus. În aceeași publicație, Simpson oferă, de asemenea, generalizarea la sistemele de două ecuații și constată că metoda Newton poate fi folosit pentru rezolvarea problemelor de optimizare prin setarea gradientului din zero.

Arthur Cayley în 1879, în Problema imaginar Newton-Fourier a fost primul care a observat dificultăți în generalizarea metodei Newton la rădăcinile complexe de polinoame cu un grad mai mare de 2 și valorile inițiale complexe. Acest lucru a deschis calea pentru studiul teoriei iterațiilor funcțiilor raționale.

Demonstrația convergenței pătratice

Să presupunem că ƒ : [ab] → R este o funcție derivabilă definită pe intervalul [ab] cu valori în mulțimea numerelor reale  R.

Formula de convergență a rădăcinii poate fi ușor dedusă. Să presupunem că avem o aproximare curentă xn. Atunci putem obține formula pentru o mai bună aproximare, xn+1 . Știm din definiția derivatei unui punct dat că este panta unei tangente în acel punct.

Fie

f ( x n ) = Δ y Δ x = f ( x n ) 0 x n x n + 1 , {\displaystyle f'(x_{n})={\frac {\Delta y}{\Delta x}}={\frac {f(x_{n})-0}{x_{n}-x_{n+1}}},\,}

Să notăm rădăcina cu α . {\displaystyle \alpha \,.} .

Conform formulei lui Taylor, dacă funcția f(x) are a doua derivată continuă, atunci poate fi reprezentată în punctul α . {\displaystyle \alpha \,.} cu formula:

f ( α ) = f ( x n ) + f ( x n ) ( α x n ) + 1 2 ! f ( ξ n ) ( α x n ) 2 , {\displaystyle f(\alpha )=f(x_{n})+f^{\prime }(x_{n})(\alpha -x_{n})+{\frac {1}{2!}}f^{\prime \prime }(\xi _{n})(\alpha -x_{n})^{2}\,,}

unde ξn este cuprins între xn și α . {\displaystyle \alpha \,.}

Rezultă că

0 = f ( α ) = f ( x n ) + f ( x n ) ( α x n ) + 1 2 f ( ξ n ) ( α x n ) 2 {\displaystyle 0=f(\alpha )=f(x_{n})+f^{\prime }(x_{n})(\alpha -x_{n})+{\frac {1}{2}}f^{\prime \prime }(\xi _{n})(\alpha -x_{n})^{2}\,}

Împărțind cu f ( x n ) {\displaystyle f^{\prime }(x_{n})\,} , obținem:

f ( x n ) f ( x n ) + ( α x n ) = f ( ξ n ) 2 f ( x n ) ( α x n ) 2 {\displaystyle {\frac {f(x_{n})}{f^{\prime }(x_{n})}}+\left(\alpha -x_{n}\right)={\frac {-f^{\prime \prime }(\xi _{n})}{2f^{\prime }(x_{n})}}\left(\alpha -x_{n}\right)^{2}}

Ținând cont de formula

x n + 1 = x n f ( x n ) f ( x n ) , {\displaystyle x_{n+1}=x_{n}-{\frac {f(x_{n})}{f^{\prime }(x_{n})}}\,,}

rezultă că:

α x n + 1 ϵ n + 1 = f ( ξ n ) 2 f ( x n ) ( α x n ϵ n ) 2 . {\displaystyle \underbrace {\alpha -x_{n+1}} _{\epsilon _{n+1}}={\frac {-f^{\prime \prime }(\xi _{n})}{2f^{\prime }(x_{n})}}(\underbrace {\alpha -x_{n}} _{\epsilon _{n}})^{2}\,.}

deci

ϵ n + 1 = f ( ξ n ) 2 f ( x n ) ϵ n 2 . {\displaystyle \epsilon _{n+1}={\frac {-f^{\prime \prime }(\xi _{n})}{2f^{\prime }(x_{n})}}\,{\epsilon _{n}}^{2}\,.}

Dacă funcția f este de clasă C 3 {\displaystyle C^{3}} pe intervalul [a,b] care include soluția x*, atunci f, f' și f, fiind continue pe un interval închis, sunt mărginite pe acel interval. Notând cu M - maximul în valoare absolută al funcției f/(2*f'), atunci

| α x n + 1 | <= M . | α x n | {\displaystyle |\alpha -x_{n}+1|<=M.|\alpha -x_{n}|\,}

Deci raza de convergență R>=1/M. Alegând prima iterație : α {\displaystyle \alpha \,} astfel încât : | α x 0 | <= 1 / M {\displaystyle |\alpha -x_{0}|<=1/M\,} obținem un șir convergent la soluția : α {\displaystyle \alpha \,} .

Se demonstrează că daca funcția f este strict monotonă (f' de semn constant si nu se anulează) și convexă sau concavă (f de semn constant) pe intervalul cuprins între rădăcină și valoarea de estimare inițială, atunci algoritmul converge, iar convergența sa este pătratică. Intr-adevăr, din

f ( x n + 1 ) {\displaystyle f(x_{n+1})\,} = f ( x n ) + f ( x n ) ( x n + 1 x n ) + 1 2 ! f ( ξ n ) ( x n + 1 x n ) 2 , {\displaystyle f(x_{n})+f^{\prime }(x_{n})(x_{n+1}-x_{n})+{\frac {1}{2!}}f^{\prime \prime }(\xi _{n})(x_{n+1}-x_{n})^{2}\,,}

unde ξn este cuprins între xn și xn+1, si din

x n + 1 x n = f ( x n ) f ( x n ) , {\displaystyle x_{n+1}-x_{n}=-{\frac {f(x_{n})}{f^{\prime }(x_{n})}}\,,}

rezultă că

f ( x n + 1 ) = f ( x n ) f ( x n ) ( f ( x n ) f ( x n ) ) + 1 2 ! f ( ξ n ) ( f ( x n ) f ( x n ) ) 2 {\displaystyle f(x_{n+1})=f(x_{n})-f^{\prime }(x_{n})\left({\frac {f(x_{n})}{f^{\prime }(x_{n})}}\right)+{\frac {1}{2!}}f^{\prime \prime }(\xi _{n})\left({\frac {f(x_{n})}{f^{\prime }(x_{n})}}\right)^{2}\,}

de unde

f ( x n + 1 ) = 1 2 ! f ( ξ n ) ( f ( x n ) f ( x n ) ) 2 {\displaystyle f(x_{n+1})={\frac {1}{2!}}f^{\prime \prime }(\xi _{n})\left({\frac {f(x_{n})}{f^{\prime }(x_{n})}}\right)^{2}\,}

De aici și din

x n + 2 x n + 1 = f ( x n + 1 ) f ( x n + 1 ) , {\displaystyle x_{n+2}-x_{n+1}=-{\frac {f(x_{n+1})}{f^{\prime }(x_{n+1})}}\,,}

rezultă că

x n + 2 x n + 1 = 1 2 ! . f ( ξ n ) f ( x n + 1 ) ( f ( x n ) f ( x n ) ) 2 , {\displaystyle x_{n+2}-x_{n+1}=-{\frac {1}{2!}}.{\frac {f''(\xi _{n})}{f'(x_{n+1})}}\left({\frac {f(x_{n})}{f'(x_{n})}}\right)^{2}\,,}

Termenii șirului x n + 2 x n + 1 {\displaystyle x_{n+2}-x_{n+1}} au același semn cu f f {\displaystyle -{\frac {f''}{f'}}} . Deci șirul f ( x n ) {\displaystyle f(x_{n})} este monoton începând cu iterația a doua. Pentru că este și mărginit, rezultă că este convergent.

Pentru a calcula limita, trecem la limită în ecuația

x n + 1 = x n f ( x n ) f ( x n ) , {\displaystyle x_{n+1}=x_{n}-{\frac {f(x_{n})}{f^{\prime }(x_{n})}}\,,}

rezultă că

l = l f ( l ) f ( l ) , {\displaystyle l=l-{\frac {f(l)}{f^{\prime }(l)}}\,,}

unde l este limita funcției. Deci f(l)=0, de unde rezultă că limita șirului este chiar rădăcina unică a funcției f(x)=0 pe intervalul de definiție.

Exemple

Rădăcina pătrată a unui număr

Dacă se dorește calculul rădăcinii pătrate din 612, acest lucru este echivalent cu găsirea soluției ecuației

x 2 = 612 {\displaystyle \,x^{2}=612}

având derivata

f ( x ) = 2 x . {\displaystyle f'(x)=2x.\,}

Cu o estimare inițială de 10, secvența dată de metoda Newton este

x 1 = x 0 f ( x 0 ) f ( x 0 ) = 10 10 2 612 2 10 = 35.6 x 2 = x 1 f ( x 1 ) f ( x 1 ) = 35.6 35.6 2 612 2 35.6 = 2 _ 6.395505617978 x 3 = = = 24.7 _ 90635492455 x 4 = = = 24.7386 _ 88294075 x 5 = = = 24.7386337537 _ 67 {\displaystyle {\begin{matrix}x_{1}&=&x_{0}-{\dfrac {f(x_{0})}{f'(x_{0})}}&=&10-{\dfrac {10^{2}-612}{2\cdot 10}}&=&35.6\quad \quad \quad {}\\x_{2}&=&x_{1}-{\dfrac {f(x_{1})}{f'(x_{1})}}&=&35.6-{\dfrac {35.6^{2}-612}{2\cdot 35.6}}&=&{\underline {2}}6.395505617978\dots \\x_{3}&=&\vdots &=&\vdots &=&{\underline {24.7}}90635492455\dots \\x_{4}&=&\vdots &=&\vdots &=&{\underline {24.7386}}88294075\dots \\x_{5}&=&\vdots &=&\vdots &=&{\underline {24.7386337537}}67\dots \end{matrix}}}

Cifrele corecte sunt cele subliniate. Cu doar câteva iterații se poate obține o soluție corectă la mai multe zecimale.

Soluția ecuației cos(x) = x3

Considerăm problema găsirii numărul pozitiv x astfel încât cos(x) = x3, sau echivalent f(x) = cos(x) − x3. Avem f'(x) = −sin(x) − 3x2. Deoarece cos(x) ≤ 1 pentru toate x șix3 > 1 pentru x > 1, știm că rădăcina noastră se află între 0 și 1. Încercăm o valoare de pornire de x0 = 0.5

x 1 = x 0 f ( x 0 ) f ( x 0 ) = 0.5 cos ( 0.5 ) ( 0.5 ) 3 sin ( 0.5 ) 3 ( 0.5 ) 2 = 1.112141637097 x 2 = x 1 f ( x 1 ) f ( x 1 ) = = 0. _ 909672693736 x 3 = = = 0.86 _ 7263818209 x 4 = = = 0.86547 _ 7135298 x 5 = = = 0.8654740331 _ 11 x 6 = = = 0.865474033102 _ {\displaystyle {\begin{matrix}x_{1}&=&x_{0}-{\dfrac {f(x_{0})}{f'(x_{0})}}&=&0.5-{\dfrac {\cos(0.5)-(0.5)^{3}}{-\sin(0.5)-3(0.5)^{2}}}&=&1.112141637097\\x_{2}&=&x_{1}-{\dfrac {f(x_{1})}{f'(x_{1})}}&=&\vdots &=&{\underline {0.}}909672693736\\x_{3}&=&\vdots &=&\vdots &=&{\underline {0.86}}7263818209\\x_{4}&=&\vdots &=&\vdots &=&{\underline {0.86547}}7135298\\x_{5}&=&\vdots &=&\vdots &=&{\underline {0.8654740331}}11\\x_{6}&=&\vdots &=&\vdots &=&{\underline {0.865474033102}}\end{matrix}}}

Cifrele corecte sunt cele subliniate. În special, x6 este corect pentru numărul de zecimale dat. Vom vedea că numărul de zecimale exacte corecte crește de la 2 (pentru x 3 ), la 5 și apoi la 10, ceea ce ilustrează convergența pătratică.

Pseudocod

 N ← 1
x=a;
y=f(x);
y1=f1(x);      //f1 este derivata lui f

 While N ≤ NMAX
{ 
	x=x-y/y1
	y=f(x)
	y1=f1(x)
   If (f(x) = 0 then 
{ 
     Output(x)
     Stop
}
  N ← N + 1 
 }
 Output("Algoritmul nu determină soluția în numărul maxim de iterații.") 

In limbajul C++

#include <iostream>
#include <cmath>
#define eps 0.00000000001
#define iter 200

double f(double x) {
    return x*x*x-2*x*x*cos(x)+x-3;
}

//f1 este derivata functiei f
double f1(double x) {
    return 3*x*x+2*x*x*sin(x)-4*x*cos(x)+1;
}

double itang(double a) {
    int i;
    double x,y1,y;
    i=0;
    x=a;
    y=f(x);
    y1=f1(x);
    
    while ( (i<=iter) && ((y<-eps) || (y>eps)) ) {
    	x=x-y/y1;
    	y=f(x);
    	y1=f1(x);
    	cout << "\n\nf(" << x << ")=" << y << " la iteratia " << i;
    	i++;
    }
    if (i>iter) {
    	cout<<"Problema nu se poate rezolva in nr. maxim de iteratii";
    	return 0;
    } 
    //Din cauza metodei TI-207, nu se va afisa rezultatul in caz ca radacina va fi egala cu 0.
    else 
        return x;
}

int main() {
    double x, a;
    cout << "a= ";
    cin >> a;
    x=itang(a);
    if (x!=0) 
        cout << '\n' << x;
    return 0;
}

Note

  1. ^ Joseph Louis Lagrange et Louis Poinsot, Traité de la résolution des équations numériques de tous les degrés

Bibliografie

  • Constantin Ilioi, Probleme de optimizare și algoritmi de aproximare a soluțiilor, Editura Academiei Republicii Socialiste România, București, 1980.
  • Colcer, Laurian, Algoritm cu ordin ridicat de convergență pentru rezolvarea unei clase de ecuații în spații normate, în Studii și Cercetări Matematice, Editura Academiei Republicii Socialiste România, București, nr. 3/1985

Legături externe

Portal icon Portal Matematică
  • http://www.utgjiu.ro/math/mbuneci/book/mn2009.pdf
  • http://cs.upm.ro/~bela.finta/.files/carti/Numerika.pdf Arhivat în , la Wayback Machine.