4

저는 매개 변수에 따라 미분 방정식을 수치 적으로 풀고 있습니다. 저는 솔루션에 관심이 없지만 매개 변수의 값에 따라 행동에 관심이 있습니다. 매우 정확한 설명을 원하기 때문에 매개 변수의 값을 아주 세밀하게 배열하여 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 배의 속도로 계산할 수 있다고 생각할 것입니다. 아니면 적어도 빠른?

+0

[큐] (http://docs.python.org/3.3/library/queue.html) 모듈 – kalhartt

+1

을 살펴보십시오. 고맙습니다. 확인했지만 [dispy] (http : //)도 있습니다. dispy.sourceforge.net) 내가 원하는대로 내 문제를 해결, 내 자신의 질문에 대답 생각했지만 그것은 적어도 나를 위해, 불가능한 것 같습니다. – PepeToro

+0

@ user58533 당신의 질문에 대답하기에 충분한 평판 포인트가 있다고 생각합니다. 나는 당신의 솔루션에 더 많은 세부 사항을 보는 것이 흥미로울 것이라고 생각한다. –

답변

1

multiprocessing을 사용하는 것이 가장 쉽고, 독립 루프 기능을 구현하고 result = Pool(8).map(solver, P1)을 실행하는 것이 가장 쉽다고 생각합니다. 여러 컴퓨터에서 확장하려면 Apache Spark을 권하고 싶습니다.

편집 : 당신이 방법 자체 내에서 방법을 음모를 꾸미고 호출 할 수 없습니다, 당신이 호출자에게 원시 번호를 반환해야하고 .map 통화가 완료되면 플로팅 마십시오.

관련 문제