我试图以愚蠢的方式使用scipy.optimize.minimize:
fi = minim(fun = quadratic_function,x0 = fi,args =(alfa,Ks,Kf),method =' Nelder-Mead')。x
其中fi是要优化的参数。并且quadratic_function具有这样的性质,即在每次调用时,都应该构造一个scipy.sparse.csr_matrix。所以,除了其他错误,我得到了这个(抱歉混合西班牙语和英文名字):
文件" / Users / angel / Dropbox / Intercambio CIMAT / Solver / V2 / sistemas / explicito.py",第56行,在solver_explicito中 Matriz_Biot_strain = esfuerzos_biot(malla,factor,P,Q,R,N)
文件" / Users / angel / Dropbox / Intercambio CIMAT / Solver / V2 / sistemas / sigma_biot.py",第172行,在esfuerzos_biot sistema = csr_matrix((vals,(rows,cols)),shape =(4 * Nodes,4 * Nodes),dtype = np.float64)
File" /Users/angel/anaconda/lib/python2.7/site-packages/scipy/sparse/compressed.py" ;,第48行, init other = self。 class (coo_matrix(arg1,shape = shape))
File" /Users/angel/anaconda/lib/python2.7/site-packages/scipy/sparse/compressed.py" ;,第31行,在 init 中 arg1 = arg1.asformat(self.format)
File" /Users/angel/anaconda/lib/python2.7/site-packages/scipy/sparse/base.py" ;,第213行,在asformat中 return getattr(self,' to' + format)()
File" /Users/angel/anaconda/lib/python2.7/site-packages/scipy/sparse/coo.py" ;, line 362,in tocsr 数据)
TypeError:根据规则' safe'
,无法将数组数据从dtype(' O')转换为dtype(' bool')
我试图制作
fi = np.asarray(fi,dtype = np.float64)
但没有成功。
P.S。在可以评估quadratic_function(fi,alfa,Ks,Kf),这是一个标量值
编辑:
对于将来的引用,我能够通过在每次调用quadratic_function时将变量转换为float来解决问题,即通过执行以下操作:
fi = float(fi)
另一方面,为了问题的完整性: @hpaulj在这个特殊的问题中,节点= 151452,但它可以增长,因为我解决了FEM问题。而且因为它是一个有限元问题,所以矩阵非常稀疏。最后,我无法找到任何与最小化的消息相关的文档,然后调用scypy稀疏。