Извлечение списка из списка списков (Maxima)

Я использую максимумы и, кажется, у меня простой вопрос: как поместить собственные значения матрицы в список, чтобы вычислить наибольшее собственное значение?

Из того, что я читаю, если M является матрицей, то собственные значения (M) представляют собой список, содержащий два списка, первый содержит собственные значения M, второй представляет собой список чисел, представляющих их соответствующие кратности. Итак, я думаю, что мне нужно сделать, это определить новый список, извлекая первый список из собственных значений (M)... Однако не знаю, как это сделать.

Другой связанный с этим вопрос: некоторые из этих собственных значений будут сложными, поэтому, когда я возьму максимум из списка, будут ли максимумы игнорировать комплексные числа в списке и просто смотреть на собственные значения с действительными значениями, или это даст мне ошибку?


person user193319    schedule 25.10.2018    source источник


Ответы (2)


Сначала вводим матрицу:

M : matrix([1,2],[2,3])$

Затем вычисляем его собственные значения:

eigs : eigenvalues(M);

(%o56) [[2 - sqrt(5), sqrt(5) + 2], [1, 1]]

Наконец, мы извлекаем максимальное собственное значение:

lmax(first(eigs));

(%o59) квадрат(5) + 2

Что касается максимума списка комплексных чисел, помните, что понятие максимума относится только к области действительных чисел. Не существует максимального набора комплексных чисел.

person Diego Andres Alvarez Marin    schedule 26.10.2018

Вот как бы я поступил. Я назначу результат eigenvalues двум переменным, так что одна будет первым списком, а другая — вторым. Обратите внимание, что я использую для этого параллельное назначение, например. [a, b] : [foo, bar]; назначает foo на a и bar на b. Затем я вставлю элементы в два списка вместе, чтобы сохранить каждое собственное значение с его кратностью. Наконец, я отсортирую собственные значения по величине. Я отсортирую по убыванию величины, поэтому первый элемент — это наибольшее собственное значение и его кратность.

(%i2) A : matrix ([1/7, 15/14, 15/7], [-13/7, 85/14, 71/7], [9/7, -27/7, -47/7]);
                      [  1     15    15  ]
                      [  -     --    --  ]
                      [  7     14    7   ]
                      [                  ]
                      [   13   85    71  ]
(%o2)                 [ - --   --    --  ]
                      [   7    14    7   ]
                      [                  ]
                      [  9      27    47 ]
                      [  -    - --  - -- ]
                      [  7      7     7  ]
(%i3) [vals, mults] : eigenvalues (A);
                      1
(%o3)               [[-, - 2, 1], [1, 1, 1]]
                      2
(%i4) vals_mults : map (lambda ([a, b], [a, b]), vals, mults);
                     1
(%o4)              [[-, 1], [- 2, 1], [1, 1]]
                     2
(%i5) sort (vals_mults, lambda ([a, b], abs(a[1]) > abs(b[1])));
                                       1
(%o5)              [[- 2, 1], [1, 1], [-, 1]]
                                       2
(%i6) first (%);
(%o6)                       [- 2, 1]
person Robert Dodier    schedule 28.10.2018