Как сделать матрицу диагональной

Обновлено: 06.07.2024

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

Например, диагональная матрица не изменится, если ее строки объявить столбцами (при этом ее столбцы автоматически становятся строками). Поэтому для диагональных матриц A и B исчезает неравноправие между строками и столбцами в произведении таких матриц и, следовательно, AB = BA.

У каждого элемента, расположенного на главной диагонали квадратной матрицы, номер строки совпадает с номером столбца. Все другие матричные элементы a i j (ij) диагональной матрицы A равны нулю.

Подобные ситуации встречаются достаточно часто и поэтому договорились использовать для их описания специально введенное выражение вида δ i j :

Вот примерно такова логика изложения в данном разделе!


(1)

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


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


(2)

Для записи подобных выражений удобно использовать дельта-символ Кронекера, определяемый формулой


(3)

Очевидно, что дельта-символ симметричен относительно перестановки индексов:

δi j = δj i . (4)

Другое важное свойство дельта-символа δi j заключается в том, что он снимает суммирование в выражениях вида

Очевидно, что при умножении прямоугольной матрицы A справа на диагональную матрицу с диагональными элементами λ 1 , λ 1 , . λ n первый столбец матрицы A умножается на число λ 1 , второй - на число λ 2 и так далее.
При умножении матрицы A слева на такую диагональную матрицу каждая строка матрицы A умножается на соответствующее число λ i .

Диагональная квадратная матрица с равными диагональными элементами называется скалярной.

Пусть линейный оператор . Рассмотрим в произвольный базис . Пусть в этом базисе линейному оператору соответствует матрица . Существует ли такой базис в пространстве , в котором матрица линейного оператора была бы диагональной?


Очевидно, если такой базис существует, то по Свойству 1 (п. 3.6) диагонализация матрицы произойдет в результате преобразование подобия.

Имеет место следующая

Теорема. Если в существует базис из собственных векторов линейного оператора то матрица линейного оператора будет диагональной в этом базисе.

Выясним, при каких условиях существует базис из собственных векторов линейного оператора.

Пусть – собственные значения линейного оператора кратностей , причём . Если для каждого существует собственных векторов – решений ФСР соответствующей однородной СЛАУ, то существует базис из собственных векторов, а значит, матрицу линейного оператора можно привести к диагональному виду. В частности, если , т. е. спектр линейного оператора простой, то базис из собственных векторов существует. Однако, если среди корней характеристического уравнения найдётся хотя бы одна пара комплексно-сопряжённых, то в вещественном линейном пространстве не существует базиса из собственных векторов.

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

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


(16)

Где – векторы-столбцы, соответствующие собственным векторам линейного оператора . Равенство (16) можно записать в более компактной форме:


(17)

Где – диагональная матрица, у которой на главной диагонали расположены собственные числа т. е.



Умножим обе части равенства (17) слева на матрицу :

или (18)

Это означает, что матрица линейного оператора при переходе к базису из собственных векторов станет диагональной в результате преобразования подобия (18).

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

Решение. Составим характеристическое уравнение:


Найдём собственные векторы линейного оператора:

;

Т. е.

Собственные значения линейного оператора различны, значит, собственные векторы линейно независимы, т. е. образуют базис. В этом базисе матрица линейного оператора будет диагональной:


.


Матрица перехода к базису из собственных векторов .

Проверим правильность проведенных вычислений. По формуле (7) Найдём :


.



Ответ: .

Пример 15. Линейный оператор в некотором базисе задан матрицей Существует ли базис из собственных векторов линейного оператора ?

Решение. Составим характеристическое уравнение:


Собственные значения линейного оператора Найдём соответствующие им собственные векторы: Т. е. . Все остальные собственные векторы имеют вид . Это означает, что базис из собственных векторов не существует.

Пример 16. Найти собственные векторы и собственные значения линейного оператора , заданного в некотором базисе матрицей . Можно ли привести матрицу к диагональному виду?

Решение. Составим характеристическое уравнение:



Т. е.


Или


Собственные значения линейного оператора Найдём собственные векторы:


Эта система эквивалентна следующей:


Т. е. ФСР этой системы состоит из одного решения, например, Собственным значениям и соответствует собственный вектор . Другие собственные векторы, соответствующие собственным значениям и , могут быть получены из умножением на произвольное вещественное число. Например, .


Так как , то значит,

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

Диагональная матрица — квадратная матрица, все элементы которой, стоящие вне главной диагонали, равны нулю:

Является одновременно и верхнетреугольной и нижнетреугольной. Диагональная матрица симметрична: D ⊺ = D =D> . Ранг диагональной матрицы равен количеству ненулевых элементов, находящихся на главной диагонали.

Определитель диагональной матрицы равен произведению диагональных элементов: d e t D = d 11 d 22 … d n n \,D=d_d_\dots d_> .

Алгебраическое дополнение недиагонального элемента диагональной матрицы равно нулю, то есть:

Обратная матрица для диагональной матрицы равна:

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

В некоторых случаях недиагональная матрица может быть приведена к диагональному виду путём замены базиса; достаточным условием является различность всех собственных значений матрицы (в общем случае матрица приводима лишь к жордановой форме).

D = diag( v ) возвращает квадратную диагональную матрицу с элементами векторного v на основной диагонали.

D = diag( v , k ) помещает элементы векторного v на k диагональ th. k=0 представляет основную диагональ, k>0 выше основной диагонали и k ниже основной диагонали.

x = diag( A ) возвращает вектор-столбец основных диагональных элементов A .

x = diag( A , k ) возвращает вектор-столбец элементов на k диагональ th A .

Примеры

Создание диагональных матриц

Создайте вектор 1 на 5.

Используйте diag создать матрицу с элементами v на основной диагонали.

