【问题标题】:Trying to find a minimum of g(x) function and the x value at this minimum试图找到 g(x) 函数的最小值和该最小值处的 x 值
【发布时间】:2019-05-16 18:06:25
【问题描述】:

我试图找到一个创建函数 g(alpha) 的最小值,更重要的是,在这个最小值处找到 alpha 的值,或者关闭到最低限度。

我使用的代码如下:它创建函数f、向量Davecgrad并将它用于创建函数 g(alpha),我想找到其中的最小值,以及 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,请告诉我。

【问题讨论】:

  • 不就是g(oo)吗?

标签: python error-handling sympy minimum


【解决方案1】:

我认为你真的很困惑 sympy 做了什么。 sympy 是一个求解和打印解析方程的模块。您根本不需要使用该包来完成此任务。

您实际上确实在这里找到了g 的最小值。您将此结果存储在oo 中。

所以基本上,删除以alfa = ...slv = ... 开头的最后两行,然后只输入print(oo)oo 是您要查找的值,即最小化函数 g 的 alpha 值

【讨论】:

  • 我以为oo包含函数g(alpha)的最小值,而不是alpha本身,我错了吗?
  • 哦,现在我明白了,是的。谢谢你,你是对的。我只是把它复杂化了,没有必要..
猜你喜欢
  • 2016-09-30
  • 1970-01-01
  • 2017-08-01
  • 2013-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多