Обработка математики: 100%

Подразделы

Другие разделы

Дата и время

01/04/2025 01:18:08

Авторизация

Имя:
Пароль:
Зарегистрироваться
Восстановить пароль
 

printМатрицы

printОперации над матрицами

Транспонированная матрица AT получается из матрицы A путем обмена местами ее строк и столбцов.

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

Определим сложение матриц следующим образом. Если A и B матрицы размером n×m, то их суммой A+B является матрица C размером n×m, определяемая соотношением cij=aij+bij.


Для разрежённых матриц можно применить слияние упорядоченных последовательностей:

class SparseMatrix {
  int n,m;
  vector<list<pair<int,double>>> data;
public:
  SparseMatrix(int n, int m):n(n),m(m),data(n) {}
  pair<int,int> size()const {return {n,m};}
  double get(int i,int j) const; // получение значения
  double set(int i,int j, double v); // установка значения
  SparseMatrix & SparseMatrix::operator+=(const SparseMatrix& b)
  { if(n!=b.n || m!=b.m) throw runtime_error("несоответствие размеров");
    for(int i=0; i<n; ++i)
    { // слияние за O(q), где q - количество ненулевых элементов в строке (общее количество во всей матрице K=q*n)
      auto it1=data[i].begin();
      auto it2=b.data[i].begin();
      while(it1!=data[i].end() && it2!=b.data[i].end())
      { if(it1->first==it2->first) { it1->second+=it2->second; ++it1; ++it2; }
        else if(it1->first<it2->first) ++it1;
        else { data[i].insert(it1,*it2); ++it2; }
      }
       while(it2!=b.data[i].end()) { data[i].insert(it1,*it2); ++it2; }
    }
   return *this;
  }
};
inline SparseMatrix operator+(SparseMatrix a, const SparseMatrix b) { return a+=b; }

Если b – число, а A – матрица, то bA=(baij) определяет скалярное произведение матрицы на число, которое также выполняется поэлементно. Частным случаем скалярного произведения является умножение на -1, которое дает противоположную матрицу -A, обладающую тем свойством, что A+(-A)=0.

Соответственно, можно определить вычитание матриц как сложение с противоположной матрицей: A-B=A+(-B).


Матричное умножение определяется следующим образом. Матрицы A размером n×m и B размером m×p могут быть перемножены, если число столбцов A равно числу строк B. Их произведение C=AB представляет собой матрицу размером n×p, элементы которой определяются уравнением cij=mk=1aikbkj. Для умножения матриц размером n×n требуется n3 умножений и столько же сложений.

Умножение матриц ассоциативно. Умножение матриц дистрибутивно относительно сложения.

Матрицей, обратной к данной матрице А размером n×n является матрица размером n×n, обозначаемая как A-1 (если таковая существует), такая что AA-1=A-1A=In.


Часто приходится иметь дело с квадратными матрицами размером n×n. Некоторые из квадратных матриц представляют особый интерес.

  1. Диагональная матрица обладает тем свойством, что aij=0 при ij.
  2. Единичная матрица In размером n×n представляет собой диагональную матрицу, все диагональные элементы которой равны 1.
  3. Верхне-треуголъной матрицей U называется матрица, у которой все элементы ниже диагонали равны 0 (uij=0 при i>j).
  4. Нижне-треуголъной матрицей L называется матрица, у которой все элементы выше диагонали равны 0.
  5. Матрица перестановки (permutation matrix) P имеет в каждой строке и столбце ровно по одной единице, а на всех прочих местах располагаются нули.
  6. Симметричная матрица A удовлетворяет условию A=AT.
loading