尝试在中使用root方法科学优化但不断得到一个ValueError,虽然对我来说,似乎我已经输入了正确的变量数。你知道吗
import numpy as np
from scipy import optimize
earthpos=np.array([ 1.50000000e+11, 0.00000000e+00, 0.00000000e+00])
def equations(p,qf):
q1, q2, q3, q4 = p
r1=np.sqrt((qf[0]-mu2)**2+qf[1]**2+qf[2]**2)
return q1**2-q2**2-q3**2+q4**2-qf[0]+mu2, 2*q1*q2-2*q3*q4-qf[1], 2*q1*q3+2*q2*q4-qf[2], q1**2+q2**2+q3**2+q4**2-r1
q1, q2, q3, q4 = optimize.root(equations, (1,1,1,1),earthpos)
提供:
ValueError: too many values to unpack (expected 4)
看来优化.root返回OptimizeResult对象:
请看这里:https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.OptimizeResult.html#scipy.optimize.OptimizeResult
对象由4个以上的字段组成,您要查找的字段是第一个字段,因此
optimize.root(equations, (1,1,1,1),earthpos)[0]
是否可以工作?如果这不起作用,我很抱歉,我已经很久没有用Python编程了。你知道吗您的示例无法运行,因为您没有指定
mu2
。你知道吗阅读documentation for ^{} 中的例子。同时读取由} object 的属性,正如Abs指出的,
root
返回的^{optimize.root
返回一个对象,但是您必须使用所述对象的x
属性来访问解决方案。你知道吗你想做一些类似的事情(我用了
mu2=1
):为什么会出现错误
您得到这个错误是因为
optimize.root()
返回scipy
优化结果。 键入type(optimize.root(equations, (1,1,1,1),earthpos))
并查看输出。你知道吗如何求解和解包优化的解
替换最后一行
与
通过在末尾使用
.x
,您可以从OptimizeResult
对象中解压解决方案,即x
。总而言之,你只需要:
相关问题 更多 >
编程相关推荐