如何在Python中求解非线性系统

问题描述 投票:1回答:1

我有三个不同的3D方程,我想得到它们之间的交集(系统的解)。我的变量是x,y,z

等式:

-0.006683 x**2 - 0.06893 x + 56.73- z = 0
0.002538 y**2 - 1.115 y + 56.73 - z = 0
(x-24.680)**2+(y-238.341)**2+(z+13.971)**2 = 12.580**2

如何在python中解决这个非线性系统?

python equation-solving nonlinear-functions
1个回答
0
投票

如果重新编写功能:

-0.006683 x**2 - 0.06893 x + 56.73- z = 0
0.002538 y**2 - 1.115 y + 56.73 - z = 0
(x-24.680)**2+(y-238.341)**2+(z+13.971)**2 - 12.580**2 = 0

这会有所帮助。

您有三个方程,三个未知数。

蛮力方法是遍历x,y和z值(在x,y和z的某个域上,并查看所有方程式接近零的程度。

fa = -0.006683 x**2 - 0.06893 x + 56.73- z
fb = 0.002538 y**2 - 1.115 y + 56.73 - z
fc = (x-24.680)**2+(y-238.341)**2+(z+13.971)**2 - 12.580**2

[使用'cost函数',例如cost = fa * fa + fb * fb + fc * fc,并寻找最小值。

[还有其他方法,例如Nelder-Mead方法,可以使用,并且效率更高。 https://en.wikipedia.org/wiki/Nelder%E2%80%93Mead_method

一旦找到最小值,您就可以采用原始的搜索范围,并根据需要的精确度对其进行调整。

@ warped提供了一个更好的,更Python化的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.