Also habe ich eine Funktion für Euler-Methode codiert. Ich möchte jedoch Anfangsbedingungen mit beliebigen Dimensionen verwenden können. So zum Beispiel funktioniert derzeit meine Funktionen mit diesem:mehrdimensionale Euler-Methode Python
>>>Euler(f, x0, t0, h, N)
wo x0 ist ein float. Aber ich möchte es in der Lage sein, dies zu verwenden:
>>>Euler(f, [x0], t0, h, N)
wo x0 ist jetzt eine Liste von schwimmt. (multidimensional)
f = Funktion, x0 = Anfangsbedingungen zum Zeitpunkt t0,
t0 = Anfangszeit, h = Schrittweite, N = Anzahl der Schritte.
Ich habe versucht, eine for-Schleife:
def Euler(f,x0,t0,h,N):
t = t0
y = x0
z = []
v = []
for i in y:
while t <= N:
xval = t
yval = [y]
t += h
y += h * f(t,y[i]) #i have also tried y+= h*f(t, i)
z.append(xval)
v.append(yval)
return z, v
Der Fehler ich erhalte, ist Typeerror: Liste Indizes ganze Zahlen oder Scheiben sein müssen, nicht schwimmen. Was ich verstehe, was bedeutet, dass ich das y indexieren muss, wie y [0], y [1], etc ... aber wenn ich das tue
y + = h * f (t, y [:])
Es gibt mir einen Fehler in Bezug auf meine anderen Funktion in der Datei: f =>
TypeError: a float is required
line 22, in <module> vv = -x**3 - x + sin(t)
Wenn ich versuche, auch
y += h * f(t, y[0])
und ich betreten
>>>Euler(f, [0., 1.], 0., 1, 10)
line 15, in <module>
y += h * f(t,y[0])
builtins.TypeError: 'float' object is not iterable
Ich möchte im Wesentlichen 2 Listen zurückgeben, erste Liste ist das z, wo es eine Liste der Zeitwerte zurückgibt, und die zweite Liste v, wo es eine Liste der Liste jedes Ergebnisses während jedes Schritts zurückgibt. Bisher hat es funktioniert, wo ich einen Float, aber keine Liste verwendet habe. Also welchen Code vermisse ich?
Es würde wahrscheinlich an mehreren Stellen funktionieren, wenn Sie 'x0' als' numpy.array' definieren würden. – LutzL