我正在尝试编写一段代码,将不同半径的圆有效地打包成方形薄片。使用我正在使用的算法,我需要找到以下值之间的切线:
使用的方程(圆心之间的距离(ri 和 r)= ri + r):
((c1.x-a)**2 + (c1.y-b)**2)**(0.5) = r1 + r
((c2.x-a)**2 + (c2.y-b)**2)**(0.5) = r2 + r
我需要能够快速求解这个方程组,因为每个程序需要计算大约 250 次。
目前我正在使用 SymPy 库中的solve()函数,因为方程组具有所有非线性元素。目前,执行每个solve()函数调用大约需要10秒(太长了:()。
这是我在程序中运行solve()函数的方法:
solve([((c1.x-a)**2 + (c1.y-b)**2)**(0.5) - c1.r - circle.r, ((c2.x-a)**2 + (c2.y-b)**2)**(0.5) - c2.r - circle.r], a,b)
*注意 a 和 b 仅设置为实数 (real=True)
我一直在互联网上浏览,试图找到一些圆的线性化方法或某种多项式逼近来加速求解过程,但什么也没找到,也一无所获。
有没有更快、更准确的方法来用 Python 求解两个圆方程组?
ChatGPT 答案:
求解涉及圆的非线性方程组可以是 计算成本高昂,尤其是在使用符号方法时,例如 症状。加速该过程的一种方法是使用数值 方法。 SciPy 库中的 fsolve 函数是一个不错的选择 用于数值求解非线性方程组。