import sympy as sp
a,b = sp.symbols("a b", positive=True, real=True)
t = sp.symbols("t", real=True)
s = sp.symbols("s")
T = 1/(1+s*a)/(1+s*b)
y = sp.inverse_laplace_transform(T,s,t)
tmax = sp.solve(sp.diff(y,t),t)[0]
ymax = y.subs(t,tmax)
display(ymax.simplify())
该代码给出以下输出:
我如何强制Sympy简化此表达?分数和总和都可以轻松分解,以exp(log(x))的形式留下一个术语,可以将其简化为X.。
>>> from sympy import *
...your code...
>>> e=ymax.atoms(exp);e
[exp(-log((a/b)**(a*b))/(a**2 - a*b)), exp(-log((a/b)**(a*b))/(a*b - b**2))]
如果您向Sympy保证这些不是零(和真实),那么一切都可以很好:
>>> p,q = var('p q',nonzero=True) # nonzero=True implies real
>>> reps = {a**2-a*b:p,a*b-b**2:q}; _reps = {v:k for k,v in reps.items()}
>>> [i.subs(reps).simplify().subs(_reps) for i in e]
[(b/a)**(a*b/(a**2 - a*b)), (b/a)**(a*b/(a*b - b**2))]
您希望他们会发生什么?