我写了一段代码,我需要一些关于实现optimization方法的帮助,也许是用scipy。 如果您可以注意到下面我有一个变量“pD”,我需要改变它,以便找到“abs(mFmin[I][j]-mReg[I][j])>;1”的结果。mFmin,mReg和所有其他计算都依赖于“pD”
我写了一个很差的代码,只是为了测试,为了改变mFmin和mReg的“pD”,但是它太慢了,不管我是否提出错误,这些小代码很糟糕。在
我正在scipy库中搜索一些optimization代码,但我看不出在哪里可以用我的代码来实现这一点。我认为解决问题很简单,但我没有人可以交换意见。。。在
注:pD是一个矩阵
下面,我附上了代码的主要部分:
for i in range(0,int(x)):
for j in range(0,n):
curso[i] = i*passo
curso[0] = 0
pD[i][j] = pZref
mFmin[i][j] = 0
mReg[i][j] = gref
# my doubt starts here
while abs(mFmin[i][j] - mReg[i][j]) > 1:
if mFmin[i][j] < mReg[i][j]:
pD[i][j] = pD[i][j] + 0.0001
else:
pD[i][j] = pD[i][j] - 0.0001
pZaux[i][j] = pE_*sqrt((pow(pZref/pE_,2)-pow(pA/pE_,2))*pow(mFmin[i][j]/gref,2)+pow(pA/pE_,2))
vD[i][j] = pE_*vE_/pD[i][j]
if pD[i][j]/pE_ > RPcr:
psiR[i][j] = sqrt(pow(pD[i][j]/pE_,2/kappa)-pow(pD[i][j]/pE_,(kappa+1)/kappa))
else:
psiR[i][j] = psicrR
if pZaux[i][j]/pD[i][j] > RPcr:
psiF[i][j] = sqrt((2*kappa/(kappa-1))*(pow(pZaux[i][j]/pD[i][j],2/kappa)-pow(pZaux[i][j]/pD[i][j],(kappa+1)/kappa)))
else:
psiF[i][j] = psicrF
mFmin[i][j] = 3600*psiF[i][j]*kmin*(fmin[j]/1000000)*sqrt(pD[i][j]*100000/vD[i][j])
mReg[i][j] = 3600*psiR[i][j]*alpha*(fV[i][j]/1000000)*sqrt(2*kappa/(kappa-1)*(pE_*100000/vE_))
谢谢你的阅读!在
MRM公司
您可以看看优化包:http://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html
作为一个简单的例子,假设您正在寻找(x-3)**2的最小值。定义一个函数,该函数获取输入并返回函数值。您传递这个函数来最小化,以及一个初始猜测x0。在
这将按预期返回3.0。可以将fn定义为有一个输入向量x,然后将x0指定为一个向量,即初始点的维数与fn期望的相同。在
在本例中,“nelder-mead”方法是一个简单的算法,可能运行时间较长。如果你知道广度函数或你的函数要最小化,你可以使用更高级的算法,例如BFGS,并传递梯度函数,如doc中所述。在
我建议导入numpy:
因为它看起来不是来自于你的模块,而是来自于你的模块。这可能是错误的原因。见TypeError: only length-1 arrays can be converted to Python scalars while trying to exponentially fit data
还有一些建议:
psiR[0:,0:]==psiR[:,:]==psiR
pZref
是标量,则使用x0 = np.ones(n) * pZref
创建{Andrey Sobolev建议使用numpy,因为if-pD是一个numpy数组,您将以}的形式访问它的元素,这样更快、更简单。在
pD[i,j]
而不是{如果我做对了,每个[I,j]优化都是独立于数组中其他值的,对吧?然后,你只需执行i*j优化(如果结果是耦合的,事情会变得更复杂…)
这个问题可能太慢,有两个原因。因为优化速度慢,或者因为i和j非常大。在后一种情况下,您可能可以使用Numba来加速它,因为在Python中for循环很慢。在
如前所述,使用
scipy.optimize
中的某个方法来执行每个优化。注意最初的猜测,特别是如果函数有多个最小值。在相关问题 更多 >
编程相关推荐