Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metoda_po_inf_ch_2.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

6.2. Собственные числа и вектора

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

Пример 6 (собственные числа и вектора).

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

> restart:with(linalg):

> A:= matrix([[1,2,3],[2,3,4],[4,5,6]]);

По определению, собственные числа матрицы A являются корнями характеристического полинома det(A-lambda*I) по переменной lambda. Найдем этот полином

> cp:= det(A-lambda);

Корни кубического полинома легко найти аналитически

> solve(cp,lambda);

Можно найти эти значения непосредственно из матрицы

> e:= eigenvals(A);

Однако, попробуем заставить систему вычислить эти собственные значения в форме чисел с плавающей запятой

> B:= map(evalf,A);

> eigenvals(B);

Как видим, из-за погрешностей округления нулевое собственное значение перестало быть нулем. Мораль: система Maple (Matemetica) не предназначена для численных расчетов.

Найдем теперь собственные вектора матрицы. По определению это решения уравнения A x = lambda x, т.е. данные вектора определяют пространство вырождения матрицы A - lambda I.

> nullspace(e[1]-A);

> nullspace(e[2]-A);

> nullspace(e[3]-A);

Естественно, что существует возможность определить собственные числа и вектора одновременно

> e := eigenvects(A,radical);

Ответ представляется списком, состоящим зи списков. Для выделения вложенных элементов используют общие правила

> e1:= e[1][1]; v1 := e[1][3][1];

> evalm((e1 - A) &* v1 );

Аналогично можно работать с матрицами, определенными аналитически, т.е. не числовыми. Например

> T:= toeplitz( [a,b,c] );

> eigenvals(T,radical);

> e:= eigenvects(T,radical);

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

> A:= matrix(

> [[-a1/a2, 1/a2, 0, 1/(R*a2)],

> [1, 0, 0, 0],

> [-q1*a1/a2, q1/a2, 0, a2 + q1/(a2*R)],

> [q2, 0, 1, a1]]);

>

Характеристический полином четвертого порядка невырожден

> cp:= det(lambda-A);

т.е. не факторизуется на множители

> factor(cp);

Все корни подобных полиномов Maple представляет как единое выражение.

> solve(cp,lambda);

Для собственных векторов мы также получим одно выражение

> eigenvects(A);

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

Рассмотрим теперь пример, в котором характеристический полином факторизуется

> B:= matrix(6,6,

> [0,0,0,0,0,a,

> 0,1,0,0,0,-b,

> 0,0,0,-a,b,0,

> 0,0,-c,0,0,0,

> 0,0,d,0,0,0,

> c,-d,0,2,0,0] );

>

> cp:= charpoly(B,lambda);

> f:= factor(cp);

Как видно lambda=0 является собственным значением. Построим характеристическую матрицу C=lambda I -B при lambda=0

> C:= charmat(B,0);

и найдем соответствующий собственный вектор.

> nullspace(C);

Аналогично поступим и со следующими двумя собственными значениями. Например, для + sqrt(ac+bd) получим

> C:= charmat(B, sqrt(a*c+b*d));

> nullspace(C);

Теперь перейдем к кубическому полиному. Присвоим корням этого полинома имя beta

> alias( beta=RootOf(op(3,f),lambda) );

и найдем соответствующие вектора

> C := charmat(B,beta);

> nullspace(C);

Для сравнения получим все эти ответы сразу, используя многоцелевую команду

> eigenvects(B);

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

Рассмотрим теперь матрицы с вырожденными собственными значениями

> A:= matrix(4,4,[0,1,0,0,-u^2,2*u,0,0,-u*v,v,u,0,-u*t,t,0,u]);

>

> e:= eigenvects(A);

В ответе мы получили четыре совпадающих собственных значения и базис из трех собственных векторов. Это означает, что два вектора совпадают.

Проверим наш ответ. Соберем из векторов матрицу

> X:= augment(e[3][1], e[3][2], e[3][3] );

и подставим ее в наше уравнение

> evalm((u-A) &* X)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]