Newtons metode

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 25. januar 2022; checks kræver 3 redigeringer .

Newtons metode, Newtons algoritme ( også kendt som tangentmetoden ) er en iterativ numerisk metode til at finde roden ( nul ) af en given funktion . Metoden blev først foreslået af den engelske fysiker , matematiker og astronom Isaac Newton ( 1643-1727 ) . Søgningen efter en løsning udføres ved at konstruere successive tilnærmelser og er baseret på principperne om simpel iteration . Metoden har kvadratisk konvergens . En modifikation af metoden er metoden med akkorder og tangenter. Newtons metode kan også bruges til at løse optimeringsproblemer, hvor det er nødvendigt at bestemme nulpunktet for den første afledte eller gradient i tilfælde af et flerdimensionalt rum.

Beskrivelse af metoden

Begrundelse

For numerisk at løse ligningen ved den simple iterationsmetode , skal den reduceres til en ækvivalent ligning: , hvor  er sammentrækningsafbildningen .

For den bedste konvergens af metoden på punktet for den næste tilnærmelse skal betingelsen være opfyldt . Løsningen af ​​denne ligning søges i formen , så:

Hvis vi antager, at tilnærmelsespunktet er "tæt nok" på roden , og at den givne funktion er kontinuert , er den endelige formel for :

Med dette i tankerne er funktionen defineret:

Under visse forhold udfører denne funktion en sammentrækningskortlægning i et nabolag af roden.

Bevis

Lad en funktion af en reel variabel gives, der er to gange kontinuerligt differentierbar i sit definitionsdomæne , og hvis afledte aldrig forsvinder:

Og det er nødvendigt at bevise, at funktionen udfører en sammentrækningskortlægning nær roden af ​​ligningen .

På grund af den kontinuerlige differentiabilitet af funktionen og uligheden af ​​nul, er dens første afledede kontinuert .

Den afledte er:

Under de betingelser, der er pålagt , er den også kontinuerlig. Lad være  den ønskede rod af ligningen: , derfor i dens nabolag :

Så ifølge Lagranges sætning :

På grund af det faktum, at i det samme deltakvarter er følgende sandt:

Den således opnåede funktion i nærheden af ​​roden implementerer en sammentrækningsmapping .

I dette tilfælde reduceres algoritmen til at finde en numerisk løsning til ligningen til en iterativ beregningsprocedure :

Ifølge Banachs sætning tenderer sekvensen af ​​tilnærmelser til roden af ​​ligningen .

Geometrisk fortolkning

Hovedideen med metoden er som følger: den indledende tilnærmelse er sat nær den hypotetiske rod, hvorefter en tangent til grafen for den undersøgte funktion plottes ved tilnærmelsespunktet, for hvilket skæringspunktet med abscisseaksen er fundet. Dette punkt tages som den næste tilnærmelse. Og så videre, indtil den nødvendige nøjagtighed er nået.

Lad 1) en funktion med reel værdi være kontinuerligt differentierbar på intervallet  ; 2) der er et påkrævet punkt  :  ; 3) der er også sådanne, at for og for  ; 4) pointen er sådan, at . Så kan formlen for iterativ tilnærmelse til k udledes af den geometriske betydning af tangenten som følger:





hvor  er hældningsvinklen for tangentlinjen til grafen i punktet .

Derfor (i ligningen for tangentlinjen antager vi ) har det ønskede udtryk for formen:

Hvis , så kan denne værdi bruges som den næste tilnærmelse til .

Hvis , så er der en "flugt" (roden ligger nær grænsen ). I dette tilfælde er det nødvendigt (ved at bruge ideen om halveringsmetoden ) at erstatte med indtil punktet "vender tilbage" til søgeområdet .

