我有一个简单的方程式,例如(f(t) * g(t))^a
,其中a
是参数,f
和g
是t的函数。我要复制的方法是
对于t
区分表达式,该表达式应为带有f(t), g(t), f'(t)
和'g'(t)的表达式。在上面的简单示例中,结果应为
a * (f(t) * g(t))**(a - 1) * (f'(t) * g(t) + f(t) * g'(t))
现在,我们使用一些有关此特定问题(经济学上的问题)的知识,其中仅在一个特定的稳态值下,我们知道
f(t)
和g(t)
的值。假设它们是f(tss) = 1
和g(tss) = 100
,其中tss
是稳态值,我将其任意设置为tss = 7
。这些不是f和g的一般功能形式。一旦我们替换了这些值,便有了一个带有两个未知数的方程:
f'(tss)
和g'(tss)
的值。在这一点上,它们是否是导数并不重要。它们只是未知数,与其他方程式结合使用时,可以得到一个非线性系统,可以使用scipy.optimize.fsolve
或sympy的求解器之一进行求解。问题是,我陷入了步骤1和2。下面的代码似乎不能正确替换值。
from sympy import *
t = symbols('t')
a = symbols('a')
f, g = symbols('f g', cls=Function)
eq = (f(t) * g(t))**a
eq_diff = eq.diff(t)
output = eq_diff.evalf(subs={f:1, g:100, a:0.5})
output
这个输出
根本不能替代这些值。我究竟做错了什么?
同样,这只是一个简单的数学示例,但是很好地说明了这个问题。
最佳答案
您可以执行以下操作:
fd, gd = symbols('f_d, g_d') #values of steady-state derivatives
output.subs({f(t).diff(t):fd, g(t).diff(t):gd, f(t):1, g(t):100, a:Rational(1,2)})
5*f_d + g_d/20
关于python - 为什么Sympy会错误地替换值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40623654/