2016-09-08 7 views
1

pythonを使用して2.7.8。
私が扱っている微分方程式はx '= 2-3 * xです。それほど難しくない。正しい解は、y切片が2/3で減衰する指数関数です。エクササイズには3つの初期条件があります。また、同じプロット上に解を持つスロープ場を持たなければなりません。私は坂道を持っていますが、提供される解決策は間違っています。 x '= xのテストケースは、うまく働いたが、t> 0のときだけであった。しかし、odeintが提供するソリューションは間違っています。崩壊する指数関数の代わりに、私は三角関数のように見えます。ここにコードがあります。 Python odeintが明らかに間違った解決策を返す

#Solutions function 
def m_diff_sol(input_domain,input_initial_conditions_set): 
    f_set=[] 
    for n in input_initial_conditions_set: 
     m_sol=odeint(m_fst_diff_eq,n,input_domain) 
     f=[b for [a,b] in m_sol] 
     f_set.append(f) 
    return f_set 

#Vector field function 
def m_fst_diff_eq(x,t): 
    m,mdot=x 
    return [mdot,2-3*m] 

enter image description here

答えて

1

あなたはすなわち

def my_ode_func(x,t): 
    return 2.0 - 3.0*x 

、1つの出力を返すために、あなたのODE機能が欲しいそして、odeintは、初期状態からx=2/3に期待指数関数的減衰を提供します。

import numpy as np 
from scipy.integrate import odeint 
t = np.arange(0,10.0,0.01) 
x0 = 1 
out1 = odeint(my_ode_func,x0,t) 

Numerical solution to linear ODE

あなたの代わりに二次ODE x''(t) = 2 - 3*x(t)のようなものをモデル化しているように見えます。

def my_ode_func2(Y,t): 
    return [Y[1],2.0 - 3.0*Y[0]] 

Y0 = [1,1] 
out2 = odeint(my_ode_func2,Y0,t) 

Numerical solution to second order ODE

:これは、その後

Y'(t) = [Y[2](t), 2 - 3*Y[1](t)] 

コードは次のようになり、一次のODEのシステム Y(t) = [x(t),x'(t)]として書き込まれます

関連する問題