Bemærkninger. 1) Tilstedeværelsen af ​​en kontinuerlig afledt gør det muligt at bygge en kontinuerligt skiftende tangent på hele området for søgningen efter en løsning . 2) Tilfælde af grænse (ved et punkt eller ved et punkt ) placering af den ønskede løsning betragtes på lignende måde. 3) Set fra et geometrisk synspunkt betyder lighed , at tangentlinjen til grafen i punktet - er parallel med aksen og ikke skærer med denne i enden. 4) Jo større konstanten er og jo mindre konstanten fra afsnit 3 af betingelserne, jo tættere er skæringspunktet mellem tangenten til grafen og aksen til punktet , det vil sige jo tættere er værdien på den ønskede .


Den iterative proces begynder med en indledende tilnærmelse , og mellem og det ønskede punkt bør der ikke være andre nuller i funktionen , det vil sige "jo tættere på den ønskede rod , jo bedre." Hvis der ikke er nogen antagelser om at finde , kan trial and error indsnævre rækken af ​​mulige værdier ved at anvende mellemværdisætningen .

For foruddefinerede afslutter den iterative proces hvis og . Især for displayet matrix og kan beregnes baseret på grafen display skala , det vil sige, hvis og falder i én lodret, og i én vandret række.

Algoritme

  1. Den indledende tilnærmelse er indstillet .
  2. Indtil stopbetingelsen er opfyldt, som kan tages som eller (det vil sige fejlen er inden for de krævede grænser), beregnes en ny tilnærmelse: .

Eksempel

Overvej problemet med at finde positive , for hvilket . Denne opgave kan repræsenteres som opgaven med at finde funktionens nulpunkt . Vi har et udtryk for den afledede . Da for alle og for , er det indlysende , at løsningen ligger mellem 0 og 1. Lad os tage værdien som en indledende tilnærmelse , så:

Gyldige signifikante cifre er understreget . Det kan ses, at deres antal stiger fra trin til trin (ca. fordobles med hvert trin): fra 1 til 2, fra 2 til 5, fra 5 til 10, hvilket illustrerer den kvadratiske konvergenshastighed .


Vilkår for brug

Lad os overveje en række eksempler, der peger på manglerne ved metoden.

Modeksempler

Lade

Derefter

Lad os tage nul som en indledende tilnærmelse. Den første iteration vil give enhed som en tilnærmelse. Til gengæld vil den anden igen give nul. Metoden vil loope, og der vil ikke blive fundet nogen løsning. Generelt kan konstruktionen af ​​en sekvens af tilnærmelser være meget forvirrende .

Overvej en funktion:

Dengang og overalt undtagen 0.

I nærheden af ​​roden skifter den afledede fortegn, når den nærmer sig nul fra højre eller venstre. Mens for .

Den er således ikke afgrænset nær roden, og metoden vil divergere, selvom funktionen er differentierbar overalt, dens afledte er ikke-nul ved roden, uendeligt differentierbar overalt undtagen ved roden, og dens afledte er afgrænset omkring roden .

Overvej et eksempel:

Så og undtagen hvor det ikke er defineret.

På næste trin har vi :

Hastigheden af ​​konvergens af den resulterende sekvens er ca. 4/3. Dette er væsentligt mindre end 2, hvilket er nødvendigt for kvadratisk konvergens, så i dette tilfælde kan vi kun tale om lineær konvergens, selvom funktionen er kontinuerligt differentierbar overalt , er den afledede ved roden ikke lig med nul, og er uendeligt differentierbar overalt undtagen ved roden.

Lade

Så og deraf . Metodens konvergens er således ikke kvadratisk, men lineær, selvom funktionen er uendelig differentierbar overalt.

Begrænsninger

Lad ligningen være givet , hvor og det er nødvendigt at finde dens løsning.

Nedenfor er formuleringen af ​​hovedsætningen, som giver os mulighed for at give klare betingelser for anvendelighed. Den bærer navnet på den sovjetiske matematiker og økonom Leonid Vitalievich Kantorovich ( 1912-1986 ) .

Kantorovichs teorem.

Hvis der er konstanter , sådan at:

  1. på , det vil sige, den eksisterer og er ikke lig med nul;
  2. på , altså begrænset;
  3. på , og ;

