как решить набор выражений - PullRequest
0 голосов
/ 05 июля 2019

как решить набор выражений в Python, не числовое вычисление, а чисто аналитический способ?

Я проверил несколько функций sympy, которые, кажется, не могут выполнить работу.

Предполагая, что мысобираюсь найти выражение для x1, x2, x3 и x4 со следующими уравнениями:

x1 = a*s+b*x2 + c

x2 = (m+n) * x3 + d

x3 = l*s + k*x4 + e

x4 = i*s + j*x1 + f

, где x1, x2, x3, x4, a, b, c, d, e, f, i, j, k, l, m, n - все символы.

Как достичь результата для таких проблем в Python.

1 Ответ

0 голосов
/ 06 июля 2019

Сначала выведите «бумажные» уравнения в уравнения SymPy:

>>> from sympy.utilities.iterables import reshape
>>> eqs=reshape(S('''(
    x1 = a*s+b*x2 + c
    x2 = (m+n) * x3 + d
    x3 = l*s + k*x4 + e
    x4 = i*s + j*x1 + f)'''.strip().replace(
    '\n',',').replace('=',',')), (2,))
>>> eqs = [Eq(*i) for i in eqs]

Затем решите уравнения (см. solve строка документа):

>>> solve(eqs, var('x1:5'))
{x4: (a*s + b*d + b*(e + l*s)*(m + n) + c - (-f - i*s)/j)/(-b*k*(m + n) + 1/j),
 x3: e + k*(a*s + b*d + b*(e + l*s)*(m + n) + c - (-f - i*s)/j)/(-b*k*(m+ n) + 1/j) + 
     l*s, 
 x1: (-f - i*s)/j + (a*s + b*d + b*(e + l*s)*(m + n) + c - (-f - i*s)/j)/(j*(-b*k*(m 
     + n) + 1/j)),
 x2: d + (m + n)*(e + k*(a*s + b*d + b*(e + l*s)*(m + n) + c - (-f - 
     i*s)/j)/(-b*k*(m + n) + 1/j) + l*s)}

Как уже отмечалось здесь , однако, это символическое решение недействительно для всех значений ... оно действует только в том случае, если ни один из коэффициентов перед символами, для которых вы решаете, не равен нулю.

...