2014-12-03 61 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