Plot einer Funktion mit for-Schleife

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Frithnandir
User
Beiträge: 3
Registriert: Freitag 6. April 2018, 12:12

Hallo ihr Lieben,

in statistischer Physik soll ich für unterschiedliche N diese Funktion über die Zeit plotten.

Code: Alles auswählen

def M(t,N):
    m=0
    v = [[Z0] for y in range(N)] 
    for i in range(t):
        for j in range(N):
            R=random.uniform(0,1)
            if R<p:
                v[j]=Z1
            if R>p:
                v[j]=Z0
    for h in range(N):
        if v[h]==Z1:
            m=m+1  
        if v[h]==Z0:
            m=m-1
    return(m/N);
Die Funktion gibt für einzelne Werte alles richtig aus, aber wenn ich jetzt mit

Code: Alles auswählen

t1 =  np.linspace(0, 60, 61, endpoint=True)
F=M(t1,100)
plt.plot(t1,F)
startx, endx = -10.1, 10.1
starty, endy = -10.1, 10.1
plt.axis([startx, endx, starty, endy])
plt.show()
etwas plotten will, dann sagt es mir nur, dass t1 kein integer für die for Schleife ist- was ja Sinn macht. Ich weiß jetzt leider nicht wie ich das gut plotten kann.

danke für die Hilfe
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Frithnandir: M erwartet die Anzahl der Zeitschritte, wobei ich jetzt nicht verstehe, warum, weil Du in jedem Zeitschritt alles wieder mit Zufallszahlen belegst. `Z0`, `Z1` und `p` kommen aus dem Nichts, das sollte nicht sein. Du erstellst eine Liste von Listen, um danach die inneren Listen durch Zahlen zu ersetzen. Sowas macht man nicht. Insgesamt läßt sich das meiste, weil unnütz, wegwerfen und erhält die äquivalente Funktion:

Code: Alles auswählen

def M(t,N):
    c = (np.random.uniform(0, 1, N) < p).sum()
    return (2 * c - N) / N
Diese Funktion kannst Du dann aber nicht plotten.
Frithnandir
User
Beiträge: 3
Registriert: Freitag 6. April 2018, 12:12

Z0, Z1 sind Zustände die ich jetzt mal als Vektoren definiert hab (1,0) und (0,1)
Tut mir leid dass ich die nicht mit reinkopiert hab das Programm umfasst mehrere Funktionen- p ist gegeben.

Ich versuchs mal mit deiner Funktion und schau ob sich das plotten lässt :))

Danke!
Frithnandir
User
Beiträge: 3
Registriert: Freitag 6. April 2018, 12:12

Hmm, also am liebsten wärs mir ich würd die Funktion für eine Liste von Zeitpunkten ausweren- bekomm dann eine Liste an Funktionswerten und Plot die dann als Punkte?

Lg
FF
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie schon geschrieben, die Funktion macht für mich nicht wirklich Sinn, von daher, was willst Du eigentlich ausrechnen?
Antworten