我有一个python程序,它接受一堆值并计算粒子的旋转作为输出。该程序不是函数,因此没有输入。我被告知要单独优化三个不同的值(只改变一个值,而另外两个值保持不变),以产生该粒子旋转的y分量的优化输出。我认为我需要做的就是将这个程序变成一个函数,我希望优化的值是输入。然后我想我需要创建一个新函数来迭代输入的所有可能值以产生我想要的输出。例如,我需要优化偶极磁铁的长度。旋转的y分量在现实生活中应该具有-1的值,但我需要它精确到10个小数位(-.9999999999)。如何优化偶极磁体长度值,使y-spin的值精确到10位小数?
答案 0 :(得分:1)
如果我更正你计算S [1],S [2]和S [3]对吗?尝试重写代码,以便得到类似的内容:
def getSpin(L1,L2,d):
...all your calculations will be done here..
# return the value of S[2] minus the goal value, optimization can find 0
return S[2]-1.0
要优化结果,请使用scipy.optimize
- 包并在S [2]上进行评估。为此,请确保您的计算机上安装了scipy。以下代码是我方的第一个建议,因此尚未经过测试/调试,因此请查看documentation of the solver。在此代码中,需要填写x0和边界。如果将某个参数的最小值和最大值放在一起,则求解器将该参数固定为该值,并仅更改其他参数。
from scipy.optimize import minimize
x0=(0.203, 5.653, 0.189089089089089) # your initial guess
bounds=((l1min,l1max),(l2min,l2max),(dmin,dmax)) # the minimum and maximum values for each parameter
res=minimize(getSpin,x0,method=‘SLSQP’,args=(),bounds=bounds,tol:1e-10)
#res.x contains the optimized values for L1,L2 and d