Newtons metod

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 25 januari 2022; kontroller kräver 3 redigeringar .

Newtons metod, Newtons algoritm ( även känd som tangentmetoden ) är en iterativ numerisk metod för att hitta roten ( noll ) av en given funktion . Metoden föreslogs först av den engelske fysikern , matematikern och astronomen Isaac Newton ( 1643-1727 ) . Sökandet efter en lösning utförs genom att konstruera successiva approximationer och bygger på principerna för enkel iteration . Metoden har kvadratisk konvergens . En modifiering av metoden är metoden för ackord och tangenter . Dessutom kan Newtons metod användas för att lösa optimeringsproblem där det krävs att bestämma nollpunkten för den första derivatan eller gradienten i fallet med ett flerdimensionellt utrymme.

Beskrivning av metoden

Motivering

För att numeriskt lösa ekvationen med den enkla iterationsmetoden måste den reduceras till en ekvivalent ekvation: , där  är sammandragningsavbildningen .

För bästa konvergens av metoden vid punkten för nästa approximation måste villkoret vara uppfyllt . Lösningen av denna ekvation söks i formen , då:

Om man antar att approximationspunkten är "tillräckligt nära" roten och att den givna funktionen är kontinuerlig , är den slutliga formeln för :

Med detta i åtanke är funktionen definierad:

Under vissa förhållanden utför denna funktion en sammandragningsmappning i ett område av roten.

Bevis

Låt en funktion av en reell variabel ges som är två gånger kontinuerligt differentierbar i sin definitionsdomän och vars derivata aldrig försvinner:

Och det är nödvändigt att bevisa att funktionen utför en sammandragningsmappning nära roten av ekvationen .

På grund av funktionens kontinuerliga differentiabilitet och olikheten noll är dess första derivata kontinuerlig .

Derivaten är:

Under de villkor som ställs på är den också kontinuerlig. Låt vara  den önskade roten till ekvationen: , därför i dess grannskap :

Sedan enligt Lagranges sats :

På grund av det faktum att i samma deltakvarter är följande sant:

Den sålunda erhållna funktionen i närheten av roten implementerar en sammandragningsmappning .

I detta fall reduceras algoritmen för att hitta en numerisk lösning till ekvationen till en iterativ beräkningsprocedur :

Enligt Banachs teorem tenderar sekvensen av approximationer till roten av ekvationen .

Geometrisk tolkning

Huvudidén med metoden är följande: den initiala approximationen sätts nära den hypotetiska roten, varefter en tangent till grafen för funktionen som studeras plottas vid approximationspunkten, för vilken skärningspunkten med abskissaxeln är hittades. Denna punkt tas som nästa approximation. Och så vidare, tills den erforderliga noggrannheten uppnås.

Låt 1) en verkligt värderad funktion vara kontinuerligt differentierbar på intervallet  ; 2) det finns en nödvändig punkt  :  ; 3) det finns också sådana att för och för  ; 4) poängen är sådan att . Sedan kan formeln för iterativ approximation till k härledas från tangentens geometriska betydelse enligt följande:





var  är lutningsvinkeln för tangentlinjen till grafen vid punkten .

Därför (i tangentlinjens ekvation antar vi ) har det önskade uttrycket för formen:

Om , då kan detta värde användas som nästa approximation till .

Om , så finns det en "flykt" (roten ligger nära gränsen ). I det här fallet är det nödvändigt (med hjälp av idén om halveringsmetoden ) att ersätta med tills punkten "återgår" till sökområdet .

Anmärkningar. 1) Närvaron av en kontinuerlig derivata gör det möjligt att bygga en kontinuerligt föränderlig tangent på hela området för sökningen efter en lösning . 2) Fall av gräns (vid en punkt eller vid en punkt ) placering av den önskade lösningen betraktas på liknande sätt. 3) Ur geometrisk synvinkel betyder likhet att tangentlinjen till grafen i punkten - är parallell med axeln och inte skär den i slutet. 4) Ju större konstant och ju mindre konstant från punkt 3 av villkoren, desto närmare skärningspunkten för tangenten till grafen och axeln till punkten , det vill säga desto närmare värdet till det önskade .


