我有一些非线性优化问题(最好在python中解决):

在二维平面中给定3个圆(中心x1..3,y1..3,半径d1..3)。

(x-x1)^2 + (y-y1)^2 - r1^2 = 0
(x-x2)^2 + (y-y2)^2 - r2^2 = 0
(x-x3)^2 + (y-y3)^2 - r3^2 = 0


需要公共点(x / y),在这种情况下可以通过fsolve(scipy.optimize)计算。但是,如果半径r1..3分别具有u1..3的不确定度,该如何解决这个问题?即圆的真实半径在r-u ... r + u区间内。

如何找到与半径的不确定性成比例的最佳点(x / y)?

最佳答案

考虑到这里的解密,这实际上并不难:
http://mathworld.wolfram.com/Circle-CircleIntersection.html

提出的算法:


找到x-如链接中所述。
计算y。


两者都应使用任意两个圆圈完成。


将点(x,y)和(x,-y)插入3个圆圈。
解决方案是所有三个圆都在以下位置相交:


还是根本没有。


另一个建议...
我再次阅读了您的问题,发现您不希望找到
重点在于自我...

但是,如果在纸上绘制所有9个圆(3个相交,再加上r + e和r-e的2个越来越小,其中e是错误的),则会注意到以下几点。您的交点位于多边形内。您
可以轻松计算此多边形的顶点。然后您的问题就变成了:
在多边形中找到一个点。
或者您编写一个反对函数来找到这些顶点,然后
您可以最小化该区域。

要了解我对圈子的意思,请运行:

# excuse me for the ugly code ...
import pylab
pylab.axes()

cir = pylab.Circle((1,0), radius=1, alpha =.2, fc='b')
cir1 = pylab.Circle((1,0), radius=0.9, alpha =.2, fc='b')
cir2 = pylab.Circle((1,0), radius=1.1, alpha =.2, fc='b')
cir3 = pylab.Circle((-1,0), radius=1, alpha =.2, fc='b')
cir4 = pylab.Circle((-1,0), radius=0.9, alpha =.2, fc='b')
cir5 = pylab.Circle((-1,0), radius=1.1, alpha =.2, fc='b')
cir6 = pylab.Circle((0,-1), radius=0.9, alpha =.2, fc='b')
cir7 = pylab.Circle((0,-1), radius=1.1, alpha =.2, fc='b')
cir8 = pylab.Circle((0,-1), radius=1, alpha =.2, fc='b')
pylab.gca().add_patch(cir)
pylab.gca().add_patch(cir1)
pylab.gca().add_patch(cir2)
pylab.gca().add_patch(cir3)
pylab.gca().add_patch(cir4)
pylab.gca().add_patch(cir5)
pylab.gca().add_patch(cir6)
pylab.gca().add_patch(cir7)
pylab.gca().add_patch(cir8)

pylab.axis('scaled')
pylab.show()

10-07 20:31