2014-12-03 99 views
1

如何在python dC/dt = r + kI - dC中实现这种方程式,其中左侧是常量而右侧是变量?使用Sympy在Python中的差异化

我相对较新的python,因此不能做太多。 from sympy.solvers import ode

r=float(input("enter r:"))

k=float(input("enter k:"))

I=float(input("enter I:"))

d=float(input("enter d:"))

C=float(input("enter C:"))

dC/dt=x

x=r + kI-dC

print(x)

它只是做等同于x的值,而不是任何不同,想帮助得到这个工作。

如果可能我想获得指定使用sympy, 的答案,但所有的答案都是真正的赞赏。

+1

你看到[这](http://docs.sympy.org/dev/modules/mpmath/微积分/ differentiation.html) – 2014-12-03 13:36:51

+0

嗯,我有,谢谢你,但我真的没有得到它,这就是为什么我把这个方程在问题中,所以如果我能够得到答案,我可以检查它,知道它是如何完成的。 – 2014-12-03 14:45:50

+0

@KennethIwuchukwu看来你可以从Sympy教程中获利(http://docs.sympy.org/latest/tutorial/index.html)。稍后,您应该特别研究[本节](http://docs.sympy.org/latest/tutorial/solvers.html#solving-differential-equations)。 – gboffi 2014-12-04 16:11:20

回答

1

您将值赋给x的rhs上的所有变量,因此当您显示x时,您会看到它对您定义的变量所执行的值。而不是输入数值,为什么不尝试用象征性的方法解决问题?

>>> from sympy import * 
>>> var('r k I d C t') 
(r, k, I, d, C, t) 
>>> eq = Eq(C(t).diff(t), r + k*I + d*C(t)) # note d*C(t) not d*C 
>>> ans = dsolve(eq); ans 
C(t) == (-I*k - r + exp(d*(C1 + t)))/d 

现在你可以在值替代变量看到的结果:

>>> ans.subs({k: 0}) 
C(t) == (-r + exp(d*(C1 + t)))/d 
+0

感谢您的输入,但我试着运行的代码,它回来了这个错误“NameError:名称'C1'没有定义”那是我之前和之后我更换变量我替换变量也是必要的因素上的C (t)的右侧 - 它是一个变量。如果我替换最后的方程C(t)= ...中的变量,它会返回“处理完成退出代码0”,谢谢 – 2014-12-04 11:42:28

+0

如果我通过这种方式而不是方程式,dr/dt = r + kI - dp'谢谢 – 2014-12-04 12:32:38

+0

没有必要让rhs上的C成为t的函数;但是你应该使用不同的符号,因为左边的C必须是t的函数,否则dC/dt是0.对于另一个方程,方法是相同的:eq = Eq(r(t).diff(t ),r0 + k * I + d * p。请注意,您对lhs和rhs的r有相同的问题:您是指右边的常数(如r0),还是您的意思是r(t)? – smichr 2014-12-05 05:59:46