2014-12-04 108 views
1

我最近開始使用sympy與python進行符號計算。現在,我與常微分方程和昨天我試圖解決的非常simpe初值問題的工作:Sympy無法解決ODE的線性系統

y1' = y1 + 2 y2, 
    y2' = -2 y1 + y2 + 2 exp(t), 

與初始條件

y1(0) = y2(0) = 1 

我寫的Python代碼如下:

>>> import sympy as sy  
>>> t=sy.symbols('t') 
>>> y1=sy.Function('y1') 
>>> y2=sy.Function('y2') 
>>> eqs=(sy.Eq(y1(t).diff(t),y1(t)+2*y2(t)), sy.Eq(y2(t).diff(t),-2*y1(t)+y2(t)+2*sy.exp(t))) 
>>> s=sy.dsolve(eqs)  # General solution 
>>> s 
[y1(t) == 2*(C1*sin(2*t) + C2*cos(2*t))*exp(t), 
y2(t) == (2*C1*cos(2*t) - 2*C2*sin(2*t))*exp(t)] 
>>> y1g=s[0].args[1] 
>>> y2g=s[1].args[1] 
>>> # Find C1 and C2 so that the initial condition is satisfied 
>>> sol=sy.solve([y1g.subs(t,0)-1,y2g.subs(t,0)-1]) 
>>> sol 
{C1: 1/2, C2: 1/2} 
>>> y1=y1g.subs(sol) 
>>> y2=y2g.subs(sol) 
>>> [y1,y2] 
[2*(sin(2*t)/2 + cos(2*t)/2)*exp(t), (-sin(2*t) + cos(2*t))*exp(t)] 

但是解決方案是錯誤的!我犯了一個錯誤還是這是一個sympy錯誤?

+0

解決方案應該是什麼?如果不對,請通過https://github.com/sympy/sympy/issues/new報告。 – asmeurer 2014-12-04 22:37:30

+0

謝謝,我已經報道了。我希望很快就能找到解決辦法。看來求解ODE的sympy模塊目前不是很可靠,至少在ODE系統中是這樣。 – rgallego 2014-12-06 21:22:51

回答

0

免責聲明:這不是一個答案,但應清楚地格式化

評論需要厲害,我複製你的代碼的第一部分在文件

% cat sy.py 
import sympy as sy  
t=sy.symbols('t') 
y1=sy.Function('y1') 
y2=sy.Function('y2') 
eqs=(sy.Eq(y1(t).diff(t),y1(t)+2*y2(t)), sy.Eq(y2(t).diff(t),-2*y1(t)+y2(t)+2*sy.exp(t))) 
s=sy.dsolve(eqs) 
% 

,後來我上運行python它

% python2.7 sy.py 
Traceback (most recent call last): 
    File "sy.py", line 6, in <module> 
    s=sy.dsolve(eqs) 
    File "/usr/lib/python2.7/dist-packages/sympy/solvers/ode.py", line 525, in dsolve 
    x0=x0, n=n, **kwargs) 
    File "/usr/lib/python2.7/dist-packages/sympy/solvers/deutils.py", line 174, in _desolve 
    eq, func = _preprocess(eq, func) 
    File "/usr/lib/python2.7/dist-packages/sympy/solvers/deutils.py", line 72, in _preprocess 
    derivs = expr.atoms(Derivative) 
AttributeError: 'tuple' object has no attribute 'atoms' 
% 

你說你得到什麼和我得到什麼之間有差異。也許這是我的錯。

+0

我忘了說我使用python 3.3.2,對不起。 – rgallego 2014-12-04 11:16:58

+0

如果代碼在python3中工作,並且在python2中不起作用,那麼這是一個'sympy'的bug。幸運的是,這對OP來說不是問題。由於Debian測試沒有針對python3的'sympy'軟件包,我不得不辭去 – gboffi 2014-12-04 11:29:05

+0

無論如何,我剛剛在python 2.7.5和sympy 0.7.3下測試了代碼,它在fedora 19 x64下運行並且工作完美無缺 – rgallego 2014-12-04 13:02:11