Newton-Verfahren

Aufrufe: 134     Aktiv: 11.02.2024 um 13:18

0
eine funktion f(x) difi. als f(x) = In(x²) 
i) wie die "Newton-Form" für diese Funktion aussieht
ii) das Newton-Verfahren zu verwenden, um die Nullstelle von f(x) zu finden, und als Startwert x = 1/2 zu verwenden
iii) Es soll ein Programm geschrieben werden, das das Newton-Verfahren darstellt.
vi) wie und ob das Newton-Verfahren für f(x) �(�)konvergiert, wenn es durch beliebige x �xangewendet wird.

meine Lösung / 
i) 

die erste Ableitung f´(x) = 2/x

ii)  konvergiert die Methode nach 5 Iterationen zum Wert x = 1
Iteration x1 = 0,84657
Iteration x2 = 0,98758
Iteration x3 = 0,99992
Iteration x4 = 1,0000 gerundet
Iteration x5 = 1,0
Das Ergebnis zeigt, dass das Newton-Verfahren auch für die korrigierte Funktion schnell gegen die Nullstelle x = 1 konvergiert.

vi) die Konvergenz des Newton-Verfahrens für f(x)�(�)=ln⁡(�2) nur garantiert, wenn der Startwert x�0 nahe bei 1 liegt. Für Startwerte nahe bei Null oder sehr große Werte kann das Verfahren scheitern oder zu einem falschen Ergebnis konvergieren.

iii)

# Python program to demonstrate Newton's method

import numpy as np

def newton_method(f, df, x0, max_iter=10, tol=1e-6):
    """
    Implements Newton's method to find the root of a function.

    Parameters:
    f: function, the function for which we are finding the root
    df: function, derivative of f
    x0: float, initial guess for the root
    max_iter: int, maximum number of iterations
    tol: float, tolerance for convergence

    Returns:
    xn: float, the estimated root of the function
    """
    xn = x0
    for n in range(max_iter):
        fxn = f(xn)
        dfxn = df(xn)
        if abs(dfxn) < tol:
            print(f"Derivative too small at iteration {n}.")
            return xn
        xn_next = xn - fxn/dfxn
        if abs(xn_next - xn) < tol:
            print(f"Converged to {xn_next} after {n+1} iterations.")
            return xn_next
        xn = xn_next
    print(f"Exceeded maximum iterations. Last approximation is {xn}.")
    return xn

# Define the function f(x) and its derivative df(x) for f(x) = ln(x^2)
def f(x):
    return np.log(x**2)

def df(x):
    return 2/x

# Apply Newton's method starting from x0 = 0.5
initial_guess = 0.5
root = newton_method(f, df, initial_guess)

root

Ich weiß nicht ob meine Lösung richtig und vollständig!
kann jemand es nachsehen bitte 
danke
Diese Frage melden
gefragt

Punkte: 48

 

Auch hier: Aufgabenstellung im Original liefern.   ─   mikn 11.02.2024 um 12:40

Die fragen sind hand geschrieben es gab keine beschreibung.. die sind wichtig aber nicht völlständig. ich versuche die Idee zu verstehen   ─   abdull 11.02.2024 um 12:54
Kommentar schreiben
2 Antworten
1
Sieht gut aus. Habe mir Dein Programm angesehen und kein Fehler gefunden.
Dein Programm konvergiert recht schnell, was dafür spricht, dass Du das Newtonverfahren korrekt programmiert hast.
Diese Antwort melden
geantwortet

Punkte: 2.25K

 

Kommentar schreiben

0
Sieht gut aus. Habe mir Dein Programm angesehen und kein Fehler gefunden.
Dein Programm konvergiert recht schnell, was dafür spricht, dass Du das Newtonverfahren korrekt programmiert hast.
Diese Antwort melden (2)
geantwortet

Punkte: 2.25K

 

Kommentar schreiben