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

MATLAB\MATLAB

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

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

Элементарные разреженные матрицы

SPDIAGS
Формирование диагоналей разреженной матрицы

Синтаксис:

             [B, d] = spdiags(A)
             B = spdiags(A, d)
             A = spdiags(B, d, A)
             A = spdiags(B, d, m, n)

Описание:

Функция spdiags расширяет возможности встроенной функции diag и позволяет работать с различными комбинациями следующих трех матриц, которые могут быть как входами, так и выходами функции spdiags:

A - матрица размера m х n, как правило (но не обязательно), разреженная с ненулевыми элементами на p диагоналях;

В - матрица размера min(m, n) х p, как правило (но не обязательно), полная, столбцы которой являются диагоналями A;

d - вектор длины p, целочисленные элементы которого определяют номера ненулевых диагоналей A (верхние диагонали нумеруются положительными числами, нижние - отрицательными).

Грубо говоря, матрицы A, B и вектор d связаны друг с другом следу­ющим образом:

            for k = 1:p
                 B(:, k) = diag(A, d(k))
            end

Функция spdiags определяет следующие 4 операции в зависимости от количества входных аргументов:

  • выделить все ненулевые диагонали:
              [B, d] = spdiags(A);
  • выделить указанные диагонали:
              B = spdiags(A);
  • заменить указанные диагонали матрицы A:
              A = spdiags(B, d, A);
  • сформировать разреженную матрицу размера m х n по известным диагоналям:
              A = spdiags(B, d, m, n);

Пример:

Сформировать трехдиагональную разреженную матрицу для разностного оператора 2-го порядка, заданного на сетке из n узлов.

              n =5 ;
              e = ones(n, 1);
              A = spdiags([e -2*e e], -1:1, n, n)

Теперь из нее можно сформировать тестовую матрицу Уилкинсона wilkinson(n), изменяя элементы главной диагонали:

              col = (abs(-(n-1)/2:(n-1)/2))';
              A = spdiags(col, 0, A)

В заключение выделим ненулевые диагонали:

              B = spdiags(A)

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

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

 


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

Система Orphus

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