Вот как бы я поступил по этому поводу.Я присваиваю результат 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]