你好!
问题:我可以计算任何给定的xp(t)值和xh(t)值,但不能计算ġ(t)值。
上下文:
我用Duhamel积分计算振动系统的通解。其结果是两个函数之和。
xg(t) = xp(t) + xh(t)
我还使用Jet的Datalore来快速评估结果。
Lib:
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 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个方程组成的系统,在这里我可以得到A和phi的值。
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)与我输入的t值无关,它总是给出相同的表达式。
欢迎任何帮助,,谢谢!
#Edit_01:将def d_xg(t)更改为当前状态。
发布于 2022-05-08 07:01:55
当您调用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)https://stackoverflow.com/questions/72152035
复制相似问题