刚转行入门,无奈领我入门的 Post Dr. ,有些事情没谈好后表示让我自己 solve 想完成一个将目标函数最小化的问题,可能不难但我就是找不到哪里不对,在此求助各位大神指点迷津。
主要问题:使用 minimize 函数最后想要优化的参数 s 并没有任何变化,以下是部分代码:
用到的 w1,w2,w3,w4,u1,u2,u3,u4 的定义公式均一致,由于篇幅限制省略
# 目标函数
def Psi1(s, rxt, ryt, rzt):
return lambda1 * Gama_x(s,rxt) + lambda2 * Gama_y(s, ryt) + lambda3 * Gama_z(s, rzt)
# 目标函数里面用到的函数
def Gama_x(s, rxt):
rxk = (wx1 / ux1 - wx2 / ux2 - ax - (wx1 / ux1) * (wx2 / ux2) * ax) / (one + (wx1 / ux1) * (wx2 /
ux2)+(wx1 / ux1) * ax - (wx2 / ux2) * ax)
return (alpha ** 2 * sigma_ms) / (2 * pi * mu0) * ((norm(rxk - rxt)) + norm(arctan(rxt)))
def Gama_y(s, ryt):
ryk = (wy1 / uy1 - wy2 / uy2 - ay - (wy1 / uy1) * (wy2 / uy2) * ay) / (one + (wy1 / uy1) * (wy2 /
uy2) + (wy1 / uy1) * ay - (wy2 / uy2) * ay)
return (abs(alpha * sqrt(1-alpha**2)) * sigma_ms) / (2 * pi * mu0) * ((norm(ryk - ryt)) +
norm(arctan(ryt)))
def Gama_z(s, rzt):
rzk = az * ((wz3 * wz4) / (uz3 * uz4))
return (abs(alpha) * sigma_ms) / (4 * pi * mu0) * norm(log(rzt))**2 + 2 * (log(rzt) / rzt) @ (rzk -
rzt).T + L / 2 * (rzk - rzt) @ (rzk - rzt).T
# 主要代码
for i in range(K1):
rxt, ryt,rzt 公式与 rxk,ryk,rzk 一致
# 循环中执行 minimize 函数
r = minimize(Psi1, s, method='Nelder-Mead', args=(rxt, ryt, rzt), bounds=bnds, c**traints=c**)
# 约束
c** = ({'type':'eq','fun': lambda s: yx - Phix @ fbx(s).T},
{'type':'eq','fun': lambda s: yy - Phiy @ fby(s).T},
{'type':'eq','fun': lambda s: yz - Phiz @ fbz(s).T},
)
bnds = ((0, None), (0, None))
# 约束里用到的函数省略了
主要的代码内容就是这些,因为字符有限不知道信息是否完整,非常非常欢迎各路大神指正!