试图找到 g(x) 函数的最小值和该最小值处的 x 值
Trying to find a minimum of g(x) function and the x value at this minimum
我试图找到创建的函数的最小值 g(alpha) 更重要的是,找到 alpha[=33 的值=] 在这个最小值,或接近最小值。
我使用的代码如下:它创建函数 f、向量 D、avec 和 grad 并将其用于创建函数 g(alpha),我想找到的最小值,连同 阿尔法值。
问题是,在从 sympy 库应用 solve 后,我没有得到 alpha 的数值。而不是我收到以下错误:
TypeError: Cannot cast array data from dtype('O') to dtype('float64') according to the rule 'safe'
代码:
import numpy as np
from scipy.optimize import fmin
from sympy import Symbol, solve
from scipy import interpolate
Emax = 10
bins = 200
x = np.linspace(1, Emax, num = Emax, dtype=np.int) #create grid of indexes
y = np.linspace(1, bins, num = bins, dtype=np.int)
z = np.random.rand(bins, Emax) # random matrix
f = interpolate.interp2d(x,y,z, kind='cubic') # make the matrix continious
D= np.zeros(bins)
D = 2*f(1.5, y) # create vector
avec = np.array([4.0, 16.0])
grad = np.array([1e-5,1e-5])
g= lambda alpha: np.sum(np.square(np.subtract(D, (avec[0]-alpha*grad[0])*f((avec[1]-
alpha*grad[1]),y))))
oo= fmin(g,(0.0))
alfa = Symbol("alfa")
slv= solve((np.sum(np.square(np.subtract(D, (avec[0]-alfa*grad[0])*f((avec[1]-
alfa*grad[1]),y)))) - oo), alfa)
我知道这个解决方案可能不是这个问题的最佳解决方案。我是 Python 的新手,如果您对如何在此处找到 alpha 有更好的建议,请告诉我。
我认为您真的混淆了 sympy
的作用。 sympy
是一个求解和打印解析方程的模块。您根本不需要为此任务使用该包。
您确实在这里找到了 g
的最小值。您将此结果存储在 oo
中。
所以基本上,删除从 alfa = ...
和 slv = ...
开始的最后两行,然后只输入 print(oo)
。 oo
就是你要找的值,alpha的值使函数g
最小化
我试图找到创建的函数的最小值 g(alpha) 更重要的是,找到 alpha[=33 的值=] 在这个最小值,或接近最小值。
我使用的代码如下:它创建函数 f、向量 D、avec 和 grad 并将其用于创建函数 g(alpha),我想找到的最小值,连同 阿尔法值。
问题是,在从 sympy 库应用 solve 后,我没有得到 alpha 的数值。而不是我收到以下错误:
TypeError: Cannot cast array data from dtype('O') to dtype('float64') according to the rule 'safe'
代码:
import numpy as np
from scipy.optimize import fmin
from sympy import Symbol, solve
from scipy import interpolate
Emax = 10
bins = 200
x = np.linspace(1, Emax, num = Emax, dtype=np.int) #create grid of indexes
y = np.linspace(1, bins, num = bins, dtype=np.int)
z = np.random.rand(bins, Emax) # random matrix
f = interpolate.interp2d(x,y,z, kind='cubic') # make the matrix continious
D= np.zeros(bins)
D = 2*f(1.5, y) # create vector
avec = np.array([4.0, 16.0])
grad = np.array([1e-5,1e-5])
g= lambda alpha: np.sum(np.square(np.subtract(D, (avec[0]-alpha*grad[0])*f((avec[1]-
alpha*grad[1]),y))))
oo= fmin(g,(0.0))
alfa = Symbol("alfa")
slv= solve((np.sum(np.square(np.subtract(D, (avec[0]-alfa*grad[0])*f((avec[1]-
alfa*grad[1]),y)))) - oo), alfa)
我知道这个解决方案可能不是这个问题的最佳解决方案。我是 Python 的新手,如果您对如何在此处找到 alpha 有更好的建议,请告诉我。
我认为您真的混淆了 sympy
的作用。 sympy
是一个求解和打印解析方程的模块。您根本不需要为此任务使用该包。
您确实在这里找到了 g
的最小值。您将此结果存储在 oo
中。
所以基本上,删除从 alfa = ...
和 slv = ...
开始的最后两行,然后只输入 print(oo)
。 oo
就是你要找的值,alpha的值使函数g