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? :lol:

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å ;-)