저는 매개 변수에 따라 미분 방정식을 수치 적으로 풀고 있습니다. 저는 솔루션에 관심이 없지만 매개 변수의 값에 따라 행동에 관심이 있습니다. 매우 정확한 설명을 원하기 때문에 매개 변수의 값을 아주 세밀하게 배열하여 ODE 해결 프로세스를 많이 사용해야합니다. 그래서 저는 그러한 프로그램을 "병렬화"할 수 있는지 알고 싶습니다. 아이디어는 내 컴퓨터의 각 프로세서가 ODE를 해결할 수있는 매개 변수 쌍입니다. 각 for
루프가 너무 독립적입니다미분 방정식을 병렬로 해결, 파이썬
import matplotlib.pyplot as plt
from scipy.integrate import ode
import numpy as np
# - ODE - #
def sys(t,x,p1,p2): #p1 and p2 are the parameters
dx=np.zeros(2)
dx[0] = x[1]
dx[1] = (p1+p2*cos(t))*x[0]
return dx
t0=0; tEnd=10; dt=0.01
r = ode(sys).set_integrator('dopri5', nsteps=10,max_step=dt)
Y=[];S=[];T=[]
ic=[.1,0]
# - parameters range - #
P1=np.linspace(0,1,100)
P2=np.linspace(0,1,100)
# -------------------- #
for p1 in P1:
for p2 in P2:
r.set_initial_value(ic, t0).set_f_params(p1,p2)
flag='No'
while r.successful() and r.t +dt < tEnd:
r.integrate(r.t+dt)
Y.append(r.y)
T.append(r.t)
#-This is what we want to know.
if r.y[0]>2*ic[0]:
flag='Yes'
break
if flag=='Yes':
plt.scatter(p1,p2,s=1, c='k', marker='.')
# ------------------------------------ #
plt.show()
참고 : 예를의 종류는 다음과는 병렬 방식으로 그 for
루프를 만들 수 있습니까? 그래서 나는 내 8 개의 프로세서가 각각 한 번에 두 번 루프를 수행하여 대략 8 배의 속도로 계산할 수 있다고 생각할 것입니다. 아니면 적어도 빠른?
[큐] (http://docs.python.org/3.3/library/queue.html) 모듈 – kalhartt
을 살펴보십시오. 고맙습니다. 확인했지만 [dispy] (http : //)도 있습니다. dispy.sourceforge.net) 내가 원하는대로 내 문제를 해결, 내 자신의 질문에 대답 생각했지만 그것은 적어도 나를 위해, 불가능한 것 같습니다. – PepeToro
@ user58533 당신의 질문에 대답하기에 충분한 평판 포인트가 있다고 생각합니다. 나는 당신의 솔루션에 더 많은 세부 사항을 보는 것이 흥미로울 것이라고 생각한다. –