2016-05-01 2 views
1

Я хотел бы преобразовать набор символических линейных уравнений в форму: {0} = [M] * {v} где {0} - векторный нулей, [M] - матрица переменных, а {v} - вектор коэффициентов.Преобразование набора символических линейных уравнений в матричную форму

Просто ради представляем вам мою проблему, я хотел бы, если кто-то может помочь мне написать мой пример в желаемой форме:

from sympy import* 
init_printing() 

a_0, a_1, a_2, x = symbols('a_0, a_1, a_2, x') 

a_0 + a_1*x + a_2 * x**2 

Примечание: Я использую форму LaTeX, поэтому в случае, если у вас нет 'La TeX установлен, вы должны удалить init_printing().

Так что я хотел бы, чтобы сделать форму, как:

    {a_0 
{0} = [1 x x^2] * a_1 
        a_2} 

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

+0

Несколько замечаний: теги принадлежат тегам, а не заголовку; спасибо/привет не принадлежат нигде при переполнении стека; лучший фокус также помог бы: «Моя цель в этом, но мой вопрос в том, что это« запутывает ». –

+0

Проверьте функцию sympy 'linear_eq_to_matrix' – Stelios

ответ

1

Следующий пример демонстрирует: создание многочлена, создание матрицы с степенями x; создание матрицы коэффициентов; умножение матриц; извлечение элемента матрицы.

Литература: Polynomials Manipulation, Matrices.

from sympy import * 
a_0, a_1, a_2, x = symbols('a_0, a_1, a_2, x') 
p = Poly(a_0 + a_1*x + a_2 * x**2, x) 
powers = Matrix([[x**k for k in range(p.degree()+1)]]) 
c = p.all_coeffs() 
c.reverse() 
coefficients = Matrix(c) 
print(powers, coefficients, (powers*coefficients)[0,0]) 
3

Простой трюк для исключения x условия, чтобы принять Якобиан

In [40]: eq = a_0 + a_1*x + a_2 * x**2 

In [41]: Matrix([eq]).jacobian(Matrix([a_0, a_1, a_2])) 
Out[41]: 
⎡  2⎤ 
⎣1 x x ⎦ 

Еще одна функция, которая может быть полезна для вас здесь collect:

In [45]: collect(eq, x, evaluate=False) 
Out[45]: 
⎧    2 ⎫ 
⎨1: a₀, x: a₁, x : a₂⎬ 
⎩     ⎭