无法将 g(x) 计算为导数 (f(x))

Can't calculate g(x) as Derivative(f(x))

您好!

问题:我可以计算任何给定 t 值的 xp(t)xh(t),但不能计算 ġ(t).

上下文:

我正在使用 Duhamel 积分计算振动系统的通解。 结果是 2 个函数的总和。

xg(t) = xp(t) + xh(t)

我也在使用 Jet Brain 的 Datalore 来快速评估结果。

库:
import numpy as np
from numpy import pi, linspace
import sympy as smp
from sympy import sin, cos, tan, exp, symbols, Derivative, integrate, Integral, Function
from sympy.solvers.solveset import linsolve
import matplotlib.pyplot as plt
我的常数:
k = 100*10**3   #[N/m] - Rigidity
m = 10000       #[Kg] - Mass
c = 20*10**3    #[N.s/m] - Damping
f0 = 5000       #[N] - Initial force
x0 = -0.05      #[m] - Initial position
v0 = 0.2        #[m/s] - Initial velocity
主要变量:
wn = float(np.sqrt(k/m))   #[rad/s]
zeta = float(c/(2*m*wn))    
wd = wn*np.sqrt(1-zeta**2)
t0 = 2*pi/wn/2             #[s]
t1 = 5*2*pi/wn/2           #[s]
sloap = f0/t0

我能做什么:

我可以创建一个函数 xh(t),插入一个 t 值并获得有效结果(使用我的 ti-nspire cx CAS 来检查) :

A, phi = symbols('A phi', real=True)
t = symbols('t', real=True, positive=True)

def xh(t):
    return A * exp(-zeta*wn*t)*sin(wd*t+phi)

我可以为 xp(t) 做同样的事情:

x = symbols('x', real=True, positive=True)
xp_integral = (f0/t0) * x * exp(-zeta*wn*(t-x)) * sin(wd*(t-x))

def xp(t):
    return 1/(m*wd) * integrate(xp_integral, (x, 0, t)).simplify()

甚至 xg(t):

def xg(t):
    return xh(t) + xp(t)

麻烦从哪里开始:

现在我需要求解一个由 2 个方程组成的系统,我可以从中获得 Aphi 的值。

xg(t=0) = x0 ← 正常函数,对于t=0结果是初始位置[m].

ẋg(t=0) = v0 xg(t) 的导数,对于 t=0 结果是初始速度 [m/s].

但是我无法得到 xg(t) 的导数来产生任何值:

a, phi = symbols('a phi', real=True)

def d_xg(t):
    return Derivative(xg(t),t, evaluate=True)

无论我输入 d_xg(t)t 值,它总是给我相同的表达式。

欢迎任何帮助, 谢谢!

#Edit_01: 已将 def d_xg(t) 更改为当前状态。

当您调用 d_xg(t) 时,您正在计算 xg 关于 t 的符号导数。如果您多次调用 d_xg(t) ,您将始终获得相同的表达式,因为您一遍又一遍地进行相同的计算。同样,如果您调用 d_xg(A),您将计算 xg 关于 A.

的导数

计算 d_xg(t) 后,您想将 t=0 代入该表达式:

d_xg_at_t_0 = d_xg(t).subs(t, 0)