Desuden er længden af ​​det betragtede segment . Så er følgende udsagn sande:

  1. der findes en rod af ligningen ;
  2. hvis , så konvergerer den iterative sekvens til denne rod: ;
  3. fejlen kan estimeres med formlen .

Fra den sidste sætning i sætningen følger især metodens kvadratiske konvergens :

Så vil begrænsningerne på den oprindelige funktion se således ud:

  1. funktionen skal være begrænset;
  2. funktionen skal være jævn , dobbelt differentierbar ;
  3. dens første afledte er ensartet adskilt fra nul;
  4. dens anden afledte skal være ensartet afgrænset.

Historisk baggrund

Metoden blev beskrevet af Isaac Newton i manuskriptet On the Analysis by Equations of Infinite Series ( latin:  De analysi per aequationes numero terminorum infinitas ) adresseret til Barrow i 1669 , og i The Method of Fluxions and Infinite Series ( latin: De metodis fluxionum et serierum infinitarum" ) eller " Analytisk Geometri " ( lat. "Geometria analytica" ) i samlingerne af Newtons værker, som blev skrevet i 1671 . I sine skrifter introducerer Newton begreber som udvidelsen af ​​en funktion til en serie , infinitesimals og fluxioner ( afledte i den nuværende betydning). Disse værker blev udgivet meget senere: den første blev udgivet i 1711 takket være William Johnson, den anden blev udgivet af John Colzon i 1736 efter skaberens død. Imidlertid afveg beskrivelsen af ​​metoden væsentligt fra hans nuværende udlægning: Newton anvendte sin metode udelukkende på polynomier . Han beregnede ikke successive tilnærmelser , men en sekvens af polynomier og som et resultat fik en omtrentlig løsning .   

Metoden blev først offentliggjort i afhandlingen "Algebra" af John Wallis i 1685, på hvis anmodning den kort blev beskrevet af Newton selv. I 1690 udgav Joseph Raphson en forenklet beskrivelse i sin "Analysis aequationum universalis" ( latin:  "Analysis aequationum universalis" ). Raphson betragtede Newtons metode som rent algebraisk og begrænsede dens anvendelse til polynomier, men han beskrev metoden i form af successive tilnærmelser i stedet for den mere vanskelige at forstå sekvens af polynomier brugt af Newton. Endelig, i 1740, blev Newtons metode beskrevet af Thomas Simpson som en førsteordens iterativ metode til løsning af ikke-lineære ligninger ved hjælp af en afledt, som præsenteret her. I samme publikation generaliserede Simpson metoden til tilfældet med et system af to ligninger og bemærkede, at Newtons metode også kan anvendes til optimeringsproblemer ved at finde nulpunktet for den afledte eller gradient .

I 1879 var Arthur Cayley , i The  Newton-Fourier imaginary problem, den første til at påpege vanskelighederne ved at generalisere Newtons metode til tilfældet med imaginære rødder af polynomier af højere grad end den anden og komplekse indledende tilnærmelse. Dette arbejde banede vejen for studiet af fraktal teori .

Generaliseringer og ændringer

Sekantmetoden

Den relaterede sekantmetode er Newtons "tilnærmede" metode og undgår at beregne den afledte. Værdien af ​​den afledte i den iterative formel erstattes af dens estimat for de to foregående iterationspunkter:

.

Således har hovedformlen formen

Denne metode ligner Newtons, men har en lidt langsommere konvergenshastighed. Metodens konvergensrækkefølge er lig med det gyldne snit  - 1.618 ...

Bemærkninger. 1) For at starte den iterative proces kræves to forskellige værdier af og . 2) I modsætning til den "ægte Newton-metode" (tangensmetoden), som kun kræver lagring (og midlertidigt under beregninger og ), kræver sekantmetoden lagring , , , . 3) Det bruges, hvis beregningen er svær (for eksempel kræver den en stor mængde maskinressourcer: tid og/eller hukommelse).

En tangentmetode

For at reducere antallet af opkald til værdierne af den afledte funktion af en funktion, bruges den såkaldte en-tangens metode.

Iterationsformlen for denne metode er:

