我有一个简单的等式(f(t) * g(t))^a
,其中a
是参数,f
和g
是t的函数。我试图复制的方法是
将表达式与t
区分开来,f(t), g(t), f'(t)
应该是a * (f(t) * g(t))**(a - 1) * (f'(t) * g(t) + f(t) * g'(t))
和“g”(t)的表达式。在上面的简单示例中,结果应为
f(t)
现在,我们使用了一些关于这个特定问题的知识(经济学中的一个问题),其中仅在一个特定的稳态值,我们知道g(t)
的值和f(tss) = 1
。假设它们是g(tss) = 100
和tss
,其中tss = 7
是稳态值,我将f'(tss)
任意设置为g'(tss)
。这些不是f和g的一般功能形式。
一旦我们用这些值替换,我们就会得到一个包含两个未知数的等式:scipy.optimize.fsolve
和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
的值。在这一点上,它们是否是衍生物并不重要;它们只是未知数,我还有其他方程式,当与这个方程结合时,给我一个非线性系统,我可以使用{{1}}或者一个情绪解算器来解决。
问题是,我坚持第1步和第2步。下面的代码似乎没有正确地替换这些值。
{{1}}
根本不替换这些值。我做错了什么?
同样,这只是一个微不足道的数学例子,但它很好地证明了这个问题。
答案 0 :(得分:1)
sympy 1.0 docs显示了多个替换的元组列表:
output = eq_diff.subs([(f, 1), (g, 100), (a, 0.5)])
对我而言,它取代了符号变量 a
为什么期望更换 f,g 函数名称?
答案 1 :(得分:1)
你可以这样做:
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
答案 2 :(得分:0)
仅设置函数名称f
不会替换它。您需要完整的表达式,例如{f(t): 1}
或{f(t).diff(t): 1}
(请注意,前者会将导数替换为0)。