Транспонированная матрица 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=(b⋅aij) определяет скалярное произведение матрицы на число, которое также выполняется поэлементно. Частным случаем скалярного произведения является умножение на -1, которое дает противоположную матрицу -A, обладающую тем свойством, что A+(-A)=0.
Соответственно, можно определить вычитание матриц как сложение с противоположной матрицей: A-B=A+(-B).
Матричное умножение определяется следующим образом. Матрицы A размером n×m и B размером m×p могут быть перемножены, если число столбцов A равно числу строк B. Их произведение C=AB представляет собой матрицу размером n×p, элементы которой определяются уравнением cij=m∑k=1aik⋅bkj. Для умножения матриц размером n×n требуется n3 умножений и столько же сложений.
Умножение матриц ассоциативно. Умножение матриц дистрибутивно относительно сложения.
Матрицей, обратной к данной матрице А размером n×n является матрица размером n×n, обозначаемая как A-1 (если таковая существует), такая что A⋅A-1=A-1⋅A=In.
Часто приходится иметь дело с квадратными матрицами размером n×n. Некоторые из квадратных матриц представляют особый интерес.