>

나는 sympy와 scipy로 일하고 있지만 결합 미분 방정식 시스템 (비선형, 1 차)을 푸는 방법을 찾거나 알 수 없습니다.

결합 미분 방정식을 풀 수있는 방법이 있습니까?

방정식은 다음과 같은 형식입니다 :

V11'(s) = -12*v12(s)**2
v22'(s) = 12*v12(s)**2
v12'(s) = 6*v11(s)*v12(s) - 6*v12(s)*v22(s) - 36*v12(s)

v11 (들), v22 (들), v12 (들)에 대한 초기 조건.


  • 답변 # 1

    scipy가있는 ODE의 수치 해법은 scipy.integrate.solve_ivp 를 참조하십시오. scipy.integrate.odeint  또는 scipy.integrate.ode.

    SciPy 요리 책에 몇 가지 예가 있습니다 ( "일반 미분 방정식"섹션으로 스크롤).

  • 답변 # 2

    SciPy 방법 외에도 odeint  그리고 ode  이미 언급 했으므로 이제 solve_ivp 가 있습니다.  더 새롭고 더 편리합니다. [v11, v22, v12] 를 인코딩하는 완전한 예  배열 v 로 :

    from scipy.integrate import solve_ivp
    def rhs(s, v): 
        return [-12*v[2]**2, 12*v[2]**2, 6*v[0]*v[2] - 6*v[2]*v[1] - 36*v[2]]
    res = solve_ivp(rhs, (0, 0.1), [2, 3, 4])
    
    
    이것은 (0, 0.1) 간격의 시스템을 해결합니다.  초기 값 [2, 3, 4] . 결과는 res.t 와 같은 독립 변수 (표기법에 있음)가 있습니다 :

    array([ 0.        ,  0.01410735,  0.03114023,  0.04650042,  0.06204205,
            0.07758368,  0.0931253 ,  0.1       ])
    
    
    이 값은 자동으로 선택되었습니다. 하나는 t_eval 를 제공 할 수 있습니다  원하는 지점에서 솔루션을 평가하려면 : 예 : t_eval=np.linspace(0, 0.1) .

    종속 변수 (우리가 찾고있는 함수)는 res.y 에 있습니다. :

    array([[ 2.        ,  0.54560138,  0.2400736 ,  0.20555144,  0.2006393 ,
             0.19995753,  0.1998629 ,  0.1998538 ],
           [ 3.        ,  4.45439862,  4.7599264 ,  4.79444856,  4.7993607 ,
             4.80004247,  4.8001371 ,  4.8001462 ],
           [ 4.        ,  1.89500744,  0.65818761,  0.24868116,  0.09268216,
             0.0345318 ,  0.01286543,  0.00830872]])
    
    
    Matplotlib를 사용하면이 솔루션은 plt.plot(res.t, res.y.T) 로 표시됩니다.  ( t_eval 를 제공하면 줄거리가 더 부드럽습니다.  언급 한대로)

    마지막으로, 시스템에 1보다 큰 차수의 방정식이 포함 된 경우 1 차 시스템으로 축소를 사용해야합니다.

관련 자료

  • 이전 unit testing - 스팍 - 시간 초과 후 테스트 통과
  • 다음 html - CSS 젖빛 유리가 잘못 배치되었습니다