使用 Python 的 sympy 模块来表达一个复杂的函数

Using Python's sympy module to express a complicated function

如何使用 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

问题是你告诉它与 t 的积分变量积分,但函数 ((simulated - measured) / sigma_s ) **2 没有 t 作为变量。

不要使用 sympy.mpmath.nsum。 mpmath 函数仅用于数值计算。一定要象征性地表示和,使用 sympy.Sum。它是这样工作的

In [3]: Sum(f(x), (x, 0, n))
Out[3]:
  n
 ___
 ╲
  ╲   f(x)
  ╱
 ╱
 ‾‾‾
x = 0

其次,当一个变量依赖于另一个变量时,必须明确告知 SymPy。我不清楚你的等式中 sc 是什么。如果它们是变量,那么您应该创建符号 sc。重要的是,t 需要是一个变量,依赖于 t 的东西需要像

这样的函数
thetastar, t = symbols('thetastar t')
y_sc = Function('y')

然后使用

y_sc(thetastar, t)

(如果 sc 也应该是变量,那么您应该使用 y = Function('y')y(s, c, thetastar, t))。