Python ode first order,如何使用 Sympy 解决这个问题
Python ode first order, how to solve this using Sympy
当我尝试使用 Sympy 解决第一首颂歌时,如下所示:
import sympy
y = sympy.Function('y')
t = sympy.Symbol('t')
ode = sympy.Eq(y(t).diff(t),(1/y(t))*sympy.sin(t))
sol = sympy.dsolve(ode,y(t))
csol=sol.subs([(t,0),(y(0),-4)]) # the I.C. is y(0) = 1
ode_sol= sol.subs([(csol.rhs,csol.lhs)])
print(sympy.pprint(ode_sol))
它给我这个错误:
Traceback (most recent call last):
File "C:/Users/Mohammed Alotaibi/AppData/Local/Programs/Python/Python35/ODE2.py", line 26, in <module>
csol=sol.subs([(t,0),(y(0),-4)]) # the I.C. is y(0) = 1
AttributeError: 'list' object has no attribute 'subs'
你的问题是这个 ODE 没有唯一解。因此它 returns 一个解决方案列表,您可以从错误消息和打印 sol
.
中找到它
在循环中进行评估,
for psol in sol:
csol = psol.subs([(t,0),(y(0),-4)]);
ode_sol = psol.subs([(csol.rhs,csol.lhs)]);
print(sympy.pprint(ode_sol))
找到下一个错误,替换不能解决常数问题。有效的是定义 C1=sympy.Symbol("C1")
并使用
ode_sol= psol.subs([(C1, sympy.solve(csol)[0])]);
但这仍然让人觉得很老套。或者更好地避免第二种情况无法解决的错误消息:
C1=sympy.Symbol("C1");
for psol in sol:
csol = psol.subs([(t,0),(y(0),-4)]);
for cc1 in sympy.solve(csol):
ode_sol= psol.subs([(C1, cc1)]);
print(sympy.pprint(ode_sol))
当我尝试使用 Sympy 解决第一首颂歌时,如下所示:
import sympy
y = sympy.Function('y')
t = sympy.Symbol('t')
ode = sympy.Eq(y(t).diff(t),(1/y(t))*sympy.sin(t))
sol = sympy.dsolve(ode,y(t))
csol=sol.subs([(t,0),(y(0),-4)]) # the I.C. is y(0) = 1
ode_sol= sol.subs([(csol.rhs,csol.lhs)])
print(sympy.pprint(ode_sol))
它给我这个错误:
Traceback (most recent call last):
File "C:/Users/Mohammed Alotaibi/AppData/Local/Programs/Python/Python35/ODE2.py", line 26, in <module>
csol=sol.subs([(t,0),(y(0),-4)]) # the I.C. is y(0) = 1
AttributeError: 'list' object has no attribute 'subs'
你的问题是这个 ODE 没有唯一解。因此它 returns 一个解决方案列表,您可以从错误消息和打印 sol
.
在循环中进行评估,
for psol in sol:
csol = psol.subs([(t,0),(y(0),-4)]);
ode_sol = psol.subs([(csol.rhs,csol.lhs)]);
print(sympy.pprint(ode_sol))
找到下一个错误,替换不能解决常数问题。有效的是定义 C1=sympy.Symbol("C1")
并使用
ode_sol= psol.subs([(C1, sympy.solve(csol)[0])]);
但这仍然让人觉得很老套。或者更好地避免第二种情况无法解决的错误消息:
C1=sympy.Symbol("C1");
for psol in sol:
csol = psol.subs([(t,0),(y(0),-4)]);
for cc1 in sympy.solve(csol):
ode_sol= psol.subs([(C1, cc1)]);
print(sympy.pprint(ode_sol))