[PYTHON] [Rekursiver Satz von Poankare] Ich habe versucht, mit 100 Schlangenpendeln zu spielen, die zu einem langen Zyklus erweitert wurden ♬

Da es sich um ein Massenspiel handelt, halte ich es für bedeutungslos (natürlich), aber angesichts der Reihe von Planeten denke ich, dass solche Berechnungen tatsächlich sinnvoll sind, also werde ich sie zusammenfassen. Immerhin Poancares rekursiver Satz. Ich erinnerte mich daran, dass das dynamische System als konkretes Beispiel für "Wenn bestimmte Bedingungen erfüllt sind, wird es innerhalb einer begrenzten Zeit fast in seinen willkürlichen Ausgangszustand zurückkehren" von Bedeutung ist. Außerdem werden wir diesmal die Planetenserie nicht berechnen und simulieren. Dieses Mal möchte ich die Anzahl und den Zyklus von [vorherige Formel] frei ändern (https://qiita.com/MuAuan/items/ecae5631dc8ff3831878).

Simulation von 100 Stücken pro Tanz für 120 Sekunden

Und es ist eine Erweiterung bei 100 Stück. Dies ist mit der vorherigen Formel nicht möglich. Ändern Sie sie daher wie folgt.

N = 60
z0 =500
L0=980*(120/130)**2/(2*np.pi)**2
Fc0=1.0
Fc=[]
fc=1
Fc.append(fc)
for i in range(1,100,1):
    fc=fc*((131-i)/(130-i))
    Fc.append(fc)

Da es in 120 Sekunden wiederhergestellt wurde, ist das Ergebnis wie folgt.

Ich habe versucht zu spielen, indem ich 100 Schlangenpendel simuliert habe ♬ <img src="http://img.youtube.com/vi/cDJWJdXN4Q4/0.jpg "

Simulation von 15 Stücken pro Tanz für 120 Sekunden

Lassen Sie uns diesmal 15 Pendel mit einem Zeitraum von 120 Sekunden tanzen. Dies zeigt, dass praktisch jede Anzahl, Länge und Periode des Pendels entworfen werden kann. [Schlangenpendel] Ich habe eine Simulation von 15 Stücken für 120 Sekunden pro Tanz gemacht und damit gespielt ♬ <img src="http://img.youtube.com/vi/oe34YS3I5QE/0.jpg " Der Hauptcode könnte unten erreicht werden.

N = 60
L0=980*(120/65)**2/(2*np.pi)**2  #120 hier/65 120 ist wichtig
print(L0, 2*np.pi/np.sqrt(980/L0))
Fc0=1.0
z0 =150
Fc=[]
fc=1
Fc.append(fc)
for i in range(1,15,1):
    fc=fc*((66-i)/(65-i))  #65/Passen Sie die Verschiebung von jedem mit 64 an
    Fc.append(fc)

dataz=[]
linez=[]
y=0
for j in range(15):
    y += 2  #Pendel-Y-Achsen-Abstand
    dataz0 = np.array(list(genxy(N,L=L0*Fc[j]**2,z0=z0,y0=y))).T
    linez0, = ax.plot(dataz0[0, 0:1], dataz0[1, 0:1], dataz0[2, 0:1],'o')
    dataz.append(dataz0)
    linez.append(linez0)

Im Vergleich zum vorherigen wurde der Generator so erweitert, dass er wie folgt in Richtung der y-Achse angeordnet werden kann.

def genxy(n,L=20,z0=0,y0=0):
    phi = 0
    g = 980
    x0=5  #2.5
    omega = np.sqrt(g/L)
    theta0 = np.arcsin(x0/L)
    while phi < 600:
        yield np.array([L*np.sin(np.sin(phi*omega+np.pi/2)*theta0), y0,z0-L+L*(1-np.cos(np.sin(phi*omega+np.pi/2)*theta0))])
        phi += 1/n

Zusammenfassung

・ Ich möchte die Realisierung des rekursiven Theorems von Poancare in der natürlichen Welt wie Planetenreihen simulieren. ・ Ich möchte ein echtes Schlangenpendel in einem freien Zyklus realisieren

Bonus

from matplotlib import pyplot as plt
import numpy as np
import mpl_toolkits.mplot3d.axes3d as p3
from matplotlib import animation

fig, ax = plt.subplots(1,1,figsize=(1.6180 * 4, 4*1),dpi=200)
ax = p3.Axes3D(fig)

def genxy(n,L=20,z0=0,y0=0):
    phi = 0
    g = 980
    x0=5
    omega = np.sqrt(g/L)
    theta0 = np.arcsin(x0/L)
    while phi < 600:
        yield np.array([L*np.sin(np.sin(phi*omega+np.pi/2)*theta0), y0,z0-L+L*(1-np.cos(np.sin(phi*omega+np.pi/2)*theta0))])
        phi += 1/n
        
def update(num, data, line,s):
    line.set_data(data[:2,num-1 :num])
    line.set_3d_properties(data[2,num-1 :num])
    ax.set_xticklabels([])
    ax.grid(False)
    
N = 60
L0=980*(120/65)**2/(2*np.pi)**2
print(L0, 2*np.pi/np.sqrt(980/L0)) #84.6cm 1.846sec
Fc0=1.0   #omega=2pi/T
z0 =150
Fc=[]
fc=1
Fc.append(fc)
for i in range(1,15,1):
    fc=fc*((66-i)/(65-i))
    Fc.append(fc)

dataz=[]
linez=[]
y=0
for j in range(15):
    y += 2
    dataz0 = np.array(list(genxy(N,L=L0*Fc[j]**2,z0=z0,y0=y))).T
    linez0, = ax.plot(dataz0[0, 0:1], dataz0[1, 0:1], dataz0[2, 0:1],'o')
    dataz.append(dataz0)
    linez.append(linez0)

# Setting the axes properties
ax.set_xlim3d([-10., 10])
ax.set_xlabel('X')

ax.set_ylim3d([0.0, 30.0])
ax.set_ylabel('Y')

ax.set_zlim3d([0.0, z0-L0])
ax.set_zlabel('Z')
elev=0 #20. 
azim=90 #35.
ax.view_init(elev, azim)

frames =60*120
fr0=60
s0=0
s=s0

while 1:
    s+=1
    num = s
    for j in range(15):        
        update(num,dataz[j],linez[j],s0)
    """
    if s%fr0==0:
        print(s/fr0, s)
    plt.pause(0.001)    
    """

    if s%(fr0/10)==0:
        ax.set_title("s={}_sec".format(int(10*s/fr0)/10),loc='center')
        plt.pause(0.001)
        print(s/fr0)
        plt.savefig('./pendulum/'+str(int(10*s/fr0))+'.png')
        if s>=s0+frames:
            break

s0=30*120
s=s0+30*120
fr0=60
from PIL import Image,ImageFilter
images = []
for n in range(1,1201,1):
    exec('a'+str(n)+'=Image.open("./pendulum/'+str(n)+'.png ")')
    images.append(eval('a'+str(n)))
images[0].save('./pendulum/pendulum_{}_.gif'.format(100),
               save_all=True,
               append_images=images[1:],
               duration=100,
               loop=1)

Video speichern

Da die GIF-Animation nicht eingefügt werden kann, speichere die MP4-Datei mit dem folgenden Code und lade sie auf YouTube hoch.

from matplotlib import pyplot as plt
import numpy as np
import mpl_toolkits.mplot3d.axes3d as p3
import cv2

def cv_fourcc(c1, c2, c3, c4):
        return (ord(c1) & 255) + ((ord(c2) & 255) << 8) + \
            ((ord(c3) & 255) << 16) + ((ord(c4) & 255) << 24)

OUT_FILE_NAME = "output_video.mp4"
fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
dst = cv2.imread('./pendulum/1.png')
rows,cols,channels = dst.shape
out = cv2.VideoWriter(OUT_FILE_NAME, int(fourcc), int(10), (int(cols), int(rows)))

from PIL import Image,ImageFilter
for n in range(1,1201,1):
    dst = cv2.imread('./pendulum/'+str(n)+'.png')
    out.write(dst) #Ausgabe an mp4 oder avi

Recommended Posts

[Rekursiver Satz von Poankare] Ich habe versucht, mit 100 Schlangenpendeln zu spielen, die zu einem langen Zyklus erweitert wurden ♬
[Einführung in AWS] Ich habe versucht, mit der Sprach-Text-Konvertierung zu spielen ♪
Ich habe versucht, mit Quantx eine Linie mit gleitendem Durchschnitt des Volumens zu implementieren
Ich habe versucht, das Problem der Kombinationsoptimierung mit Qiskit zu lösen
Ich habe versucht, mit Hy ・ Define a class zu beginnen
Ich habe versucht, eine zufällige FizzBuzz-Spalte mit Blasensortierung zu sortieren.
Ich habe versucht, in einem tief erlernten Sprachmodell zu schreiben
[5.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[2nd] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ein Memorandum beim automatischen Erwerb mit Selen
[3.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[Python] Ein Memo, das ich versucht habe, mit Asyncio zu beginnen
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe versucht, mit Python eine 2-Kanal-Post-Benachrichtigungsanwendung zu erstellen
Ich habe versucht, Bulls and Cows mit einem Shell-Programm zu erstellen
Ich habe versucht, eine ToDo-App mit einer Flasche mit Python zu erstellen
[4.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[1.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, Jojo mit LSTM ein seltsames Zitat zu machen
Ich habe versucht, mit Go einen exklusiven Kontrollmechanismus zu erstellen
Ich habe versucht, eine Blockchain zu implementieren, die tatsächlich mit ungefähr 170 Zeilen funktioniert
Ich habe versucht, ein Programm zu erstellen, das Hexadezimalzahlen mit Python in Dezimalzahlen konvertiert
Ich habe versucht, ein Plug-In mit HULFT IoT Edge Streaming [Entwicklung] (2/3) zu erstellen.
Ich habe versucht, "Sakurai-san" LINE BOT mit API Gateway + Lambda zu erstellen
Ich habe ein Systemkonfigurationsdiagramm mit Diagrams on Docker geschrieben
Ich habe versucht, mit Raspeye 4 (Python Edition) ein signalähnliches Signal zu erzeugen.
Ich habe versucht, ein Plug-In mit HULFT IoT Edge Streaming [Ausführung] (3/3) zu erstellen.
Ich habe versucht, mit django eine E-Mail zum Abschluss der Registrierung von Google Mail zu senden.
[Outlook] Ich habe versucht, mit Python automatisch eine tägliche Berichtsmail zu erstellen
Ich habe versucht, ein Plug-In mit HULFT IoT Edge Streaming [Setup] (1/3) zu erstellen.
Ich habe versucht, eine Mac Python-Entwicklungsumgebung mit pythonz + direnv zu erstellen
Ich habe versucht, einen URL-Verkürzungsdienst mit AWS CDK serverlos zu machen
Ich habe versucht, Trumps Kartenspiel in Python zu implementieren
Ich habe versucht, einen Linebot zu erstellen (Implementierung)
Ich habe versucht, Autoencoder mit TensorFlow zu implementieren
Ich habe versucht, einen Linebot zu erstellen (Vorbereitung)
Ich habe versucht, AutoEncoder mit TensorFlow zu visualisieren
Ich habe versucht, mit Hy anzufangen
Ich habe versucht, ○ ✕ mit TensorFlow zu spielen
Ich habe eine funktionale Sprache mit Python ausprobiert
Ich habe versucht, CVAE mit PyTorch zu implementieren
Ich habe versucht, mit Pillow mit dem Bild zu spielen
Ich habe eine Web-API erstellt
Ich habe versucht, TSP mit QAOA zu lösen
Ich habe versucht, einen periodischen Prozess mit CentOS7, Selenium, Python und Chrome durchzuführen
Ich habe eine einfache Mail-Sendeanwendung mit tkinter von Python erstellt
Als ich versuchte, eine VPC mit AWS CDK zu erstellen, konnte ich es aber nicht schaffen
[Patentanalyse] Ich habe versucht, mit Python eine Patentkarte zu erstellen, ohne Geld auszugeben
Als ich versuchte, mit Python eine virtuelle Umgebung zu erstellen, funktionierte dies nicht
Ich habe eine Burgsuch-API mit Elasticsearch + Sudachi + Go + Echo erstellt
Ich habe versucht, mit Selenium + Python einfach ein vollautomatisches Anwesenheitssystem zu erstellen