[matlibplot] Nur einen Eintrag des Arrays graphisch auftrage

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Klaus82
User
Beiträge: 2
Registriert: Donnerstag 6. Dezember 2012, 09:52

Hallo ihr Lieben,

ich mache gerade erste Gehversuche mit Python und hoffe, dass Fragen zu scipy hier hinein gehören. Ich habe mich gleich auf den harmonischen Oszillator gestürzt, dessen DGL 2. Ordnung auf zwei DGLs 1. Ordnung reduziert wird. Diese stehen dann (siehe Code) im Array x, wobei x[0] die Auslenkung ist und x[1] die Geschwindigkeit.

Jetzt würde ich anschließend gerne nur die Auslenkung, also x[0], über die Zeit graphisch auftragen. Der Befehl pylab.plot nimmt jetzt allerdings sehr benutzerfreundlich r an und plottet damit alle Einträge des Arrays x!
Wie kann ich denn nur x[0] plotten lassen? Ich hatte es im Stile von pylab.plot(t,r[0]) versucht, aber das gibt mir eine Fehlermeldung aus. :?

Code: Alles auswählen

from scipy import integrate
import pylab

def deriv(x,t,k,dummy):
        return (x[1],-k*x[0])

if __name__ == '__main__':
        x0 = [30,0]
        t = range(0,100,1)
        k = 0.05
        dummy = 10

        r = integrate.odeint(deriv,x0,t,args=(k,dummy))

        pylab.plot(t,r)
        pylab.show()
Viele Grüße,
-- Klaus.
BlackJack

@Klaus82: Die Betreffzeile ist etwas irreführend, denn Du möchtest ja gerade nicht nur einen Eintrag des Arrays `r` sondern mehr. Wenn man sich das mal in interaktiv anschaut hat `r` 100 Einträge in der ersten Dimension und jeweils zwei in der Zweiten. Das erste Element von `r` ist also ein Array mit zwei Werten:

Code: Alles auswählen

In [42]: r.shape
Out[42]: (100, 2)

In [43]: r[0]
Out[43]: array([ 30.,   0.])
Was Du haben möchtest ist die komplette erste Dimension, *davon* aber nur den ersten Eintrag:

Code: Alles auswählen

In [44]: r[:,0]
Out[44]: 
array([ 30.        ,  29.2531198 ,  27.04966785,  23.49935854,
        18.77896885,  13.12353655,   6.81465695,   0.16646187,
        -6.49002178, -12.82335416, -18.51818592, -23.29095992,
       -26.90403016, -29.17749463, -29.99815296, -29.32514284,
       -27.19197485, -23.7048636 , -19.0374394 , -13.42210276,
        -7.13845263,  -0.49936448,   6.164588  ,  12.52159324,
        18.25512313,  23.07969367,  26.75507972,  29.09827652,
        29.99261162,  29.39355427,  27.33093266,  23.90744887,
        19.29356506,  13.71901579,   7.46136915,   0.8322059 ,
        -5.83839465, -12.21828977, -17.98981165, -22.86558458,
       -26.60283402, -29.01547488, -29.9833769 , -29.45834622,
       -27.46652522, -24.10709057, -19.54731526, -14.0142397 ,
        -7.78336695,  -1.16494467,   5.51148258,  11.913482  ,
        17.72228517,  22.64866007,  26.44731256,  28.92910011,
        29.97044951,  29.51950998,  27.59873459,  24.30376263,
        19.79865739,  14.30773714,   8.10440585,   1.49753985,
        -5.1838917 , -11.60720686, -17.45257582, -22.42894582,
       -26.28853325, -28.83916161, -29.95383052, -29.57703772,
       -27.72754469, -24.49744143, -20.04756127, -14.5994726 ,
        -8.42444679,  -1.82995079,   4.85566217,  11.29950194,
        17.18071676,  22.2064691 ,  26.12651662,  28.74567225,
        29.933523  ,  29.63092344,  27.85294054,  24.68810364,
        20.29399634,  14.88941014,   8.74345024,   2.16213631,
        -4.52683479, -10.99040571, -16.90674223, -21.98125802,
       -25.96128262, -28.64864267, -29.90952922, -29.68116019])
Klaus82
User
Beiträge: 2
Registriert: Donnerstag 6. Dezember 2012, 09:52

BlackJack hat geschrieben: @Klaus82: Die Betreffzeile ist etwas irreführend, denn Du möchtest ja gerade nicht nur einen Eintrag des Arrays `r` sondern mehr. Wenn man sich das mal in interaktiv anschaut hat `r` 100 Einträge in der ersten Dimension und jeweils zwei in der Zweiten. Das erste Element von `r` ist also ein Array mit zwei Werten:
Hi BlackJack,

natürlich hast du recht, ich war unpräzise. Mein x ist ein Vektor mit 2 Einträgen oder eine 2 x 1 bzw. 1 x 2 Matrix (je nach Interpretation). Und diesen Vektor stecke ich für n Zeitschritte in r, sodass r dann eine 2 x n bzw. n x 2 Matrix ist.

Gruß,
-- Klaus.
Antworten