使用Python的sympy模块来表达复杂的功能

时间:2016-02-08 13:35:50

标签: python sympy

如何使用python的sympy模块象征性地表达以下等式,这样我以后可以找到二阶导数并因此计算Hessian矩阵?

功能

enter image description here

我尝试过的事情:

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

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