python-3.x 用Symy法求函数的导数

vwkv1x7d  于 2023-03-13  发布在  Python
关注(0)|答案(1)|浏览(130)

我正在画一个函数的导数,虽然画实际的函数是可以的,但我不能画它的导数。

# Solve u function for t
eq = m*sp.diff(u, t, 2) + c*sp.diff(u, t) + k*u
u_sol = sp.dsolve(eq, u).subs({k: sol1[0][1], c: sol1[0][2]})

# Plot the graph of u(t) (assuming constants are 1)
# t needs to start from 0 

assumed_func1 = u_sol.rhs.subs({C1: 1, C2: 1})
plot(assumed_func1, xlim=(0, 10), ylim=(-5, 5), title="u(t)") # This works

assumed_func2 = sp.diff(u_sol, t).subs({C1: 1, C2: 1})
plot(assumed_func2, xlim=(0, 10), ylim=(-5, 5), title="u'(t)") # This does not work

试图画出一个函数的微分。但我得到了这个错误:

function.py", line 1339, in __new__
    raise ValueError(filldedent('''
ValueError:
Can't calculate derivative wrt -10.0000000000000.

我认为,当t取负值时会出现问题。我尝试使用

xlim=(0, 10)

但它没有改变。

goqiplq2

goqiplq21#

u_solEquality类型的对象,它具有左手侧和右手侧。
当您执行这段代码时,我假设您希望对u_sol的两端都应用派生函数,但遗憾的是,SymPy目前无法做到这一点:

assumed_func2 = sp.diff(u_sol, t).subs({"C1": 1, "C2": 1})

所以你得到了等式的导数,而sympy不知道怎么画。
您需要做的是仅区分u_sol的右侧:

assumed_func2 = sp.diff(u_sol.rhs, t).subs({"C1": 1, "C2": 1})

然后,plot命令应该起作用。

相关问题