Ich versuche, die Ableitung einer Funktion bei x = 0 zu berechnen, aber ich bekomme immer ungerade Antworten mit allen Funktionen, die ich versucht habe. Zum Beispiel mit f (x) = x ** 2 bekomme ich die Ableitung zu 2 an allen Punkten. Meine finiten Differenzkoeffizienten sind korrekt, sie ist für die zweite Ableitung in Bezug auf x genau zweiter Ordnung.Finite-Differenz-Näherungen in Python
from numpy import *
from matplotlib.pyplot import *
def f1(x):
return x**2
n = 100 # grid points
x = zeros(n+1,dtype=float) # array to store values of x
step = 0.02/float(n) # step size
f = zeros(n+1,dtype=float) # array to store values of f
df = zeros(n+1,dtype=float) # array to store values of calulated derivative
for i in range(0,n+1): # adds values to arrays for x and f(x)
x[i] = -0.01 + float(i)*step
f[i] = f1(x[i])
# have to calculate end points seperately using one sided form
df[0] = (f[2]-2*f[1]+f[0])/step**2
df[1] = (f[3]-2*f[2]+f[1])/step**2
df[n-1] = (f[n-1]-2*f[n-2]+f[n-3])/step**2
df[n] = (f[n]-2*f[n-1]+f[n-2])/step**2
for i in range(2,n-1): # add values to array for derivative
df[i] = (f[i+1]-2*f[i]+f[i-1])/step**2
print df # returns an array full of 2...
Haben Sie Druck-Debugging versucht hilft? (Debugging durch Hinzufügen von Aufrufen zu "print" auf Zwischenwerten) – Danra
@Danra Ich habe versucht und das Problem scheint bei der Berechnung df [i] auftreten. Ich habe keine Ahnung, warum, weil die tatsächliche Berechnung korrekt sein sollte, und ich habe auf einem Rechner versucht, aber ich bekomme die gleiche Antwort. Die Mathematik ist richtig, also habe ich keine Ahnung, was falsch ist. –
@Danra mit dem Debugger ist eine bessere Idee – reuns