我用的东西像
x = Function('x',real=True)(t)
这给了 x(t) nonlinsolve 或 solveset ,因为它们不能替代这些函数)等等。
x(t)
nonlinsolve
solveset
然而,我想将我的结果导出到MATLAB。所以我需要 (t) 跑了。我可以填充一个 dict 具有 d = {x(t):x} ,但我认为有一种更优雅的方法可以实现所有功能,比如 y(t),z(t) ,...
(t)
dict
d = {x(t):x}
y(t),z(t)
我想要的结果是输入
expr = x(t)-y(t) output = x-y
其中,x和y可以是Symphy已知的“函数”,但不应存在 (t) 在输出中。我确实希望避免再次引入所有变量,而不依赖于时间!
这是一个循环 walks through the expression tree 并替换参数为 t 通过与该函数名称匹配的符号。替换是在表达式的另一个副本中进行的,以避免修改我们正在遍历的表达式。
t
示例:如果expr为 x(t) - y(t) ,则expr1为 x - y .
x(t) - y(t)
x - y
expr1 = expr for f in preorder_traversal(expr): if f.args == (t,): expr1 = expr1.subs(f, Symbol(str(f.func))) print(expr1)