不能用sympy.s得到真正的解决方案

2024-09-30 12:27:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我试过了共解求解非线性方程组。它给了我一个复杂的解决方案集。 然后我在matlab中尝试了这个方程组,得到了一个我认为是正确的真实解集,因为这实际上是一个几何问题,我在CAD软件中测试了这个解。在

所以…为什么共解给了我一套复杂的解决方案?我到底在哪里犯了错误。。。还是错误?在

下面是我写的代码:

import sympy
x1=0
y1=-620
r1=920
zqua=126
yqua=276
x3=51
rm=205
r3=104

x0 = sympy.Symbol('x0')
y0 = sympy.Symbol('y0')
r0 = sympy.Symbol('r0')

f1=r0+((x0-x1)**2+(y0-y1)**2)**0.5-r1
f2=(zqua-x0)**2+(yqua-y0)**2-r0**2
f3=r0+((x0-x3)**2+(y0-rm)**2)**0.5-r3

A=sympy.solve((f1,f2,f3), (x0, y0, r0))
print A

它给出的解决方案是:

^{pr2}$

Tags: rm错误解决方案symbolr3x1sympyr0
1条回答
网友
1楼 · 发布于 2024-09-30 12:27:38

虽然f1和f3中r的差号是正确的,但是如果你像在f2中那样用正方形来写(符号不再重要),你会得到两个真正的答案:

>>> f1=(x0-x1)**2+(y0-y1)**2-(r0 - r1)**2
>>> f2=(zqua-x0)**2+(yqua-y0)**2-r0**2
>>> f3=(x0-x3)**2+(y0-rm)**2-(r3 - r0)**2
>>>
>>> A=sympy.solve((f1,f2,f3), (x0, y0, r0))
>>> [[i.n(2) for i in w] for w in A]
[[73., 2.2e+2, 79.], [88., 2.5e+2, 48.]]
>>>

似乎,SymPy应该用另一种表示法找到根,但它选择了-79和-48,结果不符合原始方程,因此被排除在报告的解决方案之外。在

相关问题 更多 >

    热门问题