python利用sympy求解多元方程组

您好!请教一个问题
我求解4元2次方程组,算出来的结果中还带着部分自变量符号是为啥?
f1=(XD2-XA)**2+(YD2-YA)**2-(XD1-XA)**2-(YD1-YA)**2
F2=(XC2-XB)**2+(YC2-YB)**2-(XC1-XB)**2-(YC1-YB)**2
F3=(XD3-XA)**2+(YD3-YA)**2-(XD1-XA)**2-(YD1-YA)**2
f4=(XC3-XB)**2+(YC3-YB)**2-(XC1-XB)**2-(YC1-YB)**2

def func():
return[f1,F2,F3,f4]
outcome=solve(func(),[XC1,YC1,XD1,YD1])
print(outcome)

部分结果:
(1.04222352941154e-13YC1 - 28812.3123431666sqrt(-1.20460253201585e-9YC1**2 - 0.000176339638892719YC1 + 1) - 28941.1764705819, YC1, -7.36188235294073e-14YD1 - 30538.0946509991sqrt(-1.07229955641681e-9YD1**2 - 0.000125850122056633YD1 + 1) - 31141.1764705864, YD1)

XC2,XD2,YC2,YD2,XC3,YC3,XD3,YD3也都是包含XC1,YC1,XD1,YD1的表达式,XA,XB,YA,YB是已知量赋了值的

img


别人好像是这样用的
https://www.jianshu.com/p/339c91ae9f41

import numpy as np
import math
import sympy
from sympy import symbols,solve
#定义自变量
XC1, YC1, XD1, YD1 = symbols('XC1, YC1, XD1, YD1')
#设置初始参数(机架A点和B点,运动输出点P点(3组P点坐标和角度))
P1=np.array([850,700]); P2=np.array([900,1200]); P3=np.array([1000,1700])
Xp1=P1[0]; Yp1=P1[1]
Xp2=P2[0]; Yp2=P2[1]
Xp3=P3[0]; Yp3=P3[1]
sita=np.array([0,15,30])
A=np.array([0,0]); B=np.array([450,125])
XA=A[0]; YA=A[1]; XB=B[0]; YB=B[1]
sita12=sita[1]-sita[0]; sita13=sita[2]-sita[0]
pi=math.pi
cos12=float('%.2f'% math.cos(sita12pi/180)); sin12=float('%.2f'% math.sin(sita12pi/180))
cos13=float('%.2f'% math.cos(sita13pi/180)); sin13=float('%.2f'% math.sin(sita13pi/180))
#位移矩阵
D12=np.array([[cos12, -sin12, Xp2-Xp1cos12+Yp1sin12], [sin12, cos12, Yp2-Xp1sin12-Yp1cos12], [0,0,1]])
D13=np.array([[cos13, -sin13, Xp3-Xp1cos13+Yp1sin13], [sin13, cos13, Yp3-Xp1sin13-Yp1cos13], [0,0,1]])
#矩阵表示C2,C3,D2,D3坐标
C1=np.array([[XC1],[YC1],[1]]); D1=np.array([[XD1],[YD1],[1]])
C2=np.matmul(D12,C1); D2=np.matmul(D12,D1)
C3=np.matmul(D13,C1); D3=np.matmul(D13,D1)
XC2=C2[0,0]; YC2=C2[1,0]; XD2=D2[0,0]; YD2=D2[1,0]
XC3=C2[0,0]; YC3=C2[1,0]; XD3=D2[0,0]; YD3=D2[1,0]
#方程组求解
f1=(XD2-XA)**2+(YD2-YA)**2-(XD1-XA)**2-(YD1-YA)**2
f2=(XC2-XB)**2+(YC2-YB)**2-(XC1-XB)**2-(YC1-YB)**2
f3=(XD3-XA)**2+(YD3-YA)**2-(XD1-XA)**2-(YD1-YA)**2
f4=(XC3-XB)**2+(YC3-YB)**2-(XC1-XB)**2-(YC1-YB)**2
def func():
return[f1,f2,f3,f4]
outcome=solve(func(),[XC1,YC1,XD1,YD1])
print(outcome)

[(-7.8441176470581e-14YC1 - 36569.2730321996sqrt(-7.47768809238176e-10YC12 - 6.06660436294909e-5YC1 + 1) - 36326.470588232, YC1, 1.19764705882324e-13YD1 - 38322.5876819778sqrt(-6.80910994825373e-10YD12 - 3.58960255036895e-5YD1 + 1) - 38561.7647058729, YD1), (-7.8441176470581e-14YC1 - 36569.2730321996sqrt(-7.47768809238176e-10YC12 - 6.06660436294909e-5YC1 + 1) - 36326.470588232, YC1, 1.19764705882324e-13YD1 + 38322.5876819778sqrt(-6.80910994825373e-10YD12 - 3.58960255036895e-5YD1 + 1) - 38561.7647058729, YD1), (-7.8441176470581e-14YC1 + 36569.2730321996sqrt(-7.47768809238176e-10YC12 - 6.06660436294909e-5YC1 + 1) - 36326.470588232, YC1, 1.19764705882324e-13YD1 - 38322.5876819778sqrt(-6.80910994825373e-10YD12 - 3.58960255036895e-5YD1 + 1) - 38561.7647058729, YD1), (-7.8441176470581e-14YC1 + 36569.2730321996sqrt(-7.47768809238176e-10YC12 - 6.06660436294909e-5YC1 + 1) - 36326.470588232, YC1, 1.19764705882324e-13YD1 + 38322.5876819778sqrt(-6.80910994825373e-10YD12 - 3.58960255036895e-5YD1 + 1) - 38561.7647058729, YD1)]

你可以导入一下math库(覆盖掉sympy的部分函数),直接用eval()简化算式。一般来说,如果它返回的是一个关系式,那就说明这个方程可能无解。