我有一个简单的方程式,例如(f(t) * g(t))^a,其中a是参数,fg是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) = 1g(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


这个输出
python - 为什么Sympy会错误地替换值?-LMLPHP

根本不能替代这些值。我究竟做错了什么?

同样,这只是一个简单的数学示例,但是很好地说明了这个问题。

最佳答案

您可以执行以下操作:

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/

10-12 18:47