使用 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。我不清楚你的等式中 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)
)。
如何使用 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。我不清楚你的等式中 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)
)。