首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能用导数(f(X))计算g(x)

不能用导数(f(X))计算g(x)
EN

Stack Overflow用户
提问于 2022-05-07 11:27:09
回答 1查看 54关注 0票数 -1

你好!

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

上下文:

我用Duhamel积分计算振动系统的通解。其结果是两个函数之和。

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

我还使用Jet的Datalore来快速评估结果。

Lib:

代码语言:javascript
复制
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

我的常量:

代码语言:javascript
复制
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

主要变量:

代码语言:javascript
复制
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来检查):

代码语言:javascript
复制
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)做同样的事情

代码语言:javascript
复制
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)来说

代码语言:javascript
复制
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)的导数产生任何价值:

代码语言:javascript
复制
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)更改为当前状态。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-08 07:01:55

当您调用d_xg(t)时,您正在计算xg相对于t的符号导数。如果多次调用d_xg(t),则始终会得到相同的表达式,因为您一次又一次地执行相同的计算。类似地,如果您调用d_xg(A),您将计算xg相对于A的导数。

一旦计算了d_xg(t),就需要将t=0替换到该表达式中:

代码语言:javascript
复制
d_xg_at_t_0 = d_xg(t).subs(t, 0)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72152035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档