Essensen af ​​metoden er kun at beregne den afledte én gang, ved det indledende tilnærmelsespunkt , og derefter bruge denne værdi ved hver efterfølgende iteration:

Med dette valg gælder følgende lighed på punktet :

og hvis det segment, hvorpå tilstedeværelsen af ​​en rod antages, og den indledende tilnærmelse er valgt, er lille nok, og den afledede er kontinuert, så vil værdien ikke afvige meget fra , og derfor vil grafen passere næsten vandret og skære lige linje , som igen vil sikre hurtig konvergens af sekvensen af ​​tilnærmelsespunkter til roden.

Denne metode er et specialtilfælde af den simple iterationsmetode . Det har en lineær rækkefølge af konvergens.

Multidimensional sag

Lad os generalisere det opnåede resultat til det multidimensionelle tilfælde.

Lad det være nødvendigt at finde en løsning på systemet:

Ved at vælge en begyndelsesværdi , findes successive tilnærmelser ved at løse ligningssystemer :

hvor .


Som anvendt på optimeringsproblemer

Lad det være nødvendigt at finde minimum af en funktion af flere variable . Denne opgave svarer til problemet med at finde nulpunktet for gradienten . Lad os anvende ovenstående Newtons metode:

hvor  er hessian for funktionen .

I en mere bekvem iterativ form ser dette udtryk således ud:

Det skal bemærkes, at i tilfælde af en kvadratisk funktion, finder Newtons metode et ekstremum i én iteration.

At finde den hessiske matrix er beregningsmæssigt dyrt og ofte ikke muligt. I sådanne tilfælde kan kvasi-newtonske metoder tjene som et alternativ , hvor en tilnærmelse af den hessiske matrix bygges i processen med at akkumulere information om funktionens krumning.

Newton-Raphson metode

Newton-Raphson metoden er en forbedring af Newtons ekstremum metode beskrevet ovenfor. Den største forskel er, at ved den næste iteration vælger en af ​​metoderne til endimensionel optimering det optimale trin:

hvor For at optimere beregningerne bruges følgende forbedring: i stedet for at genberegne hessian for objektivfunktionen ved hver iteration begrænser vi os til den indledende tilnærmelse og opdaterer den kun én gang i trin, eller opdaterer den slet ikke.

Anvendt på opgaver med mindste kvadrater

I praksis er der ofte opgaver, hvor det er nødvendigt at justere de frie parametre for et objekt eller justere den matematiske model til reelle data. I disse tilfælde opstår problemer med mindste kvadrater :

Disse problemer er kendetegnet ved en særlig form for gradient og hessisk matrix :

hvor  er Jacobi-matrixen for vektorfunktionen ,  er den hessiske matrix for dens komponent .

Derefter bestemmes det næste trin fra systemet:

Gauss-Newton metode

Gauss-Newton-metoden er baseret på den antagelse, at begrebet dominerer over . Dette krav er ikke opfyldt, hvis minimumsresterne er store, det vil sige, hvis normen er sammenlignelig med matrixens maksimale egenværdi . Ellers kan du skrive:

Når normen er tæt på nul, og matricen har fuld kolonnerangering , adskiller trinnet sig således lidt fra det newtonske (under hensyntagen til ), og metoden kan opnå en kvadratisk konvergenshastighed, selvom de anden afledede ikke tages i betragtning konto. En forbedring af metoden er Levenberg-Marquardt-algoritmen baseret på heuristiske overvejelser.

Generalisering til det komplekse plan

Indtil nu er der i beskrivelsen af ​​metoden brugt funktioner, der udfører mappings inden for sættet af reelle værdier . Metoden kan dog også anvendes til at finde nulpunktet for en funktion af en kompleks variabel . Proceduren forbliver dog den samme:

