Warum liefert meine Berechnung der Finite-Differenzen-Gewichte für Taylor-Reihen falsche Ergebnisse?
Posted: 18 Jan 2025, 21:44
Ich versuche, die Gewichte für eine Finite-Differenzen-Approximation der ersten Ableitung f′(x)f'(x)f′(x) mithilfe der Taylor-Reihenentwicklung zu berechnen. Ich suche nach den Gewichten a,b,c,d,ea, b, c, d, ea,b,c,d,e, so dass:
af(x+2Δx )+bf(x+Δx)+cf(x)+df(x−Δx)+ef(x−2Δx)a f(x+2\Delta x) + b f(x+\Delta x) + c f(x) + D f(x-\Updelta x) + e f(x-2\Updelta x)af(x+2Δx)+bf(x+Δx)+cf(x)+df(x−Δx)+ef(x−2Δx)
nähert sich f′(x)f'(x)f′(x) an. Folgendes habe ich getan:
[*]Erwartetes Verhalten:
I möchten, dass die Lösung mit den theoretischen Gewichten für eine zentrale Finite-Differenzen-Approximation der ersten Ableitung f′(x) unter Verwendung von fünf Punkten übereinstimmt.
af(x+2Δx )+bf(x+Δx)+cf(x)+df(x−Δx)+ef(x−2Δx)a f(x+2\Delta x) + b f(x+\Delta x) + c f(x) + D f(x-\Updelta x) + e f(x-2\Updelta x)af(x+2Δx)+bf(x+Δx)+cf(x)+df(x−Δx)+ef(x−2Δx)
nähert sich f′(x)f'(x)f′(x) an. Folgendes habe ich getan:
- Ich habe die Taylor-Reihenentwicklung für f(x±kΔx)f(x \pm k\Delta x)f verwendet (x±kΔx), wobei k=1,2k = 1, 2k=1,2.
- Ich habe ein System linearer Gleichungen erstellt um die folgenden Bedingungen durchzusetzen:
- Koeffizienten von f(x): a+b+c+d+e=0
- Koeffizienten von f′(x): 2a+b−d−2e=1
- Koeffizienten von f′′(x): 4a+b+ d+4e=0
- Koeffizienten von f(3)(x): 8a+b−d−8e=0
- Koeffizienten von f(4)(x): 16a+b+d+16e=0
- Ich habe die Matrixgleichung A⋅z=bA \cdot z = implementiert bA⋅z=b in Python:
Code: Select all
import numpy as np A = np.array([ [1, 1, 1, 1, 1], # Coefficients of f(x) [2, 1, 0, -1, -2], # Coefficients of f'(x) [4, 1, 0, 1, 4], # Coefficients of f''(x) [8, 1, 0, -1, 8], # Coefficients of f'''(x) [16, 1, 0, 1, 16] # Coefficients of f''''(x) ]) b = np.array([0, 1, 0, 0, 0]) # Targeting the first derivative z = np.linalg.solve(A, b) print(z)
- Das Problem:
Die Ausgabe, die ich erhalte, ist:Die erwarteten Gewichte für die erste Ableitung sollten jedoch etwa so lauten:Code: Select all
[0.25,0,-0,0,-0.25]
-
Code: Select all
[-1/12,2/3,0,-2/3,1/12]
- Was ich versucht habe:
Doppelt überprüft die Koeffizienten in Matrix A, um sicherzustellen, dass sie mit der Taylor-Reihenentwicklung übereinstimmen. - Überprüft, dass der Vektor auf der rechten Seite b=[0,1 ,0,0,0] ist für die Approximation von f′(x) korrekt.
[*]Erwartetes Verhalten:
I möchten, dass die Lösung mit den theoretischen Gewichten für eine zentrale Finite-Differenzen-Approximation der ersten Ableitung f′(x) unter Verwendung von fünf Punkten übereinstimmt.