Spec-Zone.ru › Octave 6

21.2.1 Выражения, включающие диагональные матрицы

Предположим, что D — диагональная матрица. Если M — полная матрица, то D*M будет масштабировать строки M. Это означает, что если S = D*M, то для каждой пары индексов i, j выполняется

S(i,j) = D(i,i) * M(i,j).

Аналогично, M*D выполнит масштабирование столбцов.

Матрица D также может быть прямоугольной, m×n, где m != n. Если m < n, то выражение D*M эквивалентно

D(:,1:m) * M(1:m,:),

т.е., последующие n-m строки матрицы M игнорируются. Если m > n, то D*M эквивалентно

[D(1:n,:) * M; zeros(m-n, columns (M))],

т.е., нулевые строки добавляются к результату. Ситуация с правым умножением M*D аналогична.

Выражения D \ M и M / D выполняют обратное масштабирование. Они эквивалентны решению диагональной (или прямоугольной диагональной) системы в смысле наименьших квадратов и минимальной нормы. В точной арифметике это эквивалентно умножению на псевдообратную матрицу. Псевдообратная прямоугольная диагональная матрица — это снова прямоугольная диагональная матрица с переставленными размерами, где каждый ненулевой диагональный элемент заменяется своим обратным. Алгоритмы деления матриц, на самом деле, используют деление, а не умножение на обратные значения, для лучшей числовой точности; в противном случае они следуют вышеуказанному определению. Обратите внимание, что диагональная матрица никогда не усекается из-за плохо обусловленности; в противном случае она не будет особо полезна для масштабирования. Это обычно соответствует потребностям линейной алгебры. Полная матрица, которая оказывается диагональной (и, следовательно, не является специальным объектом), конечно, обрабатывается нормально.

Умножение и деление на диагональные матрицы эффективно работают также в сочетании с разреженными матрицами, т.е., D*S, где D — диагональная матрица, а S — разреженная матрица, масштабирует строки разреженной матрицы и возвращает разреженную матрицу. Выражения S*D, D\S, S/D работают аналогично.

Если D1 и D2 — обе диагональные матрицы, то выражения

D1 + D2
D1 - D2
D1 * D2
D1 / D2
D1 \ D2

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

Также диагональную матрицу D можно умножить или разделить на скаляр или возвести в скалярную степень, если она квадратная, получая диагональную матрицу во всех случаях.

Диагональная матрица также может быть транспонирована или сопряжённо-транспонирована, давая ожидаемый результат. Извлечение ведущей подматрицы диагональной матрицы, т.е. D(1:m,1:n), даст диагональную матрицу, другие выражения индексации неявно преобразуют в полную матрицу.

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

A = A + eps * eye (n)

является эффективным методом дополнения диагонали матрицы. Вычитание работает аналогично.

При участии в выражениях с другими операторами поэлементных операций, .*, ./, .\ или .^, произойдёт неявное преобразование в полную матрицу. Это не всегда строго необходимо, но выбрано для обеспечения лучшей согласованности с MATLAB.

© 1996–2022 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v6.4.0/Expressions-Involving-Diagonal-Matrices.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API