Den iterativa processen börjar med en viss initial approximation , och mellan och den önskade punkten bör det inte finnas andra nollor i funktionen , det vill säga "ju närmare den önskade roten , desto bättre." Om det inte finns några antaganden om att hitta , kan trial and error begränsa intervallet av möjliga värden genom att tillämpa mellanvärdessatsen .

För fördefinierade slutar den iterativa processen om och . I synnerhet för visningsmatrisen och kan beräknas baserat på grafens displayskala , det vill säga om och faller i en vertikal och i en horisontell rad.

Algoritm

  1. Den initiala approximationen är inställd .
  2. Tills stoppvillkoret är uppfyllt, vilket kan tas som eller (det vill säga felet ligger inom de erforderliga gränserna), beräknas en ny approximation: .

Exempel

Tänk på problemet med att hitta positivt , för vilket . Denna uppgift kan representeras som uppgiften att hitta nollpunkten för funktionen . Vi har ett uttryck för derivatan . Eftersom för alla och för , är det uppenbart att lösningen ligger mellan 0 och 1. Låt oss ta värdet som en initial approximation , då:

Giltiga signifikanta siffror är understrukna . Det kan ses att deras antal ökar från steg till steg (ungefär fördubblas med varje steg): från 1 till 2, från 2 till 5, från 5 till 10, vilket illustrerar den kvadratiska konvergenshastigheten .


Användarvillkor

Låt oss överväga ett antal exempel som pekar på bristerna i metoden.

Motexempel

Låta

Sedan

Låt oss ta noll som en första gissning. Den första iterationen ger enheten som en approximation. I sin tur kommer tvåan återigen att ge noll. Metoden kommer att loopa och ingen lösning kommer att hittas. Generellt sett kan konstruktionen av en sekvens av approximationer vara mycket förvirrande .

Tänk på en funktion:

Då och överallt utom 0.

I närheten av roten ändrar derivatan tecken när den närmar sig noll från höger eller vänster. Medan för .

Således är den inte begränsad nära roten, och metoden kommer att divergera, även om funktionen är differentierbar överallt, dess derivata är icke-noll vid roten, oändligt differentierbar överallt utom vid roten, och dess derivata är avgränsad runt roten .

Tänk på ett exempel:

Då och utom där det inte är definierat.

I nästa steg har vi :

Konvergenshastigheten för den resulterande sekvensen är ungefär 4/3. Detta är betydligt mindre än 2, vilket är nödvändigt för kvadratisk konvergens, så i detta fall kan vi bara tala om linjär konvergens, även om funktionen är kontinuerligt differentierbar överallt , är derivatan vid roten inte lika med noll, och är oändligt differentierbar överallt utom vid roten.

Låta

Då och därav . Metodens konvergens är alltså inte kvadratisk, utan linjär, även om funktionen är oändligt differentierbar överallt.

Begränsningar

Låt ekvationen ges , var och det är nödvändigt att hitta sin lösning.

Nedan följer formuleringen av huvudsatsen, som gör att vi kan ge tydliga förutsättningar för tillämpbarhet. Den bär namnet på den sovjetiske matematikern och ekonomen Leonid Vitalievich Kantorovich ( 1912-1986 ) .

Kantorovichs teorem.

Om det finns konstanter så att:

  1. på , det vill säga den existerar och är inte lika med noll;
  2. på , det vill säga begränsad;
  3. på , och ;

Dessutom längden på det betraktade segmentet . Då är följande påståenden sanna:

  1. det finns en rot av ekvationen ;
  2. om , då konvergerar den iterativa sekvensen till denna rot: ;
  3. felet kan uppskattas med formeln .

Från det sista påståendet i satsen, i synnerhet, följer metodens kvadratiska konvergens :

Då kommer begränsningarna för den ursprungliga funktionen att se ut så här:

  1. funktionen måste begränsas;
  2. funktionen måste vara jämn , två gånger differentierbar ;
  3. dess första derivata är enhetligt separerad från noll;
  4. dess andra derivata måste vara enhetligt begränsad.

