2013-03-06 2 views
0

full_output을 활성화하는 것은 쉬운 일이 아니지만 일반적으로 문제는 다소 복잡합니다. 불행히도 내 코드를 보여주는 것 외에 다른 문제를 쉽게 설명 할 수있는 방법이 없습니다.ODEINT에서 full_output을 활성화하는 데 문제가 있음

Traceback (most recent call last): 
th1 = [ylist[j][0] for j in range(0,len(t))] 
KeyError: 0 

나는이 가정 :

y_initial = pylab.array([th1,th2,th3,phi1,phi2,phi3]) 
t = pylab.arange(0.0, tmax, dt) 
ylist = odeint (derivs, y_initial, t) 

th1 = [ylist[j][0] for j in range(0,len(t))] 
th2 = [ylist[j][1] for j in range(0,len(t))] 
th3 = [ylist[j][2] for j in range(0,len(t))] 
phi1 = [ylist[j][3] for j in range(0,len(t))] 
phi2 = [ylist[j][4] for j in range(0,len(t))] 
phi3 = [ylist[j][5] for j in range(0,len(t))] 

odeint 쓰기 (derivs을 y_initial, t는, full_output는 = 0)에는 문제가 있지만 쓰기 odeint이 (derivs는 y_initial, t는, full_output 1 =) 제공하지 않습니다 원인 오류는 odeint (배열 등)를 정의한 방식 때문에 발생합니다. odeint 값을 계산하고 배열에 저장하기 위해 루프를 작성한 다음이 행을 다음 행으로 진행 시키려면이 문제가 해결됩니까? 그렇다면 어떤 코드가 생겼을까요? 당신은 내가 그런 이상한 방법으로 그것을 작성한 whay 이해하지 않는 경우

여기에 이유 :

def dth2dt (t,th1,th2,th3,phi1,phi2,phi3): 
    return *some math dependent on switching the six variables around* 

def dphi2dt (t,th1,th2,th3,phi1,phi2,phi3): 
    return **some math dependent on switching the six variables around** 

def derivs(y,t): 

    dydt[0] = dth2dt(t,y[2],y[1],y[0],y[5],y[4],y[3]) 
    dydt[3] = dphi2dt(t,y[2],y[1],y[0],y[5],y[4],y[3]) 

    dydt[1] = dth2dt(t,y[0],y[1],y[2],y[3],y[4],y[5]) 
    dydt[4] = dphi2dt(t,y[0],y[1],y[2],y[3],y[4],y[5]) 

    dydt[2] = dth2dt(t,y[1],y[2],y[0],y[4],y[5],y[3]) 
    dydt[5] = dphi2dt(t,y[1],y[2],y[0],y[4],y[5],y[3]) 

    return dydt 

나는이 방법이 필요없이 주변 변수를 전환 할 날 수 있음에 분명하다 희망 반복적으로 수학을 써라. 하지만 이제는 odeint에서 full_output을 활성화 할 수 없습니다.

감사합니다. 답변 해 주셔서 감사합니다.

답변

1

odeint의 출력 full_output이 참 또는 거짓인지의 여부에 따라 상이하다. full_output을 사용할 수 없으면 동작에 익숙합니다. 이 옵션을 활성화하면 출력은 튜플 (u, d)입니다. 여기서 u는 미분 방정식의 해이며 d는 full_output에서 제공하는 출력 사전입니다. keylister는 ylist로 참조하고있는 것은이 튜플이 아니라 예상했던 결과와도 관련이 있기 때문에 발생합니다. 당신이

ylist = odeint (derivs, y_initial, t) 

(ylist, d) = odeint (derivs, y_initial, t, full_output=True) 

로 변경하는 경우 당신은 당신이 기대하는 ylist을 얻어야한다.

관련 문제