python - 以最小误差求解非线性方程组

标签 python optimization scipy nonlinear-optimization

我有一些非线性优化问题(最好用Python解决):

给定 2D 平面中的 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

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

如何找到包含半径不确定性的最佳点 (x/y)?

最佳答案

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

提出的算法:

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

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

  1. 将点 (x,y) 和 (x,-y) 插入第 3 个圆中。
  2. 解决方案是所有三个圆相交于: x,y x,-y 或者根本不。

另一个建议... 我再次阅读了你的问题,并意识到你不想找到 重点是它本身...

但是,如果您在纸上画出所有 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()

关于python - 以最小误差求解非线性方程组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7996405/

相关文章:

python - type() 函数没有为 boto3 sqs 对象返回正确的结果?

python - 当没有字段名称时,如何使用 order 属性对 scipy 数组进行排序?

c++ - 公共(public)变量是否比使用 getter 和 setter 更快?

python - Python中的曲线拟合指数增长函数

python - 快速问题 : Use the default value of the scipy. optimize.minimize tol 参数

python - nltk 的 UnicodeDecodeError

python - 使用 arrayName 和 arrayName[ :] in Python? 有什么区别

Python 新推出的数字文字(例如 234_432)不能与 .isdigit() 一起使用吗?

java - 如何优化 Java 中多项式求根的二分法?

javascript - for 循环条件是否优化?