MATLAB.Exponenta
MATLAB и Simulink на русском
Технологии разработки и отладки
		сложных технических систем

MATLAB\MATLAB

В.Г.Потемкин "Справочник по MATLAB"
Работа с разреженными матрицами

  В оглавление книги \ К следующему разделу \ К предыдущему разделу

Вспомогательные операции

SPAUGMENT
Формирование расширенной матрицы для метода наименьших квадратов

Синтаксис:

            S = spaugment(A)
            S = spaugment(A, c)

Описание:

Функции S = spaugment(A) и S = spaugment(A, c) формируют разреженную квадратную симметрическую матрицу следующей блочной структуры:

            S = [c*I A; A’ 0].

Такая расширенная матрица используется для минимизации квадратичной формы

           image929.gif (290 bytes) .

Если r = b - Ax выполняет роль невязки, а c - масштабирующий множитель, то решение методом наименьших квадратов сводится к решению следующей системы линейных уравнений:

          image930.gif (421 bytes) .

Если исходная матрица A имеет размер m х n, то расширенная матрица S имеет размер (m + n) х (m + n). В обозначениях системы MATLAB эту систему можно описать так:

          S * [r/c; x] = [b; z],

где z = zeros(n, 1).

Определение оптимального значения для масштабного множителя с основано на вычислении значений min(svd(A)) и norm(r), что требует больших объемов расчетов. Если значение c не указано явно в виде второго параметра, то по умолчанию применяется значение max(abs(A)))/1000. Можно изменить это значение, если воспользоваться функцией spparms и задать другие значения для ключей aug_rel и aug_abs.

Операция решения систем линейных уравнений x = A\b автоматически формирует расширенную матрицу, определяя значение c по умолчанию.

Пример:

Рассмотрим простую систему из трех уравнений с двумя неизвестными.

        x1 + 2x2 = 5;
        3x1 = 6;
        4x2 = 7.

Поскольку эта система небольших размеров, она может быть решена с использованием обычных конструкций системы MATLAB, в данном случае - полных матриц:

         A = [ 1 2; 3 0; 0 4];
         b = [5 6 7]’;
         x = A \ b.

В результате получаем следующее решение по методу наименьших квадратов:

         x =
            1.9592
            1.7041

Подход на основе расширенной матрицы использует функцию spaugment:

          S = spaugment(A, 1),

которая формирует вспомогательную матрицу следующего вида:

         full(S) =  image931.gif (582 bytes) .

В этом примере использовано значение масштабного множителя c = 1 и для удобства чтения распечатана полная матрица S. Даже в этом простом примере более половины элементов матрицы S равны нулю.

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

            y = [b; 0; 0];

в результате решение вычисляется с помощью оператора решения системы линейных уравнений

            z = S \ y,

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

Вычисленное решение имеет вид:

            z =

-0.3673
0.1224
0.1837
1.9592
1.7041

Здесь первые 3 компонента характеризуют вектор невязки r, а последние 2 компонента определяют решение x, которое совпадает с приведенным выше.

Сопутствующие функции: SPPARMS, \.

  В оглавление книги \ К следующему разделу \ К предыдущему разделу

 


Поиск по сайту:

Система Orphus

Яндекс.Метрика