【发布时间】:2016-08-09 10:21:39
【问题描述】:
我一直在为一个数学项目探索 scipy 和 scipy 的核心包。
我需要对一些方程进行微积分运算......所以为了学习 scipy,我决定测试一个简单的方程 (PDF of a normal random variable)。我需要在微积分运算期间保持常量不变......而不是为其赋值。
我能够使用 sympy 成功创建它。代码如下:
from sympy import *
x = Symbol('x')
mu = Symbol('mu')
sigma = Symbol('sigma')
def normpdfeqn():
y = exp(-(((x-mu)**2)) / (2*(sigma**2))) / (sqrt(2*pi*(sigma**2)))
return y
print(integrate(normpdfeqn(), (x)))
并得到正确的输出:
sigma*erf(sqrt(2)*(-mu + x)/(2*sigma))/(2*sqrt(sigma**2))
然后我尝试对 scipy 做同样的事情。
我一直在阅读http://docs.scipy.org/doc/scipy/reference/tutorial/integrate.html,但不知道如何为其创建方程式。这是我到目前为止尝试过的(与上面的代码几乎相同):
from sympy import exp
from sympy import sqrt
from sympy import pi
from scipy.integrate import quad
from sympy import Symbol
x = Symbol('x')
mu = Symbol('mu')
sigma = Symbol('sigma')
def integrand():
y = exp(-((x-mu)**2) / (2*(sigma**2))) / (sqrt(2*pi*(sigma**2)))
return y
I = quad(integrand(), 0, 1,)
print(I)
代码可能远未完成,我不知道如何让它工作。
如果我总是使用上面显示的方程式,我应该费心学习 scipy 积分吗?还是继续使用 sympy 和 numpy?
【问题讨论】:
-
如果你想做symbolic操作你应该使用sympy。 Scipy 进行数值操作。
-
@BrenBarn 所以,我使用 sympy 创建我的方程,然后使用lambdify(或者它是一些其他函数,不记得)他们使用带有 numpy 或 scipy 的 eqn ......这个工作流程是好吗?
-
非常有趣。大多数人将这两种努力分开,因为它们的方程式不会经常改变。但是你打算有一个分析输入,然后代码首先进行分析分析(没有监督),然后计算数值结果?这可能是雄心勃勃的。我喜欢它。
-
@roadrunner66 我正在和我的数学教授合作一个项目,该项目通过改变一些因素来研究信号的变化。这就是为什么我的方程式会经常变化的原因。
-
@vicky96:我认为你可以这样做,是的。
标签: python python-2.7 python-3.x scipy sympy