Sympy - вернуть реальное решениеPython

Программы на Python
Ответить
Anonymous
 Sympy - вернуть реальное решение

Сообщение Anonymous »

Я использую пакет GeoSolver для решения 3D-ограничений. Ссылка на GeoSolver — PyPI.
Когда я решаю параллельное ограничение, я получаю сложное решение, пока существует реальное решение.
Можно ли получить только настоящее решение?
код:

Код: Выделить всё

result = sp.solve(AllEquestions, AllVariables)
где AllEquestions =

Код: Выделить всё

['x1- 0', 'y1- 0', 'z1- 0', ((-x1 + x2)*(-x3 + x4) + (-y1 + y2)*(-y3 + y4) + (-z1 + z2)*(-z3 + z4))**2/(((x1 - x2)**2 + (y1 - y2)**2 + (z1 - z2)**2)**1.0*((x3 - x4)**2 + (y3 - y4)**2 + (z3 - z4)**2)**1.0) - 1, 'x2- 100', 'y2- 25', 'z2- 0', ((-x1 + x2)*(-x3 + x4) + (-y1 + y2)*(-y3 + y4) + (-z1 + z2)*(-z3 + z4))**2/(((x1 - x2)**2 + (y1 - y2)**2 + (z1 - z2)**2)**1.0*((x3 - x4)**2 + (y3 - y4)**2 + (z3 - z4)**2)**1.0) - 1, 'x3- 10', 'y3- 10', 'z3- 0', ((-x1 + x2)*(-x3 + x4) + (-y1 + y2)*(-y3 + y4) + (-z1 + z2)*(-z3 + z4))**2/(((x1 - x2)**2 + (y1 - y2)**2 + (z1 - z2)**2)**1.0*((x3 - x4)**2 + (y3 - y4)**2 + (z3 - z4)**2)**1.0) - 1, 'x4- 35', ((-x1 + x2)*(-x3 + x4) + (-y1 + y2)*(-y3 + y4) + (-z1 + z2)*(-z3 + z4))**2/(((x1 - x2)**2 + (y1 - y2)**2 + (z1 - z2)**2)**1.0*((x3 - x4)**2 + (y3 - y4)**2 + (z3 - z4)**2)**1.0) - 1]
и AllVariables =

Код: Выделить всё

[x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4]
возвращает:

Код: Выделить всё

[(0.0, 0.0, 0.0, 100.000000000000, 25.0000000000000, 0.0, 10.0000000000000, 10.0000000000000, 0.0, 35.0000000000000, -1.03077640640442*I*z4 + 16.25, z4), (0.0, 0.0, 0.0, 100.000000000000, 25.0000000000000, 0.0, 10.0000000000000, 10.0000000000000, 0.0, 35.0000000000000, 1.03077640640442*I*z4 + 16.25, z4)]
должен вернуться:

Код: Выделить всё

[(0.0, 0.0, 0.0, 100.000000000000, 25.0000000000000, 0.0, 10.0000000000000, 10.0000000000000, 0.0, 35.0000000000000, 16.2500000000000, 0.0)]
Мои баллы определяются следующим образом:

Код: Выделить всё

self.x = sp.Symbol('x' + str(self.local_var))
где local_var — это просто число
когда я устанавливаю флаг real=True для своих точек

Код: Выделить всё

self.x = sp.Symbol('x' + str(self.local_var), real=True)
Я получаю следующую ошибку:

Файл "C:\Users\Achaibou
Karim\AppData \Roaming\FreeCAD\Macro\fpo\tube\GeoSolver\solver.py",
строка 25, в файлеsolve
result = sp.solve(AllEquestions, AllVariables) "c:\Program Files\FreeCAD 0.21\bin\lib\site-packages\sympy\solvers\solvers.py",
строка 1172, в решении
linear, решение = _solve_system(f, символы, **флаги) Файл "c:\Program Files\FreeCAD
0.21\bin\lib\site-packages\sympy\solvers\solvers.py", строка 1896, в _solve_system
raise NotImplementedError('не найдено допустимое подмножество') NotImplementedError: не найдено допустимое подмножество


Подробнее здесь: https://stackoverflow.com/questions/792 ... l-solution
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»