アニメーションの実装方法について教えてください。
解決したいこと
モデルのアニメーションの実装方法がわからないためご教授いただけると幸いです。
目標としては前回の質問と同じ単位円上を動く振動子のアニメーションです。
発生している問題・エラー
TypeError: unsupported operand type(s) for +: 'PathCollection' and 'PathCollection'
該当するソースコード
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation
fig, ax = plt.subplots()
N = 2
K = 5
w1 = np.random.standard_cauchy()
w2 = np.random.standard_cauchy()
T=50
n = 5000
h = T/n
t = np.arange(0,T,h)
f1 = lambda theta1,theta2,t=0 : w1-K*np.sin(theta1-theta2)/N
f2 = lambda theta1,theta2,t=0 : w2-K*np.sin(theta2-theta1)/N
theta1= np.empty(n)
theta2= np.empty(n)
theta1[0]=np.pi/2
theta2[0]=3*np.pi/2
ims = []
for i in range(n-1):
k1 = h * f1(theta1[i],theta2[i],t[i])
l1 = h * f2(theta1[i],theta2[i],t[i])
k2 = h * f1(theta1[i] + k1 /2 , theta2[i]+l1/2,t[i] + h/2 )
l2 = h * f2(theta1[i]+k1/2, theta2[i]+ l1 /2 ,t[i] + h/2 )
k3 = h * f1(theta1[i] + k2 /2 , theta2[i]+l2/2,t[i] + h/2 )
l3 = h * f2(theta1[i]+k2/2, theta2[i]+ l2 /2 ,t[i] + h/2 )
k4 = h * f1(theta1[i] + k3 , theta2[i]+l3, t[i] + h )
l4 = h * f2(theta1[i]+k3, theta2[i]+ l3 , t[i] + h )
theta1[i+1] = theta1[i] + 1/6 * (k1 + 2*k2 + 2*k3 + k4 )
theta2[i+1] = theta2[i] + 1/6 * (l1 + 2*l2 + 2*l3 + l4 )
x1=np.cos(theta1)
y1=np.sin(theta1)
x2=np.cos(theta2)
y2=np.sin(theta2)
im1 = ax.scatter(x1, y1)
im2 = ax.scatter(x2,y2)
ims.append(im1+im2)
anim = animation.ArtistAnimation(fig, ims,interval=100)
plt.show()
自分で試したこと
先日、こちらの質問箱で回答をいただき、自分でもコードを書けるようになろうと蔵本モデルをルンゲクッタにて書き表してみました。(N=2からスタートしています)
なんとか実装までは行けた気がするのですがこれをアニメーションにしようとしたところ壁にぶつかりました。
もし、アニメーションの実装に関しておかしな点があればご教授ください。