通过python定位给定距离的3D点
我想定位一个三维点,给定三个基点之间的距离。 我尝试了通过python定位给定距离的3D点,python,scipy,nonlinear-functions,equations,Python,Scipy,Nonlinear Functions,Equations,我想定位一个三维点,给定三个基点之间的距离。 我尝试了辣味.optimize.fslove,但结果似乎并不令人满意 point1 = [0., 0., 0.] point2 = [1., 0., 0.] point3 = [0., 1., 0.] def solveLocate(x): xp = float(x[0]) yp = float(x[1]) zp = float(x[2]) return[ (xp - point1[0]) ** 2
辣味.optimize.fslove
,但结果似乎并不令人满意
point1 = [0., 0., 0.]
point2 = [1., 0., 0.]
point3 = [0., 1., 0.]
def solveLocate(x):
xp = float(x[0])
yp = float(x[1])
zp = float(x[2])
return[
(xp - point1[0]) ** 2 + (yp - point1[1]) ** 2 + (zp - point1[2]) ** 2,
(xp - point2[0]) ** 2 + (yp - point2[1]) ** 2 + (zp - point2[2]) ** 2,
(xp - point3[0]) ** 2 + (yp - point3[1]) ** 2 + (zp - point3[2]) ** 2,
]
result1=scipy.optimize.fsolve(solveLocate, [0.,1.,1.])
print result1
print solveLocate(result1)
我得到的答案是:
/Library/Python/2.7/site-packages/scipy/optimize/minpack.py:161: RuntimeWarning: The iteration is not making good progress, as measured by the
improvement from the last ten iterations.
warnings.warn(msg, RuntimeWarning)
[ 0.38997015 0.38805274 0.00093549]
[0.30266251961577206, 0.5227222226668922, 0.5265570428112971]
所以我想问我如何才能更有效、更准确地求解
谢谢 抱歉,
result1
中我不清楚您在做什么:您想做平方根吗?或者你正在寻找非线性函数的根?fsolve
顾名思义,就是一个解算器,它会找到零。但是你的目标函数没有零。如果你想最小化,专用的最小化器更合适。还要注意的是,就目前情况而言,您的函数可以在组件方面最小化(如果您的误差度量是平方和的话),因此您可以使用1d最小化器,甚至可以进行分析。(xp-point1[0])**2+(yp-point1[1])**2+(zp-point1[2])**2=0``(xp-point2[0])**2+(yp-point2[1])**2+(zp-point2[2])**2=1``(xp-point3[0])**2+(yp-point3[1])**2+(zp-point3[2])**2=1
@dadept方程应该有解[0.0,0.0,0.0]
@PaulPanzer@KeyYD除非我弄错了,否则在点[0,0,0]
中,函数具有值[norm(point1)**2,norm(point2)**范数(第3点)**2]
非常非零,所以Paul是对的。此外,你的问题与三个点之间没有“给定距离”,只有三个点。这表明您确实需要最小化搜索,而不是零搜索。