Я использую максимумы и думаю, у меня есть простой вопрос: как мне поместить собственные значения матрицы в список, чтобы я мог вычислить наибольшее собственное значение?
Из того, что я читаю, если M - матрица, то собственные значения (M) - это список, содержащий два списка, первый из которых содержит собственные значения M, а второй - список чисел, представляющих их соответствующие кратности. Итак, я думаю, что мне нужно сделать, это определить новый список, извлекая первый список из собственных значений (M) ... Однако не знаю, как это сделать.
Другой связанный с этим вопрос: некоторые из этих собственных значений будут сложными, поэтому, когда я возьму максимум из списка, максимумы будут игнорировать комплексные числа в списке и просто смотреть на действительные собственные значения, или это даст мне ошибку?
Сначала вводим матрицу:
M : matrix([1,2],[2,3])$
Затем вычисляем его собственные значения:
eigs : eigenvalues(M);
(%o56) [[2 - sqrt(5), sqrt(5) + 2], [1, 1]]
Наконец, мы извлекаем максимальное собственное значение:
lmax(first(eigs));
(%o59) sqrt(5) + 2
Что касается максимума списка комплексных чисел, помните, что понятие максимума относится только к области действительных чисел. Не существует максимального набора комплексных чисел.
Вот как я бы это сделал. Я назначу результат 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]