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/v5.2.0/Expressions-Involving-Diagonal-Matrices.html