Historisk bakgrund

Metoden beskrevs av Isaac Newton i manuskriptet On the Analysis by Equations of Infinite Series ( latin:  De analysi per aequationes numero terminorum infinitas ) adresserat till Barrow 1669 , och i The Method of Fluxions and Infinite Series ( latin: De metodis fluxionum et serierum infinitarum" ) eller " Analytisk geometri " ( lat. "Geometria analytica" ) i samlingarna av Newtons verk, som skrevs 1671 . I sina skrifter introducerar Newton begrepp som expansionen av en funktion till en serie , infinitesimals och fluxioner ( derivator i nuvarande mening). Dessa verk publicerades mycket senare: det första publicerades 1711 tack vare William Johnson, det andra publicerades av John Colzon 1736 efter skaparens död. Men beskrivningen av metoden skilde sig väsentligt från hans nuvarande utläggning: Newton tillämpade sin metod uteslutande på polynom . Han beräknade inte successiva approximationer , utan en sekvens av polynom och som ett resultat fick en ungefärlig lösning .   

Metoden publicerades först i avhandlingen "Algebra" av John Wallis 1685, på vars begäran den kortfattat beskrevs av Newton själv. År 1690 publicerade Joseph Raphson en förenklad beskrivning i sin "Analysis aequationum universalis" ( latin:  "Analysis aequationum universalis" ). Raphson såg Newtons metod som rent algebraisk och begränsade dess tillämpning till polynom, men han beskrev metoden i termer av successiva approximationer istället för den svårare att förstå sekvensen av polynom som används av Newton. Slutligen, 1740, beskrevs Newtons metod av Thomas Simpson som en första ordningens iterativ metod för att lösa icke-linjära ekvationer med hjälp av en derivata, som presenteras här. I samma publikation generaliserade Simpson metoden till fallet med ett system med två ekvationer och noterade att Newtons metod också kan tillämpas på optimeringsproblem genom att hitta nollpunkten för derivatan eller gradienten .

År 1879 var Arthur Cayley , i The  Newton-Fourier imaginary problem, den förste som påpekade svårigheterna med att generalisera Newtons metod till fallet med imaginära rötter av polynom av högre grad än de andra och komplexa initiala approximationerna. Detta arbete banade väg för studier av fraktal teori .

Generaliseringar och ändringar

Sekantmetoden

Den relaterade sekantmetoden är Newtons "ungefärliga" metod och undviker att beräkna derivatan. Värdet på derivatan i den iterativa formeln ersätts av dess uppskattning för de två föregående iterationspunkterna:

.

Således har huvudformeln formen

Denna metod liknar Newtons, men har en något långsammare konvergenshastighet. Metodens konvergensordning är lika med det gyllene  snittet - 1,618 ...

Anmärkningar. 1) För att starta den iterativa processen krävs två olika värden av och . 2) I motsats till den "riktiga Newtonmetoden" (tangensmetoden), som endast kräver lagring (och tillfälligt under beräkningar och ), kräver sekantmetoden att spara , , , . 3) Den används om beräkningen är svår (till exempel kräver den en stor mängd maskinresurser: tid och/eller minne).

One tangent-metod

För att minska antalet anrop till värdena för derivatan av en funktion används den så kallade entangentmetoden.

Iterationsformeln för denna metod är:

Kärnan i metoden är att beräkna derivatan endast en gång, vid den initiala approximationspunkten , och sedan använda detta värde vid varje efterföljande iteration:

Med detta val gäller följande jämlikhet vid punkten :

och om segmentet på vilket närvaron av en rot antas och den initiala approximationen väljs är tillräckligt liten, och derivatan är kontinuerlig, kommer värdet inte att skilja sig mycket från och därför kommer grafen att passera nästan horisontellt och skära rak linje , vilket i sin tur kommer att säkerställa snabb konvergens av sekvensen av approximationspunkter till roten.

Denna metod är ett specialfall av den enkla iterationsmetoden . Den har en linjär konvergensordning.

Flerdimensionellt fall