Создайте матрицу с элементами v на первой супер диагонали ( k=1 ).

Результат 6 6 матрица. Когда вы задаете вектор из длины n как вход, diag возвращает квадратную матрицу размера n+abs(k) .

Получение диагональных элементов

Получите элементы на основной диагонали случайного 6 6 матрица.

Получите элементы на первой поддиагонали ( k=-1 ) из A . Результат имеет тот меньше элемента, чем основная диагональ.

Вызов diag дважды возвращает диагональную матрицу, состоявшую из диагональных элементов исходной матрицы.

v — Диагональные элементы
вектор

Диагональные элементы в виде вектора. Если v вектор с N элементы, затем diag(v,k) квадратная матрица порядка N+abs(k) .

diag([]) возвращает пустую матрицу, [] .

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char
Поддержка комплексного числа: Да

A — Введите матрицу
матрица

Введите матрицу. diag возвращает ошибку если ndims(A) > 2 .

diag([]) возвращает пустую матрицу, [] .

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char
Поддержка комплексного числа: Да

k — Диагональный номер
целое число

Диагональный номер в виде целого числа. k=0 представляет основную диагональ, k>0 выше основной диагонали и k ниже основной диагонали.

Для m-by-n матрица, k находится в области значений ( − m + 1 ) ≤ k ≤ ( n − 1 ) .

Советы

trace из матрицы равно sum(diag(A)) .

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Указания и ограничения по применению:

Если вы предоставляете k , затем это должно быть действительное и скалярное целочисленное значение.

Для входных параметров переменного размера, которые являются векторами переменной длины (1 на: или:-1), diag :

Обрабатывает вход как вектор

Возвращает матрицу с входным вектором по заданной диагонали

Для входных параметров переменного размера, которые не являются векторами переменной длины, diag :

Обрабатывает вход как матрицу

Не поддерживает входные параметры, которые являются векторами во время выполнения

Возвращает вектор переменной длины

Если вход является переменным размером (: m-by-:n), и имеет форму 0 на 0 во время выполнения, затем выход 0 1, не 0 на 0. Однако, если вход является постоянным размером 0 на 0, то выходом является [] .

Для входных параметров переменного размера, которые не являются векторами переменной длины (1 на: или:-1), diag обрабатывает вход как матрицу, из которой можно извлечь диагональный вектор. Это поведение происходит, даже если входной массив является вектором во время выполнения. Обеспечивать diag чтобы создать матрицу из входных параметров переменного размера, которые не являются 1 на: или:-1, используйте:

diag(x(:)) вместо diag(x)

diag(x(:),k) вместо diag(x,k)

Генерация кода графического процессора
Сгенерируйте код CUDA® для NVIDIA® графические процессоры с помощью GPU Coder™.

Указания и ограничения по применению:

Если вы предоставляете k , затем это должно быть действительное и скалярное целочисленное значение.

Для входных параметров переменного размера, которые являются векторами переменной длины (1 на: или:-1), diag :

Обрабатывает вход как вектор

Возвращает матрицу с входным вектором по заданной диагонали

Для входных параметров переменного размера, которые не являются векторами переменной длины, diag :

Обрабатывает вход как матрицу

Не поддерживает входные параметры, которые являются векторами во время выполнения

Возвращает вектор переменной длины

Если вход является переменным размером (: m-by-:n), и имеет форму 0 на 0 во время выполнения, затем выход 0 1, не 0 на 0. Однако, если вход является постоянным размером 0 на 0, то выходом является [] .

Для входных параметров переменного размера, которые не являются векторами переменной длины (1 на: или:-1), diag обрабатывает вход как матрицу, из которой можно извлечь диагональный вектор. Это поведение происходит, даже если входной массив является вектором во время выполнения. Обеспечивать diag чтобы создать матрицу из входных параметров переменного размера, которые не являются 1 на: или:-1, используйте:

diag(x(:)) вместо diag(x)

diag(x(:),k) вместо diag(x,k)

Основанная на потоке среда
Запустите код в фоновом режиме с помощью MATLAB® backgroundPool или ускорьте код с Parallel Computing Toolbox™ ThreadPool .

Эта функция полностью поддерживает основанные на потоке среды. Для получения дополнительной информации смотрите функции MATLAB Запуска в Основанной на потоке Среде.

Массивы графического процессора
Ускорьте код путем работы графического процессора (GPU) с помощью Parallel Computing Toolbox™.

Эта функция полностью поддерживает массивы графического процессора. Для получения дополнительной информации смотрите функции MATLAB Запуска на графическом процессоре (Parallel Computing Toolbox) .

Распределенные массивы
Большие массивы раздела через объединенную память о вашем кластере с помощью Parallel Computing Toolbox™.

Эта функция полностью поддерживает распределенные массивы. Для получения дополнительной информации смотрите функции MATLAB Запуска с Распределенными Массивами (Parallel Computing Toolbox) .

Смотрите также

Открытый пример

У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?

Документация MATLAB

Поддержка

© 1994-2021 The MathWorks, Inc.

1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.

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

3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.

4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.

Дана N * N матрица. Задача состоит в том, чтобы преобразовать матрицу в диагональную матрицу . То есть изменить значения недиагональных элементов матрицы на 0.

Диагональная матрица : матрица называется диагональной матрицей, если все недиагональные элементы матрицы равны нулю.

Примеры:

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

Ниже приведена программа для обнуления всех недиагональных элементов матрицы:

// C ++ программа для изменения значения
// недиагональные элементы матрицы до 0

using namespace std;

const int MAX = 100;


// Функция для печати результирующей матрицы

void print( int mat[][MAX], int n, int m)

for ( int i = 0; i

for ( int j = 0; j


// Функция для изменения значений всех
// недиагональные элементы до 0

Читайте также: