如何使用Python(scipy/numpy?)求解单参数方程

如何使用Python(scipy/numpy?)求解单参数方程,python,numpy,scipy,equation,Python,Numpy,Scipy,Equation,我希望您能为我提供一些有用的提示,帮助我完成以下任务: 我编写了一些简单的python代码片段来绘制概率密度函数。在我的特殊情况下,让它们表示某个参数x的类条件概率 因此,我想知道Python中是否有一种聪明的方法(即模块)(可能通过NumPy或SciPy函数或方法)来解决参数x的简单方程。 例如: pdf(x,mu=10,sigma=3**0.5)/pdf(x,mu=20,sigma=2**0.5)=1 #获取x 现在,我唯一能做的就是使用蛮力的方法 x=np.arange(0,50,0.00

我希望您能为我提供一些有用的提示,帮助我完成以下任务:

我编写了一些简单的python代码片段来绘制概率密度函数。在我的特殊情况下,让它们表示某个参数
x
的类条件概率

因此,我想知道Python中是否有一种聪明的方法(即模块)(可能通过NumPy或SciPy函数或方法)来解决参数
x
的简单方程。 例如:

pdf(x,mu=10,sigma=3**0.5)/pdf(x,mu=20,sigma=2**0.5)=1

#获取x

现在,我唯一能做的就是使用蛮力的方法
x=np.arange(0,50,0.000001)
并将x值保留在生成最接近值的向量中 计算比率时1的值
pdf1/pdf2。

下面是我用来计算pdf和绘制比率的代码:

def pdf(x, mu=0, sigma=1):
    """Calculates the normal distribution's probability density 
        function (PDF).  

    """
    term1 = 1.0 / ( math.sqrt(2*np.pi) * sigma )
    term2 = np.exp( -0.5 * ( (x-mu)/sigma )**2 )
    return term1 * term2


x = np.arange(0, 100, 0.05)

pdf1 = pdf(x, mu=10, sigma=3**0.5)
pdf2 = pdf(x, mu=20, sigma=2**0.5)

# ...
# ratio = pdf1 / pdf2
# plt.plot(x, ratio)

谢谢

因为你有一个很好的闭式方程,你可以用辛解

我插入了
mu
sigma
的值,并将其输入:


结果:15.4554936768195通常,听起来您需要标量根查找函数:


但正如其他人所指出的,似乎有一个解析解。

听起来你更需要一本关于数值方法的书,而不是Python编程建议。这里有一个技巧——将方程改写成类似于
[pdf(x…)/pdf(x…)]-1=0
的形式,然后通过最小化或寻根来解决。我认为如果你把方程写在一张纸上,你可以相当直接地解决这个问题,而无需使用数值方法。当然,但我想将其实现到Python代码中,因为我想用附带的图表直接绘制这些点。@Talonmes听起来不错!因此,对于最小化来说,
scipy.optimize.minimize()?编辑:刚刚找到另一个可能更适合这个问题的方法:
scipy.optimize.minimize\u scalar()
你说得对,这里的解析解更合适。然而,我很高兴知道这些替代方案,比如不同任务的最小化。我将两者都做,并比较结果。谢谢
 solve(1.0 / ( sqrt(2*pi) *(3**0.5) ) * exp( -0.5 * ( (x-10)/(3**0.5) )**2 ) /  (1.0 / ( sqrt(2*pi) *(2**0.5) ) * exp( -0.5 * ( (x-20)/(2**0.5) )**2 ))-1,x)