2014-12-04 2 views
1

최근 sympy를 사용하여 파이썬으로 기호 계산을 수행하기 시작했습니다. 지금, 나는 내가 매우 simpe 초기 값 문제를 해결하기 위해 노력했다 미분 방정식 어제 함께 일하고 : 초기 조건Sympy가 ODE의 선형 시스템을 푸는 데 실패했습니다.

y1(0) = y2(0) = 1 

내가 쓴 파이썬 코드

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

은 다음과 같습니다

>>> 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)] 

그러나 해결책은 잘못되었습니다! 내가 실수 한거야? 아니면 심한 버그 야?

+0

해결책은 무엇이되어야합니까? 잘못 되었다면 https://github.com/sympy/sympy/issues/new에서 신고하십시오. – asmeurer

+0

고마워, 나는 그것을보고했다. 곧 수정판을 찾을 수 있기를 바랍니다. ODE를 해결하는 sympy 모듈은 적어도 현재 ODE 시스템과 관련하여 그다지 신뢰할만한 것이 아닙니다. – rgallego

답변

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) 
% 

을 코드의 첫 번째 부분을 복사하여 나중에 내가 파이썬을 실행

를 포맷 할 그것

% 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

파이썬 3.3.2를 사용한다는 것을 잊어 버렸습니다. 미안합니다. – rgallego

+0

코드가 python3에서 작동하고 python2에서 작동하지 않으면'sympy'의 버그입니다. 다행히도 OP를위한 문제는 아닙니다. 데비안 테스트에는 python3에 대한'sympy' 패키지가 없기 때문에 제가 사임해야합니다 – gboffi

+0

어쨌든, 저는 fedora 19 x64에서 파이썬 2.7.5와 sympy 0.7.3으로 코드를 테스트했으며 완벽하게 작동합니다. – rgallego

관련 문제