Side 1 av 1
Newton–Raphson
Lagt inn: 23/09-2020 11:32
av 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
Re: Newton–Raphson
Lagt inn: 23/09-2020 12:34
av SveinR
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.
Re: Newton–Raphson
Lagt inn: 23/09-2020 13:10
av Gjest123
Hvordan jeg kan programmere det
Re: Newton–Raphson
Lagt inn: 23/09-2020 13:29
av SveinR
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).
Re: Newton–Raphson
Lagt inn: 29/10-2020 19:56
av Nebuchadnezzar
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.
Re: Newton–Raphson
Lagt inn: 29/10-2020 20:11
av Aleks855
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?

Re: Newton–Raphson
Lagt inn: 29/10-2020 23:27
av Nebuchadnezzar
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å
