传递的`f0`具有1个以上的维度 -fmin_l_bfgs_b

问题描述

我想找到使函数最小化的参数,但出现错误。到目前为止,请使用scipy.optimize.fmin,但我想为每个参数添加界限。这是我的代码

def Kou_calibration_full():
    i=0
    global opt
    p0 = spo.brute(Kou_error_function,((0.10,0.31,0.1),(0.01,2.6,0.5),(0.1,0.92,0.2),(1.1,20,7),7)),finish=None)
    opt = spo.minimize(Kou_error_function,p0,bounds=((0.10,0.31),2.6),0.92),20),20)))
    return opt

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<timed eval> in <module>

<ipython-input-127-e458cef75641> in Kou_calibration_full()
      3     global opt
      4     p0 = spo.brute(Kou_error_function,finish=None)
----> 5     opt = spo.minimize(Kou_error_function,20)))
      6     return opt

~\anaconda3\lib\site-packages\scipy\optimize\_minimize.py in minimize(fun,x0,args,method,jac,hess,hessp,bounds,constraints,tol,callback,options)
    615                                   **options)
    616     elif meth == 'l-bfgs-b':
--> 617         return _minimize_lbfgsb(fun,618                                 callback=callback,**options)
    619     elif meth == 'tnc':

~\anaconda3\lib\site-packages\scipy\optimize\lbfgsb.py in _minimize_lbfgsb(fun,disp,maxcor,ftol,gtol,eps,maxfun,maxiter,iprint,maxls,finite_diff_rel_step,**unknown_options)
    304             iprint = disp
    305 
--> 306     sf = _prepare_scalar_function(fun,jac=jac,args=args,epsilon=eps,307                                   bounds=new_bounds,308                                   finite_diff_rel_step=finite_diff_rel_step)

~\anaconda3\lib\site-packages\scipy\optimize\optimize.py in _prepare_scalar_function(fun,epsilon,hess)
    259     # ScalarFunction caches. Reuse of fun(x) during grad
    260     # calculation reduces overall function evaluations.
--> 261     sf = ScalarFunction(fun,grad,262                         finite_diff_rel_step,epsilon=epsilon)
    263 

~\anaconda3\lib\site-packages\scipy\optimize\_differentiable_functions.py in __init__(self,fun,finite_diff_bounds,epsilon)
     93 
     94         self._update_grad_impl = update_grad
---> 95         self._update_grad()
     96 
     97         # Hessian Evaluation

~\anaconda3\lib\site-packages\scipy\optimize\_differentiable_functions.py in _update_grad(self)
    169     def _update_grad(self):
    170         if not self.g_updated:
--> 171             self._update_grad_impl()
    172             self.g_updated = True
    173 

~\anaconda3\lib\site-packages\scipy\optimize\_differentiable_functions.py in update_grad()
     89                 self._update_fun()
     90                 self.ngev += 1
---> 91                 self.g = approx_derivative(fun_wrapped,self.x,f0=self.f,92                                            **finite_diff_options)
     93 

~\anaconda3\lib\site-packages\scipy\optimize\_numdiff.py in approx_derivative(fun,rel_step,abs_step,f0,sparsity,as_linear_operator,kwargs)
    386         f0 = np.atleast_1d(f0)
    387         if f0.ndim > 1:
--> 388             raise ValueError("`f0` passed has more than 1 dimension.")
    389 
    390     if np.any((x0 < lb) | (x0 > ub)):

ValueError: `f0` passed has more than 1 dimension.

有人可以帮忙吗?我不知道该怎么办:(

(我的代码太多,所以我必须添加一些文本:abcdabcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd

解决方法

也许是由于您的Kou_error_function函数的返回矩阵的大小,请在函数返回的末尾示例中添加.ravel().flatten()。 喜欢:

def Kou_error_function(x,obs,arg):
    err = x*arg-obs
    return y.ravel()

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...