2016-04-08 24 views
0

Ich versuche ein Programm zu programmieren, das eine Funktion auf verschiedene Arten (Euler, Runge ...) integriert und die eingebaute Funktion scipy.integrate.odeint verwendet.Tuple-Indizes müssen ganze Zahlen sein, nicht Tupel, Matplot

Alles und ich bekomme die richtigen Ergebnisse, aber ich muss auch ein Diagramm mit den Ergebnissen erstellen und das ist dann, wenn alles schief geht. Für die Odeint-Funktion kann ich das Diagramm nicht zeichnen. Hier ist mein Code und der Fehler, ich hoffe, jemand wird mir helfen können.

def odeint(phi, t0tf, Y0, N): 

    T6=numpy.zeros((N+1)) 
    T6[0]=t0tf[0] 
    h=(t0tf[1]-t0tf[0])/N 

    for i in range (N): 
     T6[i+1]=T6[i]+h 

    def f(t,x): 
     return phi(x,t) 

    Y6 = scipy.integrate.odeint(f,Y0,T6, full_output=True) 

    return Y6 

Y6 = edo.odeint(phi, t0tf, Y0, N) 
T6Y6 = numpy.hstack([Y6]) 
print("Solutions Scipy :") 
print() 
print(T6Y6) 
print() 

mpl.figure("Courbes") 
mpl.plot(Y6[0:N,0],Y6[0:N,1],color="yellow",label="Isoda") 
mpl.show() 

Und der Fehler ist:

mpl.plot(Y6[0:N,0],Y6[0:N,1],color="yellow",label="Isoda") 

TypeError: tuple indices must be integers, not tuple 

Vielen Dank im Voraus (PS: Ich bin französisch so könnte meine Sätze irgendwie wackelig)

+0

Können Sie bitte die vollständige Traceback-Funktion verwenden und genügend Informationen enthalten, damit wir Ihr Beispiel kopieren, einfügen und ausführen können? – tacaswell

Antwort

0

Y6 ein Tupel zu sein scheint, dass Sie falsch anrufen. Es ist schwierig, genau zu zeigen, was falsch ist, da Sie nicht die Daten liefern aber das folgende Beispiel zeigt, wie Elemente aus einem tuple nennen:

y = ((1,2,3,4,5),) 
print('This one works: ',y[0][1:]) 
print(y[1:,0]) 

, das Ergebnis ist folgende:

This one works: (2, 3, 4, 5) 
Traceback (most recent call last): 
    File "E:\armatita\stackoverflow\test.py", line 9, in <module> 
    print(y[1:,0]) 
TypeError: tuple indices must be integers, not tuple 
Verwandte Themen