for文について
解決したいこと
for文を用いて解析を行っているのですがKの値を変えていっても出てくる値がすべて一緒なので、どこがおかしいのか知りたいです。
解析したい関数は以下になります。
\dot{θ} = ω_i+\frac{K}{N}\sum_{k=1}^{N} sin(θ_j-θ_i)
発生している問題・エラー
該当するソースコード
ソースコードを入力
import numpy as np
import random
import matplotlib.pyplot as plt
import time
start=time.time()
def theta_mat(theta):
theta=theta.reshape(1, -1)
theta_mat=theta.copy()
return theta_mat
N = 3#振動子数
Ks = np.arange(1.5,5,0.1) #結合強度
theta = np.array([2.0 * np.pi * random.uniform(0,1) for i in range(N)]).reshape(1, -1) # start point
omega=np.array([np.random.standard_cauchy() for i in range(N)]).reshape(1,-1)# anglular velocity
t0=0
tf=300#測りたい時間の10倍
ts=np.arange(t0,tf,1)
h=0.1 # micro time
Rs=[]
for K in Ks:
for t in ts:
print(K)
theta_now=theta[t, :].reshape(-1, 1)
sumx=np.sum(np.cos(theta_now))
sumy=np.sum(np.sin(theta_now))
R=(sumx**2+sumy**2)**(1/2)/N
Rs.append(R)
k1=(omega+K*np.sum(np.sin(theta_mat(theta_now)-theta_now),axis=1)/N).reshape(-1, 1)
theta4k2=theta_now+(h/2)*k1
k2=(omega+K*np.sum(np.sin(theta_mat(theta4k2)-theta4k2),1)/N).reshape(-1, 1)
theta4k3=theta_now+(h/2)*k2
k3=(omega+K*np.sum(np.sin(theta_mat(theta4k3)-theta4k3),1)/N).reshape(-1, 1)
theta4k4=theta_now+h*k3
k4=(omega+K*np.sum(np.sin(theta_mat(theta4k4)-theta4k4),1)/N).reshape(-1, 1)
theta_next=theta_now+(h/6)*(k1+2*k2+2*k3+k4)
theta_next=np.mod(theta_next, 2*np.pi)
theta=np.r_[theta, theta_next.reshape(1, N)]
#print(sumx,sumy,R)
t+=1
#print(t*h)
print(Rs)
Rave=np.sum(Rs)/len(Rs)
plt.scatter(K,Rave)
#print(Rs,Rave)
Rs.clear()
#print(Rs)
end=time.time()
plt.ylabel('R')
plt.xlabel('K')
plt.grid()
print('処理時間',end-start)
plt.show()
自分で試したこと
printでKの値が変わっていることを確認したのですが、それがうまく代入できていない(?)ようです。
もし、お気づきの点ありましたらご教授ください。