Af særlig interesse er valget af den oprindelige tilnærmelse . I lyset af at en funktion kan have flere nuller, kan metoden i forskellige tilfælde konvergere til forskellige værdier, og det er helt naturligt at ville finde ud af, hvilke områder der vil sikre konvergens til en bestemt rod. Dette spørgsmål interesserede Arthur Cayley tilbage i 1879 , men det var først muligt at løse det i 70'erne af det tyvende århundrede med fremkomsten af ​​computerteknologi. Det viste sig, at i skæringspunkterne mellem disse regioner (de kaldes normalt tiltrækningsområder ) dannes såkaldte fraktaler  - uendelige selvlignende geometriske figurer.

På grund af det faktum, at Newton udelukkende anvendte sin metode til polynomier , blev fraktalerne dannet som følge af en sådan anvendelse kendt som Newtons fraktaler eller Newtons puljer .

Implementering

scala

objekt NewtonMethod { valnøjagtighed = 1e -6 @tailrec def metode ( x0 : Double , f : Double => Double , dfdx : Double => Double , e : Double ): Double = { val x1 = x0 - f ( x0 ) / dfdx ( x0 ) if ( abs ( x1 ) - x0 ) < e ) x1 anden metode ( x1 , f , dfdx , e ) } def g ( C : Dobbelt ) = ( x : Dobbelt ) => x * x - C def dgdx ( x : Dobbelt ) = 2 * x def sqrt ( x : Dobbelt ) = x match { case 0 => 0 case x if ( x < 0 ) => Double . NaN tilfælde x if ( x > 0 ) => metode ( x / 2 , g ( x ), dgdx , nøjagtighed ) } }

Python

fra matematik import sin , cos fra at skrive import Kaldbar 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 ved Newtons metode med præcision eps :param f: f :param f_prime: f' :param x0: startpunkt :param eps: præcision ønsket :return: roden af ​​f(x) = 0 """ x , x_prev , i = x0 , x0 + 2 * eps , 0 mens abs ( x - x_prev ) >= eps og i < kmax : x , x_prev , i = x - f ( x ) / f_prime ( x ), x , i + 1 returnere x klasse TestNewton ( unittest . TestCase ): def test_0 ( self ) : def f ( x : float ) -> float : return x ** 2 - 20 * sin ( x ) def f_prime ( x : float ) -> float : returner 2 * x - 20 * cos ( x ) x0 , x_star = 2 , 2,7529466338187049383 selv . assertAlmostEqual ( newton ( f , f_prime , x0 ), x_star ) hvis __navn__ == '__main__' : enhedstest . vigtigste ()

PHP

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

Oktav

funktion res = nt () eps = 1e-7 ; x0_1 = [ -0,5 , 0,5 ] ; max_iter = 500 ; xopt = ny (@ resh , eps , max_iter ); xopt slutfunktion funktion a = ny ( f, eps, max_iter ) x = -1 ; _ p0 = 1 ; i = 0 _ while ( abs ( p0 ) > = eps ) [ p1 , q1 ]= f ( x ); x = x - p1 / q1 ; p0 = p1 ; i = i + 1 ; ende 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 ; afslutte funktion

Delphi

// beregnet funktion funktion fx ( x : Dobbelt ) : Dobbelt ; begynde Resultat := x * x - 17 ; ende ; // afledt funktion af f(x) funktion dfx ( x : Dobbelt ) : Dobbelt ; begynde Resultat := 2 * x ; ende ; function solve ( fx , dfx : TFunc < Double , Double >; x0 : Double ) : Double ; const eps = 0,000001 ; var x1 : Dobbelt ; begynde x1 := x0 - fx ( x0 ) / dfx ( x0 ) ; // første tilnærmelse mens ( Abs ( x1 - x0 ) > eps ) begynder // indtil præcision 0,000001 er nået x0 : = x1 ; x1 := x1 - fx ( x1 ) / dfx ( x1 ) ; // efterfølgende tilnærmelser slutter ; Resultat := x1 ; ende ; // Kald løse ( fx , dfx , 4 ) ;

C++

