Poincare Section Plot in Python

Neue Frage »

Hammala Auf diesen Beitrag antworten »
Poincare Section Plot in Python
Meine Frage:
Hallo zusammen,

ich würde gern eine Poincare Section plotten, habe auch ein Programm in Python dazu geschrieben, aber es geht einfach nicht! Ich habe vier Anfangsbed., eine setze ich Null und die vierte ist durch Energieerhaltung gegeben.
Der Code ist
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
import matplotlib.pyplot as plt
import sympy as sy
import numpy as np
from scipy.integrate import odeint


"Poincare Surface of Section for z=0"


def f(Vector_z,t, epsilon):                                                 
    mu, nu, impuls_mu, impuls_nu = Vector_z
    return [impuls_mu, impuls_nu, 2*epsilon*mu - 3*mu*(nu**4) - 6*(mu**3)*nu**2, 
            2*epsilon*nu - 3*nu*(mu**4) - 6*(nu**3)*(mu**2)]

def get_trajectory(startVector, times, epsilon):
    return odeint(f, startVector, times, args=(epsilon,))

def zweiterImpuls(mu, nu, impuls):
    return (-np.sqrt(4 - impuls**2 + 2*epsilon*(mu**2 +nu**2) 
            - 3*(mu**2)*(nu**2)*(mu**2 +nu**2)))


if __name__ == '__main__':


    epsilon = -5.44667/2                  
    nu_PunktePoincare = []
    p_nu_PunktePoincare = []
    times = np.linspace(0,5,2000)
    
    #Anfangswerte festlegen
    mu = 0.43903
    nu = 0.43903
    impuls_mu = 0.9635 
    impuls_nu = zweiterImpuls(mu, nu, impuls_mu)

    startVector = [mu, nu, impuls_mu, impuls_nu]
    
    AllVectors =    [startVector, 
                    [0, 2/np.sqrt(-2*epsilon), 0, zweiterImpuls(0, 2/np.sqrt(-2*epsilon), 0)], 
                    [0, 1.7/np.sqrt(-2*epsilon), 0.4, zweiterImpuls(0, 1.7/np.sqrt(-2*epsilon), 0.4)],
                    [0, 1.7/np.sqrt(-2*epsilon), 0.8, zweiterImpuls(0, 1.7/np.sqrt(-2*epsilon), 0.8)],
                    [0, 1.4/np.sqrt(-2*epsilon), 0, zweiterImpuls(0, 1.4/np.sqrt(-2*epsilon), 0)],
                    [0, 1.4/np.sqrt(-2*epsilon), 0.4, zweiterImpuls(0, 1.4/np.sqrt(-2*epsilon), 0.4)],
                    [0, 1.4/np.sqrt(-2*epsilon), 0.8, zweiterImpuls(0, 1.4/np.sqrt(-2*epsilon), 0.8)], 
                    [0, 1.4/np.sqrt(-2*epsilon), 1.2, zweiterImpuls(0, 1.4/np.sqrt(-2*epsilon), 1.2)],
                    [0, 1.1/np.sqrt(-2*epsilon), 0, zweiterImpuls(0, 1.1/np.sqrt(-2*epsilon), 0)],
                    [0, 1.1/np.sqrt(-2*epsilon), 0.4, zweiterImpuls(0, 1.1/np.sqrt(-2*epsilon), 0.4)],
                    [0, 1.1/np.sqrt(-2*epsilon), 0.8, zweiterImpuls(0, 1.1/np.sqrt(-2*epsilon), 0.8)],  
                    [0, 1.1/np.sqrt(-2*epsilon), 1.2, zweiterImpuls(0, 1.1/np.sqrt(-2*epsilon), 1.2)], 
                    [0, 1.1/np.sqrt(-2*epsilon), 1.6, zweiterImpuls(0, 1.1/np.sqrt(-2*epsilon), 1.6)],
                    [0, 0.7/np.sqrt(-2*epsilon), 0, zweiterImpuls(0, 0.7/np.sqrt(-2*epsilon), 0)],
                    [0, 0.7/np.sqrt(-2*epsilon), 0.4, zweiterImpuls(0, 0.7/np.sqrt(-2*epsilon), 0.4)],
                    [0, 0.7/np.sqrt(-2*epsilon), 0.8, zweiterImpuls(0, 0.7/np.sqrt(-2*epsilon), 0.8)],
                    [0, 0.7/np.sqrt(-2*epsilon), 1.2, zweiterImpuls(0, 0.7/np.sqrt(-2*epsilon), 1.2)], 
                    [0, 0.7/np.sqrt(-2*epsilon), 1.8, zweiterImpuls(0, 0.7/np.sqrt(-2*epsilon), 1.8)],
                    [0, 0.4/np.sqrt(-2*epsilon), 0, zweiterImpuls(0, 0.4/np.sqrt(-2*epsilon), 0)],
                    [0, 0.4/np.sqrt(-2*epsilon), 0.4, zweiterImpuls(0, 0.4/np.sqrt(-2*epsilon), 0.4)],
                    [0, 0.4/np.sqrt(-2*epsilon), 0.8, zweiterImpuls(0, 0.4/np.sqrt(-2*epsilon), 0.8)],
                    [0, 0.4/np.sqrt(-2*epsilon), 1.2, zweiterImpuls(0, 0.4/np.sqrt(-2*epsilon), 1.2)], 
                    [0, 0.4/np.sqrt(-2*epsilon), 1.8, zweiterImpuls(0, 0.4/np.sqrt(-2*epsilon), 1.8)],
                    [0, 0.1/np.sqrt(-2*epsilon), 0, zweiterImpuls(0, 0.1/np.sqrt(-2*epsilon), 0)],
                    [0, 0.1/np.sqrt(-2*epsilon), 0.4, zweiterImpuls(0, 0.1/np.sqrt(-2*epsilon), 0.4)],
                    [0, 0.1/np.sqrt(-2*epsilon), 0.8, zweiterImpuls(0, 0.1/np.sqrt(-2*epsilon), 0.8)],
                    [0, 0.1/np.sqrt(-2*epsilon), 1.2, zweiterImpuls(0, 0.1/np.sqrt(-2*epsilon), 1.2)], 
                    [0, 0.1/np.sqrt(-2*epsilon), 1.8, zweiterImpuls(0, 0.1/np.sqrt(-2*epsilon), 1.8)]]
    
    
    for element in AllVectors:
        liste = get_trajectory(element, times, epsilon)
    

    # mu wird Null gesetzt, also kleiner als 0.003
    for element in liste:
        if(abs(element[0]) < 0.003):
            nu_PunktePoincare.append(element[1])
            p_nu_PunktePoincare.append(element[3])
            
    #nu noch skalieren, fürs spätere Plotten
    scaledPoincare_nuPoints = []
    for element in nu_PunktePoincare:
        temporary = element*np.sqrt(-2*epsilon)
        scaledPoincare_nuPoints.append(temporary)

    plt.plot(scaledPoincare_nuPoints, p_nu_PunktePoincare, 'b.')
    plt.xlabel(r'$\sqrt{-2 \epsilon} \nu$', fontsize=20)
    plt.ylabel(r'$p_{\nu}$', fontsize=20)
    plt.show()


Meine Ideen:
Der Fehler wird denk ich irgendwo an den Listen hängen???
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »