最小化一个 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。
我有一个依赖于变量 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。