Låt oss generalisera det erhållna resultatet till det flerdimensionella fallet.

Låt det vara nödvändigt att hitta en lösning på systemet:

Genom att välja ett initialt värde , hittas successiva approximationer genom att lösa ekvationssystem :

var .


Som tillämpat på optimeringsproblem

Låt det vara nödvändigt att hitta minimum av en funktion av flera variabler . Denna uppgift är likvärdig med problemet att hitta nollpunkten för gradienten . Låt oss tillämpa ovanstående Newtons metod:

var  är hessian för funktionen .

I en mer bekväm iterativ form ser detta uttryck ut så här:

Det bör noteras att i fallet med en kvadratisk funktion hittar Newtons metod ett extremum i en iteration.

Att hitta den hessiska matrisen är beräkningsmässigt dyrt och ofta omöjligt. I sådana fall kan kvasi-newtonska metoder fungera som ett alternativ , där en approximation av den hessiska matrisen byggs i processen att ackumulera information om funktionens krökning.

Newton-Raphson-metoden

Newton-Raphson-metoden är en förbättring av Newtons extremummetod som beskrivs ovan. Den största skillnaden är att vid nästa iteration väljer en av metoderna för endimensionell optimering det optimala steget:

där För att optimera beräkningarna används följande förbättring: istället för att räkna om hessian för objektivfunktionen vid varje iteration begränsar vi oss till den initiala approximationen och uppdaterar den bara en gång i steg, eller uppdaterar den inte alls.

Tillämpas på problem med minsta kvadrater

I praktiken finns det ofta uppgifter där det krävs att justera de fria parametrarna för ett objekt eller justera den matematiska modellen till verkliga data. I dessa fall visas minsta kvadratproblem :

Dessa problem kännetecknas av en speciell sorts gradient och hessisk matris :

där  är Jacobi-matrisen för vektorfunktionen ,  är den hessiska matrisen för dess komponent .

Sedan bestäms nästa steg från systemet:

Gauss-Newton-metoden

Gauss-Newton-metoden bygger på antagandet att termen dominerar över . Detta krav uppfylls inte om minimiresterna är stora, det vill säga om normen är jämförbar med matrisens maximala egenvärde . Annars kan du skriva:

Således, när normen är nära noll, och matrisen har full kolumnrankning , skiljer sig steget lite från det Newtonska (med hänsyn till ), och metoden kan uppnå en kvadratisk konvergenshastighet, även om andraderivatorna inte tas med i konto. En förbättring av metoden är Levenberg-Marquardt-algoritmen baserad på heuristiska överväganden.

Generalisering till det komplexa planet

Fram till nu, i beskrivningen av metoden, användes funktioner som utför mappningar inom uppsättningen av verkliga värden . Metoden kan dock också användas för att hitta nollpunkten för en funktion av en komplex variabel . Proceduren förblir dock densamma:

Av särskilt intresse är valet av den initiala uppskattningen . Med tanke på att en funktion kan ha flera nollor kan metoden i olika fall konvergera till olika värden, och det är ganska naturligt att vilja ta reda på vilka områden som säkerställer konvergens till en viss rot. Denna fråga intresserade Arthur Cayley redan 1879 , men det var bara möjligt att lösa den på 70 -talet av 1900-talet med tillkomsten av datorteknik. Det visade sig att i skärningspunkterna mellan dessa regioner (de kallas vanligtvis attraktionsregioner ) bildas så kallade fraktaler  - oändliga självliknande geometriska figurer.

På grund av det faktum att Newton tillämpade sin metod uteslutande på polynom , blev fraktalerna som bildades som ett resultat av en sådan ansökan kända som Newtons fraktaler eller Newtons pooler .

Implementering

scala

