Если требуется сформировать матрицу, у которой элементы, расположенные по главной диагонали, равны единице, а остальные элементы равны нулю, можно воспользоваться функцией eye:
>> C=eye (3, 4)
C =
1 0 0 0
0 1 0 0
0 0 1 0
Чтобы заполнить матрицу случайными числами, можно обратиться к функциям rand и randn. Функция rand позволяет сформировать матрицу из случайных чисел, равномерно распределённых на интервале от 0 до 1:
>> C=rand (2, 3)
C =
0.2785 0.9575 0.1575
0.5469 0.9649 0.9706
Функция radn формирует матрицу из случайных чисел, распределённых по нормальному закону:
>> C=randn (2, 3)
C =
0.7254 0.7147 -0.1241
-0.0631 -0.2050 1.4897
Функция magic формирует так называемую «магическую матрицу», у которой сумма элементов каждого столбца, строки и диагонали равна одному и тому же числу. Эта функция имеет единственный аргумент, определяющий размер создаваемой квадратной матрицы (магический квадрат):
>> C=magic (3)
C =
8 1 6
3 5 7
4 9 2
Заметим, что простые преобразования (транспортирование, переворачивание строк и столбцов, поворот) сохраняют свойство матрицы быть кубическим квадратом.
С помощью функции pascal можно задать матрицу Паскаля (матрица Паскаля — это матрица, элементами которой являются биномиальные коэффициенты), структура которой соответствует треугольнику Паскаля:
>> C=pascal (3)
C =
1 1 1
1 2 3
1 3 6
Для отображения диагональных элементов матрицы служит функция diag. Так, например, для того, чтобы извлечь главную диагональ приведённой выше матрицы Паскаля, следует ввести команду
>> c=diag (C)
c =
Аналогичным образом можно извлечь, например, любую диагональ матрицы — для этого следует лишь указать её номер в качестве второго аргумента функции diag (при этом диагонали отсчитываются вверх и вниз от главной, которая по умолчанию имеет номер 0).
>> C=magic (3)
C =
8 1 6
3 5 7
4 9 2
>> c1=diag (C, 1)
c1 =
>> c2=diag (C, -1)
c2 =
Функция diag также позволяет сформировать такие матрицы, у которых элементы, расположенные по диагонали, соответствуют элементам некоторого вектора, а остальные элементы равны нулю. В качестве примера сформируем диагональную матрицу из вектор-строки a:
>> a=[4 1 -1]
a =
4 1 -1
>> D=diag (a)
D =
4 0 0
0 1 0
0 0 -1
Если элементами вектора требуется заполнить не главную диагональ, а какую-либо другую, следует указать её номер во втором аргументе функции diag:
>> D1=diag (a, 1)
D1 =
0 4 0 0
0 0 1 0
0 0 0 -1
0 0 0 0
>> D2=diag (a, -1)
D2 =
0 0 0 0
4 0 0 0
0 1 0 0
0 0 -1 0
ВЫЧИСЛЕНИЕ СОБСТВЕННЫХ ЗНАЧЕНИЙ И СОБСТВЕННЫХ ВЕКТОРОВ МАТРИЦЫ
Пусть даны квадратная матрица А и ненулевой вектор-столбец х:
,
Умножив матрицу А на вектор-столбец х, получим вектор-столбец y
,
т.е.
.
Если окажется, что координаты вектора y пропорциональны координатам данного вектора х с коэффициентом пропорциональности (), и, следовательно,
,
то ненулевой столбец х называется собственным вектором матрицы А, а коэффициент пропорциональности - собственным значением матрицы А.
Так как и , то .
Последнее соотношение можно переписать так:
,
где
,
Соотношение представляет собой линейную, однородную систему уравнений, которая имеет ненулевые решения тогда и только тогда, когда ее определитель равен нулю
,
или в развернутом виде
Если раскрыть этот определитель, то получим многочлен n-ой степени относительно , решая это уравнение, найдем n собственных значений .
Ручной счет.
Будем определять одно собственное значение методом итераций.
В качестве начального приближения возьмем
Нулевой шаг
, ,
1-й шаг
, ,
2-й шаг
, ,
n-й шаг
, ,
Оценка погрешности:
Пример
Ручной счет
Начальное приближение:
0-й шаг
, ,
1-й шаг
, ,
2-й шаг
,
,
3-й шаг
,
Оценка погрешности:
Ответ:
,
Лабораторная работа 3.
Вычисление собственных значений и собственных векторов
симметричной матрицы
Задание.
Вычислить собственные значения и собственные векторы симметричной матрицы на ЭВМ (требуется составить программу в системе MATLAB (на M-языке)) и определить максимальное по модулю собственное число и соответствующий ему собственный вектор степенным методом
Варианты задания.
где K– номер факультета (института); G –
номер группы; S – номер студента по журналу.
Выполнение работы на ЭВМ.
Для выполнения создается М-файл. Ниже приведен текст М-файла.
A=input('Введите матрицу A=');
A=A/6;
n=size(A);
fprintf('\n Исходная матрица (Матрица A) \n');
for i=1:n
fprintf('%6.2f',A(i,:));
fprintf('\n');
end
[T,J]=eig(A);
x=diag(J);
fprintf('\n Вектор собственных чисел \n');
fprintf('%6.2f \n',x);
fprintf('\n Матрица собственных векторов \n');
for i=1:n
fprintf('%12.4g',T(i,:));
fprintf('\n');
end
Результаты расчета в командном окне:
Исходная матрица (Матрица A)
5.00 -3.00 4.00
-3.00 12.00 -3.00
4.00 -3.00 5.00
Вектор собственных чисел
1.00
6.00
15.00
Матрица собственных векторов
0.7071 0.5774 0.4082
0 0.5774 -0.8165
-0.7071 0.5774 0.4082
Ниже приведены пояснения к приведенному тексту программы.
1. Заметим, что в представленной программе (а также в последующих программах, относящихся к данной лабораторной работе), при задании значений элементов матрицы множитель 1/6 учитывать не надо – деление на 6 уже предусмотрено в тексте программы. Это сделано для упрощения ввода исходных данных и исключения соответствующих погрешностей.
После запуска программы в ответ на запрос о вводе матрицы A следует задать: [30 -18 24; -18 72 -18; 24 -18 30].
2. Функция [V,D]=eig(A) в системе MATLAB возвращает матрицу
собственных векторов V (собственные векторы расположены по столбцам) и диагональную матрицу D собственных значений (матрица Жордана (элементы, расположенные на ее главной диагонали есть собственные значения матрицы A); каноническая форма матрицы A), т.е., по сути, определяется разложение Жордана (но при условия отсутствия в матрице Жордана жордановых клеток порядка, большего единицы) и справедливо равенство A*V=V*D. В частном случае, при обращении типа d=eig(A) возвращается
вектор d, координаты (элементы) которого есть собственные значения (собственные числа) матрицы A.