如何使用python的sympy模块象征性地表达以下等式,这样我以后可以找到二阶导数并因此计算Hessian矩阵?
功能
我尝试过的事情:
import sympy
Nc,Ns,Tc,Ysc,theta,theta_star,t,dt,sigma_s,measured,simulated=sympy.symbols(' Nc Ns Tc Ysc theta theta_star t dt sigma_s measured simulated ')
chi=(1/2*Nc*Ns) * sympy.mpmath.nsum( 1 / Tc * sympy.integrate( ((simulated - measured) / sigma_s ) **2) , (t,0,Tc))
错误:
File "C:\Anaconda1\lib\site-packages\sympy\concrete\expr_with_limits.py", line 358, in __new__
"specify dummy variables for %s" % function)
ValueError: specify dummy variables for (-measured + simulated)**2/sigma_s**2
答案 0 :(得分:3)
问题在于你告诉它要与t的积分变量集成,但是函数((simulated - measured) / sigma_s ) **2
没有t作为变量。
答案 1 :(得分:2)
不要使用sympy.mpmath.nsum
。 mpmath函数仅用于数值计算。要象征性地表示一个总和,请使用sympy.Sum
。它像这样工作
In [3]: Sum(f(x), (x, 0, n))
Out[3]:
n
___
╲
╲ f(x)
╱
╱
‾‾‾
x = 0
其次,当一个变量依赖于另一个变量时,必须明确告知SymPy。我不清楚你的等式中s
和c
是什么。如果它们是变量,那么您应该创建符号s
和c
。重要的是,t
需要是一个变量,依赖t
的东西需要像
thetastar, t = symbols('thetastar t')
y_sc = Function('y')
然后使用
y_sc(thetastar, t)
(如果s
和c
也应该是变量,那么您应该使用y = Function('y')
和y(s, c, thetastar, t)
)。