objekt NewtonMethod { valnoggrannhet = 1e -6 @tailrec def method ( x0 : Double , f : Double => Double , dfdx : Double => Double , e : Double ): Double = { val x1 = x0 - f ( x0 ) / dfdx ( x0 ) if ( abs ( x1 ) - x0 ) < e ) x1 annan metod ( x1 , f , dfdx , e ) } def g ( C : Double ) = ( x : Double ) => x * x - C def dgdx ( x : Dubbel ) = 2 * x def sqrt ( x : Double ) = x match { case 0 => 0 case x if ( x < 0 ) => Double . NaN fall x if ( x > 0 ) => metod ( x / 2 , g ( x ), dgdx , noggrannhet ) } }

Python

från matte import sin , cos från att skriva import Callable import unittest def newton ( f : Callable [[ float ], float ], f_prime : Callable [[ float ], float ], x0 : float , eps : float = 1e-7 , kmax : int = 1e3 ) -> float : """ löser f(x) = 0 med Newtons metod med precision eps :param f: f :param f_prime: f' :param x0: startpunkt :param eps: precision önskad :return: roten av f(x) = 0 """ x , x_prev , i = x0 , x0 + 2 * eps , 0 medan abs ( x - x_prev ) >= eps och i < kmax : x , x_prev , i = x - f ( x ) / f_prime ( x ), x , i + 1 tillbaka x klass TestNewton ( unittest . TestCase ): def test_0 ( self ) : def f ( x : float ) -> float : return x ** 2 - 20 * sin ( x ) def f_prime ( x : float ) -> float : return 2 * x - 20 * cos ( x ) x0 , x_star = 2 , 2,7529466338187049383 själv . assertAlmostEqual ( newton ( f , f_prime , x0 ), x_star ) if __name__ == '__main__' : unittest . huvud ()

PHP

<?php // PHP 5.4 function newtons_method ( $a = - 1 , $b = 1 , $f = function ( $x ) { return pow ( $x , 4 ) - 1 ; }, $derivative_f = funktion ( $x ) { returnera 4 * pow ( $x , 3 ); }, $eps = 1E-3 ) { $xa = $a ; $xb = $b ; $iteration = 0 ; while ( abs ( $xb ) > $eps ) { $p1 = $f ( $xa ); $q1 = $derivative_f ( $xa ); $xa -= $p1 / $q1 ; $xb = $p1 ; ++ $iteration ; } returnera $xa ; }

Octave

funktion res = nt () eps = 1e-7 ; x0_1 = [ -0,5 , 0,5 ] ; max_iter = 500 ; xopt = new (@ resh , eps , max_iter ); xopt slutfunktionsfunktion a = ny ( f, eps, max_iter ) x = -1 ; _ p0 = 1 ; i = 0 _ while ( abs ( p0 ) > = eps ) [ p1 , q1 ]= f ( x ); x = x - pl / ql ; p0 = pl ; i = i + 1 ; slut i a = x ; slutfunktionsfunktion [ p,q] = resh ( x ) % p= -5*x.^5+4*x.^4-12*x.^3+11*x.^2-2*x+1; p = - 25 * x .^ 4 + 16 * x .^ 3 - 36 * x .^ 2 + 22 * x - 2 ; q = - 100 * x .^ 3 + 48 * x .^ 2 - 72 * x + 22 ; slutfunktion

Delphi

// beräknad funktion funktion fx ( x : Dubbel ) : Dubbel ; börja Resultat := x * x - 17 ; slut ; // härledd funktion av f(x) funktion dfx ( x : Double ) : Double ; börja Resultat := 2 * x ; slut ; function solve ( fx , dfx : TFunc < Double , Double > ; x0 : Double ) : Double ; const eps = 0,000001 ; var x1 : Dubbel ; börja x1 := x0 - fx ( x0 ) / dfx ( x0 ) ; // första approximationen medan ( Abs ( x1 - x0 ) > eps ) börjar // tills precision 0,000001 uppnås x0 := x1 ; x1 := x1 - fx ( x1 ) / dfx ( x1 ) ; // efterföljande uppskattningar slutar ; Resultat := x1 ; slut ; // Call solve ( fx , dfx , 4 ) ;

C++

