Newton–Raphson

Det er god trening å prate matematikk. Her er det fritt fram for alle. Obs: Ikke spør om hjelp til oppgaver i dette underforumet.

Moderatorer: Vektormannen, espen180, Aleks855, Solar Plexsus, Gustav, Nebuchadnezzar, Janhaa

Svar
Gjest123

Jeg sliter litt med en oppgave:

Bruk Newton-Raphsons metode for å finne tilnærminger til begge løsningene av ligningen:
f(x) = 3x^2 + 4x − 4
Bruk en feiltoleranse på E = 10^−12. Utforsk hvordan valget av initialverdi x0 påvirker
hvilken av løsningene algoritmen konvergerer mot.

Håper noen her klarer å hjelpe meg
SveinR
Weierstrass
Weierstrass
Innlegg: 489
Registrert: 22/05-2018 21:12

Nøyaktig hva er det du lurer på her? Er det å tolke hva oppgaven spør om, eller lurer du på hva Newton-Raphson metoden er, eller rett og slett hvordan du kan programmere den? For jeg antar det er meningen å programmere algoritmen her.
Gjest123

Hvordan jeg kan programmere det
SveinR
Weierstrass
Weierstrass
Innlegg: 489
Registrert: 22/05-2018 21:12

Algoritmen sier at gitt et "løsningsgjett" $x_i$ for nullpunktet til en funksjon, så er neste iterasjon av løsningen gitt ved

$x_{i+1} = x_i - \frac{f(x_i)}{f'(x_i)}$

Slik at for en initialverdi $x_0$ så blir neste løsningsverdi $x_1$ gitt ved

$x_{1} = x_0 - \frac{f(x_0)}{f'(x_0)}$

og dette kan vi gjenta videre, så neste (forbedrede) løsningsverdi $x_2$ er gitt ved

$x_{2} = x_1 - \frac{f(x_1)}{f'(x_1)}$


Dette lar seg f.eks. programmere ved hjelp av en while-løkke, som løper helt til løsningsverdien blir god nok - som i ditt tilfelle er helt til "feilen" blir 1.0E-12. Nøyaktig hvordan du vil programmere dette kommer an på språket du bruker. Under er en pseudokode for hvordan man kan tenke:

Kode: Velg alt

x_0 = 1.0  #dette er en initialverdi som vi kan velge selv, det er gjerne vanlig å sette den til 1.0

løsning = x_0 #denne oppdaterer vi i løkken

while løsning IKKE god nok:
     ny_løsning = løsning - f(løsning)/f'(løsning) #dette er Newton-Raphson-formelen, litt omskrevet

     løsning = ny_løsning #her oppdaterer vi løsningen vår, og dette gjentas i hver iterasjon

print(løsning) #skriver ut den siste verdien vi fant, etter at vi har kommet ut av løkka
Du må her også tenke gjennom hvordan du kan finne verdien til den deriverte i programmet (hint: Bruk definisjonen til den deriverte).
Nebuchadnezzar
Fibonacci
Fibonacci
Innlegg: 5647
Registrert: 24/05-2009 13:16
Sted: NTNU

I python og lignende språk kan en og skrive direkte

Kode: Velg alt

 løsning  =  løsning - f(løsning)/f'(løsning) 
Og den oppdateres korrekt.
"Å vite hva man ikke vet er og en slags allvitenhet" - Piet Hein
https://s.ntnu.no/Integralkokeboken
Lektor - Matematikk, Fysikk og Informatikk
Aleks855
Rasch
Rasch
Innlegg: 6574
Registrert: 19/03-2011 15:19
Sted: Trondheim
Kontakt:

Nebuchadnezzar skrev:I python og lignende språk kan en og skrive direkte

Kode: Velg alt

 løsning  =  løsning - f(løsning)/f'(løsning) 
Og den oppdateres korrekt.
Vent, har Python en innebygd apostrof-funksjon som deriverer en arbitrær funksjon f? :lol:
Bilde
Nebuchadnezzar
Fibonacci
Fibonacci
Innlegg: 5647
Registrert: 24/05-2009 13:16
Sted: NTNU

Kode: Velg alt

In [1]: from sympy import *
In [2]: import numpy as np
In [3]: x = Symbol('x')
In [4]: y = x**2 + 1
In [5]: yprime = y.diff(x)
In [6]: yprime
Out[6]: 2⋅x

In [7]: f = lambdify(x, yprime, 'numpy')
In [8]: f(np.ones(5))
Out[8]: [ 2.  2.  2.  2.  2.]
Ikke så langt unna.. Selv om jeg nok ville gjort det på måten under

Kode: Velg alt

def df(x, h=1e-5):
    return (f(x+h) - f(x))/h
Som selvsagt antar f er definert tidligere. om ikke innebygget, så kan jeg godta å bruke to linjer ekstra på å definere $df := f'$. Men får være nok "hint" nå ;-)
"Å vite hva man ikke vet er og en slags allvitenhet" - Piet Hein
https://s.ntnu.no/Integralkokeboken
Lektor - Matematikk, Fysikk og Informatikk
Svar