Алгоритм для символического вычленения и упрощения уравнения - PullRequest
0 голосов
/ 27 октября 2019

Я пытаюсь символически упростить уравнения в C # без использования каких-либо библиотек. Конечной целью является формат:

(a * b * c * d * ... + a1 * b1 * c1 * d1 * ... + a2 * b2 * c2 * d2 * ... +...) / (e * f * g * h * ... + e1 * f1 * g1 * h1 * ... + e2 * f2 * g2 * h2 * ... + ...)

означает сумму продуктов, деленную на другую сумму продуктов. Я дошел до того, что могу избавиться от очевидных общих факторов, например:

(a b + a c) / (a ​​ e + a d)

правильно упростит до

(b + c) / (e + d)

Однако я не знаю, как выделить более сложные вещи, например (a ^ 2 * x ^ 2 + a b x ^ 2 + a b x + a + x b ^ 2 + b) / (a ​​ c x ^ 2 + a d x + a + b c x ^ 2 + b d * x + b)

совпадает с(a x ^ 2 + b x + 1) / (c x ^ 2 + d x + 1), когда вы выводите (a + b) из числителя и знаменателя

Мой вопрос заключается в том, как создать алгоритм, который будет символически выделять такие термины (даже для очень длинных и сложных уравнений) с учетом суммы продуктов по сравнению с форматом суммы продуктов.

Редактировать: для этой задачи можно смело предположить, что ни одна из переменных не равна нулю

...