#include <iostream> #inkludera <math.h> double fx ( double x ) { return x * x - 17 ;} // beräknad funktion double dfx ( double x ) { return 2 * x ;} // funktionsderivata typedef dubbel ( * funktion ) ( dubbel x ); // tilldelning av typfunktion dubbel lösa ( funktion fx , funktion dfx , dubbel x0 , dubbel eps = 1e-8 ) { dubbel xi = x0 ; //Aktuell punkt vid i-te iterationen while ( fabs ( fx ( xi )) >= eps ) // tills precision 0,00000001 uppnås xi = xi - fx ( xi ) / dfx ( xi ); // efterföljande approximationer returnerar xi ; } int main () { std :: cout << solve ( fx , dfx , 4 ) << std :: endl ; returnera 0 ; }

C

typedef dubbel ( * funktion ) ( dubbel x ); double TangentsMethod ( funktion f , funktion df , dubbel xn , dubbel eps ) { dubbel xl = xn - f ( xn ) / df ( xn ); dubbel x0 = xn ; while ( abs ( x0 - x1 ) > eps ) { x0 = xl ; xl = xl - f ( xl ) / df ( xl ); } returnera x1 ; } //Välj initial gissning xn = MyFunction ( A ) * My2Derivative ( A ) > 0 ? B : A ; double MyFunction ( double x ) { return ( pow ( x , 5 ) - x - 0,2 ); } //Din funktion dubbel MyDerivative ( double x ) { return ( 5 * pow ( x , 4 ) - 1 ); } //Första derivatan dubbel My2Derivative ( double x ) { return ( 20 * pow ( x , 3 )); } //Andra derivata //Exempel på att anropa en funktion dubbel x = TangentsMethod ( MyFunction , MyDerivative , xn , 0.1 )

Haskell

importera Data.List ( iterate ' ) main :: IO () main = print $ solve ( \ x -> x * x - 17 ) ( * 2 ) 4 -- Lösningsfunktionen är universell för alla verkliga typer vars värden kan jämföras. lösa = esolve 0,000001 esolve epsilon func deriv x0 = fst . head $ dropWhile pred- par där pred ( xn , xn1 ) = ( abs $ xn - xn1 ) > epsilon -- Pred-funktionen avgör om den erforderliga precisionen har uppnåtts. nästa xn = xn - func xn / deriv xn -- Nästa funktion beräknar en ny approximation. iters = iterate' next x0 -- En oändlig lista med iterationer. par = zip iters ( tail iters ) -- En oändlig lista med par av iterationer av formen: [(x0, x1), (x1, x2) ..].

Litteratur

  • Akulich I. L. Matematisk programmering i exempel och uppgifter: Proc. bidrag för studenters ekonomi. specialist. universitet. - M .  : Högre skola, 1986. - 319 sid. : sjuk. - BBK  22.1 A44 . - UDC  517,8 .
  • Amosov A. A., Dubinsky Yu. A., Kopchenova N. P. Beräkningsmetoder för ingenjörer: Proc. ersättning. - M .  : Högre skola, 1994. - 544 sid. : sjuk. - BBK  32,97 A62 . - UDC  683.1 . — ISBN 5-06-000625-5 .
  • Bakhvalov N. S., Zhidkov N. P. , Kobelkov G. G. Numeriska metoder. - 8:e uppl. - M .  : Laboratory of Basic Knowledge, 2000.
  • Vavilov S. I. Isaac Newton . - M.  : Ed. USSR:s vetenskapsakademi, 1945.
  • Volkov E. A. Numeriska metoder. — M  .: Fizmatlit, 2003.
  • Gill F., Murray W., Wright M. Praktisk optimering. Per. från engelska. — M  .: Mir, 1985.
  • Korn G., Korn T. Handbok i matematik för vetenskapsmän och ingenjörer. - M .  : Nauka, 1970. - S. 575-576.
  • Korshunov Yu. M., Korshunov Yu. M. Matematiska grunder för cybernetik. - Energoatomizdat, 1972.
  • Maksimov Yu. A., Filippovskaya EA Algoritmer för att lösa problem med olinjär programmering. — M  .: MEPhI, 1982.
  • Morozov AD Introduktion till teorin om fraktaler. — MEPhI, 2002.

Se även

Länkar