#include <iostream> #include <math.h> double fx ( double x ) { return x * x - 17 ;} // beregnet funktion double dfx ( double x ) { return 2 * x ;} // funktionsafledt typedef double ( * funktion ) ( dobbelt x ); // tildeling af type funktion double solve ( funktion fx , funktion dfx , double x0 , double eps = 1e-8 ) { dobbelt xi = x0 ; //Aktuelt punkt ved i-te iteration while ( fabs ( fx ( xi )) >= eps ) // indtil præcision 0,00000001 er nået xi = xi - fx ( xi ) / dfx ( xi ); // efterfølgende tilnærmelser returnerer xi ; } int main () { std :: cout << solve ( fx , dfx , 4 ) << std :: endl ; returnere 0 ; }

C

typedef double ( * funktion ) ( dobbelt x ); double TangentsMethod ( funktion f , funktion df , dobbelt xn , dobbelt eps ) { dobbelt x1 = xn - f ( xn ) / df ( xn ); dobbelt x0 = xn ; while ( abs ( x0 - x1 ) > eps ) { x0 = x1 ; xl = xl - f ( xl ) / df ( xl ); } returnere x1 ; } //Vælg indledende gæt xn = MyFunction ( A ) * My2Derivative ( A ) > 0 ? B : A ; double MyFunction ( double x ) { return ( pow ( x , 5 ) - x - 0,2 ); } //Din funktion double MyDerivative ( double x ) { return ( 5 * pow ( x , 4 ) - 1 ); } //First derivative double My2Derivative ( double x ) { return ( 20 * pow ( x , 3 )); } //Anden afledet //Eksempel på at kalde en funktion dobbelt x = TangentsMethod ( MyFunction , MyDerivative , xn , 0.1 )

Haskell

importer Data.List ( iterate ' ) main :: IO () main = print $ solve ( \ x -> x * x - 17 ) ( * 2 ) 4 - Løsningsfunktionen er universel for alle rigtige typer, hvis værdier kan sammenlignes. solve = esolve 0,000001 esolve epsilon func deriv x0 = fst . head $ dropWhile pred - par hvor pred ( xn , xn1 ) = ( abs $ xn - xn1 ) > epsilon -- Pred-funktionen bestemmer om den nødvendige præcision er nået. næste xn = xn - func xn / deriv xn -- Den næste funktion beregner en ny tilnærmelse. iters = iterate' næste x0 -- En uendelig liste over iterationer. par = zip iters ( tail iters ) -- En uendelig liste over par af iterationer af formen: [(x0, x1), (x1, x2) ..].

Litteratur

  • Akulich I. L. Matematisk programmering i eksempler og opgaver: Proc. godtgørelse for studerendes økonomi. specialist. universiteter. - M .  : Højere skole, 1986. - 319 s. : syg. - BBK  22.1 A44 . - UDC  517,8 .
  • Amosov A. A., Dubinsky Yu. A., Kopchenova N. P. Beregningsmetoder for ingeniører: Proc. godtgørelse. - M .  : Højere skole, 1994. - 544 s. : syg. - BBK  32,97 A62 . - UDC  683.1 . — ISBN 5-06-000625-5 .
  • Bakhvalov N. S., Zhidkov N. P. , Kobelkov G. G. Numeriske metoder. - 8. udg. - M .  : Laboratoriet for grundlæggende viden, 2000.
  • Vavilov S. I. Isaac Newton . - M.  : Red. USSR's Videnskabsakademi, 1945.
  • Volkov E. A. Numeriske metoder. — M  .: Fizmatlit, 2003.
  • Gill F., Murray W., Wright M. Praktisk optimering. Om. fra engelsk. — M  .: Mir, 1985.
  • Korn G., Korn T. Håndbog i matematik for videnskabsmænd og ingeniører. - M .  : Nauka, 1970. - S. 575-576.
  • Korshunov Yu. M., Korshunov Yu. M. Matematiske grundlag for kybernetik. - Energoatomizdat, 1972.
  • Maksimov Yu. A., Filippovskaya EA Algoritmer til løsning af problemer med ikke-lineær programmering. - M  .: MEPhI, 1982.
  • Morozov AD Introduktion til teorien om fraktaler. - MEPhI, 2002.

Se også

Links