最小化一个 sympy 表达式

Minimize a sympy expression

我有一个依赖于变量 x 的 sympy 表达式,我想找到使表达式最小化的值 x。到目前为止,这是我的代码:

import numpy as np
from sympy import *
from scipy.optimize import minimize as scipy_min

x = Symbol('x')
p = Symbol('p')
 
f = exp(-(x-p)**2/2)/sqrt(2*pi)

func = lambdify([x,p], f)
def func_np(x):
    return func(x,2.2)

res = scipy_min(func_np, x, method='Nelder-Mead', tol=1e-6)

但是我收到错误:can't convert expression to float。有人可以帮我弄这个吗?谢谢!

minimize中的第二个参数是一个初始猜测,一个数字,而不是一个变量。您正在尝试传递 sympy.Symbol,这绝对不是数字。最小化 lambdified 函数是可以的,但是,请注意 lambdify(相对)慢,因此最好 print(expression) 并手动创建 def

import numpy as np
from sympy import *
from scipy.optimize import minimize as scipy_min

x = Symbol('x')
p = Symbol('p')
 
f = exp(-(x-p)**2/2)/sqrt(2*pi)

func = lambdify([x,p], f)
def func_np(x):
    return func(x,2.2)

res = scipy_min(func_np, 1.0, method='Nelder-Mead', tol=1e-6)
print(res.x)

产量 -37.3。但是,这不是解决方案,因为当 x 趋向 ±∞ 时,此特定函数趋向于 0。