Матрицы и векторы

© 2007 Алексей Померанцев 

Содержание 

Введение
1. Базовые сведения
1.1. Матрицы
1.2. Простейшие операции с матрицами
1.3. Умножение матриц
1.4. Квадратные матрицы
1.5. След и определитель
1.6. Векторы
1.7. Простейшие операции с векторами
1.8. Произведения векторов
1.9. Норма вектора
1.10. Угол между векторами
1.11. Векторное представление матрицы
1.12. Линейно зависимые векторы
1.13. Ранг матрицы
1.14. Обратная матрица
1.15. Псевдообратная матрица
1.16. Умножение вектора на матрицу
2. Дополнительная информация
2.1. Системы линейных уравнений
2.2. Билинейные и квадратичные формы
2.3. Положительно определенные матрицы
2.4. Разложение Холецкого
2.5. Полярное разложение
2.6. Собственные векторы и собственные значения
2.7. Собственные значения
2.8. Собственные векторы
2.9. Эквивалентные и подобные матрицы
2.10. Приведение матрицы к диагональному виду
2.11. Разложение по сингулярным значениям
2.12. Линейное пространство
2.13. Базис линейного пространства
2.14. Геометрическая интерпретация
2.15. Множественность базисов
2.16. Подпространство
2.17. Проекция на подпространство
Заключение
 

Введение 

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

Текст разбит на две части названные — "Базовые сведения" и "Дополнительная информация". В первой части изложены положения, минимально необходимые для понимания хемометрики, а во второй части — факты, которые необходимо знать для более глубокого постижения методов многомерного анализа. Изложение иллюстрируется примерами, выполненными в рабочей книге Excel  Matrix.xls, которая сопровождает этот документ. 

Важная информация о работе с файлом Matrix.xls

Ссылки на примеры помещены в текст как объекты Excel. Эти примеры имеют абстрактный характер, они никак не привязаны к задачам аналитической химии. Реальные примеры использования матричной алгебры в хемометрике рассмотрены в других текстах, посвященных разнообразным хемометрическим приложениям.

Большинство измерений, проводимых в аналитической химии, являются не прямыми, а косвенными. Это означает, что в эксперименте вместо значения искомого аналита C (концентрации) получается другая величина x (сигнал), связанная, но не равная C, т.е. x(C) ≠ С. Как правило, вид зависимости x(C) не известен, однако, к счастью, в аналитической химии большинство измерений пропорциональны. Это означает, что при увеличении концентрации С в a раз, сигнал X увеличится на столько же., т.е. x(aC) = a x(C). Кроме того, сигналы еще и аддитивны, так что сигнал от пробы, в которой присутствуют два вещества с концентрациями C1 и C2, будет равен сумме сигналов от каждого компонента, т.е. x(C1 + C2) = x(C1)+ x(C2). Пропорциональность и аддитивность вместе дают линейность. Можно привести много примеров, иллюстрирующих принцип линейности, но достаточно упомянуть два самых ярких примера — хроматографию и спектроскопию. Вторая особенность, присущая эксперименту в аналитической химии — это многоканальность. Современное аналитическое оборудование одновременно измеряет сигналы для многих каналов. Например, измеряется интенсивность пропускания света сразу для нескольких длин волн, т.е. спектр. Поэтому в эксперименте мы имеем дело со множеством сигналов x1, x2,...., xn, характеризующих набор концентраций C1,C2, ..., Cm веществ, присутствующих в изучаемой системе.

Рис. 1 Спектры

Итак, аналитический эксперимент характеризуется линейностью и многомерностью. Поэтому удобно рассматривать экспериментальные данные как векторы и матрицы и манипулировать с ними, используя аппарат матричной алгебры. Плодотворность такого подхода иллюстрирует пример, показанный на Рис. 1, где представлены три спектра, снятые для 200 длин волн от 4000 до 4796 cm−1. Первый (x1) и второй (x2) спектры получены для стандартных образцов, в которых концентрация двух веществ A и B, известны: в первом образце [A] = 0.5, [B] = 0.1, а во втором образце [A] = 0.2, [B] = 0.6. Что можно сказать о новом, неизвестном образце, спектр которого обозначен x3?

Рассмотрим три экспериментальных спектра x1, x2 и x3 как три вектора размерности 200. Средствами линейной алгебры можно легко показать, что x3 = 0.1 x1 +0.3 x2, поэтому в третьем образце очевидно присутствуют только вещества A и B в концентрациях [A] = 0.5×0.1 + 0.2×0.3 = 0.11 и [B] = 0.1×0.1 + 0.6×0.3 = 0.19. 

Другие пособия по хемометрике

Содержание

1. Базовые сведения

1.1 Матрицы

Матрицей называется прямоугольная таблица чисел, например

Рис. 2 Матрица

Матрицы обозначаются заглавными полужирными буквами (A), а их элементы — соответствующими строчными буквами с индексами, т.е. aij. Первый индекс нумерует строки, а второй — столбцы. В хемометрике принято обозначать максимальное значение индекса той же буквой, что и сам индекс, но заглавной. Поэтому матрицу A можно также записать как { aij, i = 1,..., I; j = 1,..., J}. Для приведенной в примере матрицы I = 4, J = 3 и a23 = −7.5.

Пара чисел I и J называется размерностью матрицы и обознается как I×J. Примером матрицы в хемометрике может служить набор спектров, полученный для I образцов на J длинах волн.

Содержание

1.2. Простейшие операции с матрицами

Матрицы можно умножать на числа. При этом каждый элемент умножается на это число. Например —

Рис. 3 Умножение матрицы на число

Две матрицы одинаковой размерности можно поэлементно складывать и вычитать. Например,

Рис. 4 Сложение матриц

В результате умножения на число и сложения получается матрица той же размерности.

Нулевой матрицей называется матрица, состоящая из нулей. Она обозначается O. Очевидно, что A+O = A, AA = O и 0A = O.

Матрицу можно транспонировать. При этой операции матрица переворачивается, т.е. строки и столбцы меняются местами. Транспонирование обозначается штрихом, A' или индексом At. Таким образом, если A = {aij, i = 1,..., I; j = 1,...,J}, то At = {aji, j = 1,...,J; i = 1,..., I}. Например

Рис. 5 Транспонирование матрицы

Очевидно, что (At)t = A, (A+B)t = At+Bt.

Содержание

1.3. Умножение матриц

Матрицы можно перемножать, но только в том случае, когда они имеют соответствующие размерности. Почему это так, будет ясно из определения. Произведением матрицы A, размерностью I×K, и матрицы B, размерностью K×J, называется матрица C, размерностью I×J, элементами которой являются числа

Таким образом для произведения AB необходимо, чтобы число столбцов в левой матрице A было равно числу строк в правой матрице B. Пример произведения матриц —

Рис.6 Произведение матриц

Правило перемножения матриц можно сформулировать так. Для того, чтобы найти элемент матрицы C, стоящий на пересечении i-ой строки и j-ого столбца (cij) надо поэлементно перемножить i-ую строку первой матрицы A на j-ый столбец второй матрицы B и сложить все результаты. Так в показанном примере, элемент из третьей строки и второго столбца, получается как сумма поэлементных произведений третьей строки A и второго столбца B

Рис.7 Элемент произведения матриц

Произведение матриц зависит от порядка, т.е. ABBA, хотя бы по соображениям размерности. Говорят, что оно некоммутативно. Однако произведение матриц ассоциативно. Это означает, что ABC = (AB)C = A(BC). Кроме того, оно еще и дистрибутивно, т.е. A(B+C) = AB+AC. Очевидно, что AO = O.

Содержание

1.4. Квадратные матрицы

Если число столбцов матрицы равно числу ее строк (I = J = N), то такая матрица называется квадратной. В этом разделе мы будем рассматривать только такие матрицы. Среди этих матриц можно выделить матрицы, обладающие особыми свойствами.

Единичной матрицей (обозначается I, а иногда E) называется матрица, у которой все элементы равны нулю, за исключением диагональных, которые равны 1, т.е.

Очевидно AI = IA = A.

Матрица называется диагональной, если все ее элементы, кроме диагональных (aii) равны нулю. Например

Рис. 8 Диагональная матрица

Матрица A называется верхней треугольной, если все ее элементы, лежащие ниже диагонали, равны нулю, т.е. aij = 0, при i>j. Например

Рис. 9 Верхняя треугольная матрица

Аналогично определяется и нижняя треугольная матрица.

Матрица A называется симметричной, если At = A. Иными словами aij = aji. Например

Рис. 10 Симметричная матрица

Матрица A называется ортогональной, если 

AtA = AAt = I.

Матрица называется нормальной если

  AtA = AAt.

Содержание

1.5. След и определитель

Следом квадратной матрицы A (обозначается Tr(A) или Sp(A)) называется сумма ее диагональных элементов,

Например,

Рис. 11 След матрицы 

Очевидно, что

Sp(α A) = α Sp(A) и

Sp(A+B) = Sp(A)+ Sp(B).

Можно показать, что

Sp(A) = Sp(At), Sp(I) = N,

а также, что

Sp(AB) = Sp(BA).

Другой важной характеристикой квадратной матрицы является ее определитель (обозначается det(A)). Определение определителя в общем случае довольно сложно, поэтому мы начнем с простейшего варианта — матрицы A размерностью (2×2). Тогда

Для матрицы (3×3) определитель будет равен

В случае матрицы (N×N) определитель вычисляется как сумма 1·2·3· ... ·N = N! слагаемых, каждый из которых равен 

Индексы k1, k2,..., kN определяются как всевозможные упорядоченные перестановки r чисел в наборе (1, 2, ... , N). Вычисление определителя матрицы — это сложная процедура, которую на практике осуществляется с помощью специальных программ. Например,

Рис. 12 Определитель матрицы

Отметим только очевидные свойства:

det(I) = 1, det(A) = det(At),

det(AB) = det(A)det(B).

Содержание

1.6. Векторы

Если матрица состоит только из одного столбца (J = 1), то такой объект называется вектором. Точнее говоря, вектором-столбцом. Например

Можно рассматривать и матрицы, состоящие из одной строки, например

Этот объект также является вектором, но вектором-строкой. При анализе данных важно понимать, с какими векторами мы имеем дело — со столбцами или строками. Так спектр, снятый для одного образца можно рассматривать как вектор-строку. Тогда набор спектральных интенсивностей на какой-то длине волны для всех образцов нужно трактовать как вектор-столбец.

Размерностью вектора называется число его элементов.

Ясно, что всякий вектор-столбец можно превратить в вектор-строку транспонированием, т.е.

В тех случаях, когда форма вектора специально не оговаривается, а просто говорится вектор, то имеют в виду вектор-столбец. Мы тоже будем придерживаться этого правила. Вектор обозначается строчной прямой полужирной буквой. Нулевым вектором называется вектор, все элементы которого раны нулю. Он обозначается 0.

Содержание

1.7. Простейшие операции с векторами

Векторы можно складывать и умножать на числа так же, как это делается с матрицами. Например,

Рис. 13 Операции с векторами

Два вектора x и y называются колинеарными, если существует такое число α, что 

αx = y.

Содержание

1.8. Произведения векторов

Два вектора одинаковой размерности N можно перемножить. Пусть имеются два вектора x = (x1, x2,...,xN)t и y = (y1, y2,..., yN)t. Руководствуясь правилом перемножения "строка на столбец", мы можем составить из них два произведения: xty и xyt. Первое произведение

называется скалярным или внутренним. Его результат — это число. Для него также используется обозначение (x,y) = xty. Например,

Рис. 14 Внутреннее (скалярное) произведение

Второе произведение

называется внешним. Его результат — это матрица размерности (N×N). Например,

Рис. 15 Внешнее произведение

Векторы, скалярное произведение которых равно нулю, называются ортогональными.

Содержание

1.9. Норма вектора

Скалярное произведение вектора самого на себя называется скалярным квадратом. Эта величина

определяет квадрат длины вектора x. Для обозначения длины (называемой также нормой вектора) используется обозначение

Например,

Рис. 16 Норма вектора

Вектор единичной длины (||x|| = 1) называется нормированным. Ненулевой вектор (x0) можно нормировать, разделив его на длину, т.е. x = ||x|| (x/||x||) = ||x|| e. Здесь e = x/||x|| — нормированный вектор.

Векторы называются ортонормированными, если все они нормированы и попарно ортогональны.

Содержание

1.10. Угол между векторами

Скалярное произведение определяет и угол φ между двумя векторами x и y

Если вектора ортогональны, то cosφ = 0 и φ = π/2, а если они колинеарны, то cosφ = 1 и φ = 0.

Содержание 

1.11. Векторное представление матрицы

Каждую матрицу A размера I×J можно представить как набор векторов

Здесь каждый вектор aj является j-ым столбцом, а вектор-строка bi является i-ой строкой матрицы A

Содержание 

1.12. Линейно зависимые векторы

Векторы одинаковой размерности (N) можно складывать и умножать на число, также как матрицы. В результате получится вектор той же размерности. Пусть имеется несколько векторов одной размерности x1, x2,...,xK и столько же чисел α α1, α2,...,αK. Вектор 

y = α1x1+ α2x2+...+ αKxK  

называется линейной комбинацией векторов xk.

Если существуют такие ненулевые числа αk ≠ 0, k = 1,..., K, что y = 0, то такой набор векторов xk называется линейно зависимым. В противном случае векторы называются линейно независимыми. Например, векторы x1 = (2, 2)t и x2 = (−1, −1)t линейно зависимы, т.к. x1 +2x2 = 0

Содержание 

1.13. Ранг матрицы

Рассмотрим набор из K векторов x1, x2,...,xK размерности N. Рангом этой системы векторов называется максимальное число линейно-независимых векторов. Например в наборе

имеются только два линейно независимых вектора, например x1 и x2, поэтому ее ранг равен 2. 

Очевидно, что если векторов в наборе больше, чем их размерность (K>N), то они обязательно линейно зависимы. 

Рангом матрицы (обозначается rank(A)) называется ранг системы векторов, из которых она состоит. Хотя любую матрицу можно представить двумя способами (векторы столбцы или строки), это не влияет на величину ранга, т.к. 

rank(A) = rank(At).

Содержание

1.14. Обратная матрица

Квадратная матрица A называется невырожденной, если она имеет единственную обратную матрицу A-1, определяемую условиями

  AA−1 = A−1A = I.

Обратная матрица существует не для всех матриц. Необходимым и достаточным условием невырожденности является 

det(A) ≠ 0 или rank(A) = N.

Обращение матрицы — это сложная процедура, для выполнения которой существуют специальные программы. Например,

Рис. 17 Обращение матрицы

Приведем формулы для простейшего случая — матрицы 2×2

Если матрицы A и B невырождены, то 

(AB)−1 = B−1A−1.

Содержание

1.15. Псевдообратная матрица

Если матрица A вырождена и обратная матрица не существует, то в некоторых случаях можно использовать псевдообратную матрицу, которая определяется как такая матрица A+, что

AA+A = A.

Псевдобратная матрица — не единственная и ее вид зависит от способа построения. Например для прямоугольной матрицы можно использовать метод Мура-Пенроуза.

Если число столбцов меньше числа строк, то 

A+=(AtA)−1At

Например, 

 

Рис. 17a Псевдообращение матрицы

Если же число столбцов больше числа строк, то

A+=At(AAt)−1

Содержание

1.16. Умножение вектора на матрицу

Вектор x можно умножать на матрицу A подходящей размерности. При этом вектор-столбец умножается справа Ax, а вектор строка — слева xtA. Если размерность вектора J, а размерность матрицы I×J то в результате получится вектор размерности I. Например,

Рис. 18 Умножение вектора на матрицу

Если матрица A — квадратная (I×I), то вектор y = Ax имеет ту же размерность, что и x. Очевидно, что 

A1x1 + α2x2) = α1Ax1 + α2Ax2

Поэтому матрицы можно рассматривать как линейные преобразования векторов. В частности Ix = x, Ox = 0.

Содержание

2. Дополнительная информация

2.1. Системы линейных уравнений

Пусть A — матрица размером I×J, а b — вектор размерности J. Рассмотрим уравнение 

Ax = b  

относительно вектора x, размерности I. По сути — это система из I линейных уравнений с J неизвестными x1,...,xJ. Решение существует в том, и только в том случае, когда

rank(A) = rank(B) = R

где B — это расширенная матрица размерности I×(J+1), состоящая из матрицы A, дополненной столбцом b, B = (A b). В противном случае уравнения несовместны.

Если R = I = J, то решение единственно 

x = A−1b

Если R < I, то существует множество различных решений, которые можно выразить через линейную комбинацию JR векторов. Система однородных уравнений Ax = 0 с квадратной матрицей A (N×N) имеет нетривиальное решение (x0) тогда и только тогда, когда det(A) = 0. Если R = rank(A)<N, то существуют NR линейно независимых решений. 

Содержание

2.2. Билинейные и квадратичные формы

Если A — это квадратная матрица , а x и y — вектора соответствующей размерности, то скалярное произведение вида xtAy называется билинейной формой , определяемой матрицей A. При x = y выражение xtAx называется квадратичной формой.

Содержание

2.3. Положительно определенные матрицы

Квадратная матрица A называется положительно определенной, если для любого ненулевого вектора x0

xtAx > 0. 

Аналогично определяются отрицательно (xtAx < 0), неотрицательно (xtAx ≥ 0) и неположительно (xtAx ≤ 0) определенные матрицы.

Содержание

2.4. Разложение Холецкого

Если симметричная матрица A положительно определена, то существует единственная треугольная матрица U с положительными элементами, для которой 

A = UtU.

Например,

Рис. 19 Разложение Холецкого

Содержание

2.5. Полярное разложение

Пусть A — это невырожденная квадратная матрица размерности N×N. Тогда существует однозначное полярное представление 

A = SR, 

где S — это неотрицательная симметричная матрица, а R — это ортогональная матрица. Матрицы S и R могут быть определены явно: 

S2 = AAt или S = (AAt)½ и R = S−1A = (AAt)−½A

Например,

Рис. 20 Полярное разложение

Если матрица A вырождена, то разложение не единственно — а именно: S по-прежнему одна, а вот R может быть много. Полярное разложение представляет матрицу A как комбинацию сжатия/растяжения S и поворота R.

Содержание

2.6. Собственные векторы и собственные значения

Пусть A — это квадратная матрица. Вектор v называется собственным вектором матрицы A, если 

Av = λv

где число λ называется собственным значением матрицы A. Таким образом преобразование, которое выполняет матрица A над вектором v, сводится к простому растяжению или сжатию с коэффициентом λ. Собственный вектор определяется с точностью до умножения на константу α ≠ 0, т.е. если v — собственный вектор, то и αv — тоже собственный вектор. 

Содержание

2.7. Собственные значения

У матрицы A , размерностью (N×N) не может быть больше чем N собственных значений. Они удовлетворяют характеристическому уравнению  

det(A − λI) = 0, 

являющемуся алгебраическим уравнением N-го порядка. В частности, для матрицы 2×2 характеристическое уравнение имеет вид

Например,

Рис. 21 Собственные значения

Набор собственных значений λ1,..., λN матрицы A называется спектром A

Спектр обладает разнообразными свойствами. В частности

 det(A) = λ1×...×λN,                Sp(A) = λ1+...+λN.

Собственные значения произвольной матрицы могут быть комплексными числами, однако если матрица симметричная (At = A), то ее собственные значения вещественны. 

Содержание

2.8. Собственные векторы

У матрицы A, размерностью (N×N) не может быть больше чем N собственных векторов, каждый из которых соответствует своему собственному значению. Для определения собственного вектора vn нужно решить систему однородных уравнений 

(A − λnI) vn = 0

Она имеет нетривиальное решение, поскольку det(A − λnI) = 0. 

Например,

Рис. 22 Собственные вектора

Собственные вектора симметричной матрицы ортогональны.

Содержание

2.9. Эквивалентные и подобные матрицы

Две прямоугольные матрицы A и B одной размерности I×J эквивалентны, если существуют такие квадратные матрицы S, размерности I×I, и T, размерности J×J, что 

B = SAT

Эквивалентные матрицы имею один и тот же ранг.

Две прямоугольные матрицы A и B одной размерности N×N подобны, если существует такая невырожденная матрица T, что 

B = T−1AT

Матрица T называется преобразованием подобия.

Подобные матрицы имеют один и тот же ранг, след, определитель и спектр. 

Содержание

2.10. Приведение матрицы к диагональному виду

Нормальную (в частности симметричную) матрицу A можно привести к диагональному виду преобразованием подобия — 

A = TΛT−1

Здесь Λ = diag(λ1,..., λN) — это диагональная матрица, элементами которой являются собственные значения матрицы A, а T — это матрица, составленная из соответствующих собственных векторов матрицы A, т.е. T = (v1,...,vN). 

Например,

Рис. 23 Приведение к диагональному виду

Содержание

2.11. Разложение по сингулярным значениям (SVD)

Пусть имеется прямоугольная матрица A размерностью I×J ранга R (IJR). Ее можно разложить в произведение трех матриц PR (I×R), DR (R×R) и QR (J×R) — 

так, чтобы — 

.

Здесь PR — матрица, образованная R ортонормированными собственными векторами pr матрицы AAt, соответствующим R наибольшим собственным значениям λr;

AAtpr = λrpr;

QR — матрица, образованная R ортонормированными собственными векторами qr матрицы AtA;

AtAqr = λrqr.

DR = diag (σ1,...,σR) — положительно определенная диагональная матрица , элементами которой являются σ1≥... ≥σR≥0 — сингулярные значения матрицы A, равные квадратным корням из собственных значений матрицы AtA — 

Пример,

Рис. 24 SVD разложение

Дополняя матрицы PR и QR ортонормированными столбцами, а матрицу DR нулевыми значениями, можно сконструировать матрицы P (I×J), D (J×J) и Q (J×J) такие, что

Об использовании SVD рассказано в пособиях MatLab. Руководство для начинающих и Метод главных компонент (PCA)

Содержание

2.12. Линейное пространство

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

Содержание

2.13. Базис линейного пространства

Любой набор из N линейно независимых векторов называется базисом в пространстве RN . Простейший пример базиса — это набор векторов

в каждом из которых только один элемент равен 1, а остальные равны нулю. Тогда любой вектор x = (x1, x2,...,xN)t может быть представлен как линейная комбинация x = x1e1+ x2e2+...+xNeN базисных векторов. 

Базис, составленный из попарно ортогональных векторов, называется ортогональным, а если базисные вектора еще и нормированы, то этот базис называется ортонормированным.

Содержание

2.14. Геометрическая интерпретация

Линейному пространству можно дать удобную геометрическую интерпретацию. Представим себе N-мерное пространство, в котором базисные вектора задают направления осей координат. Тогда произвольный вектор x = (x1, x2,...,xN)t можно изобразить точкой в этом пространстве с координатами (x1, x2,...,xN).

Рис. 25 Координатное пространство

Содержание  

2.15. Множественность базисов

В линейном пространстве могут быть неограниченное число базисов. Так, в пространстве R3 помимо обычного ортонормированного базиса

можно установить и другой ортонормированный базис, например

Каждый базис можно представить матрицей B = (b1,...,bN), составленной из базисных векторов. Переход от одного базиса к другому осуществляется с помощью невырожденной квадратной матрицы T, т.е. B2 = TB1.

Содержание

2.16. Подпространство

Пусть имеется набор из K линейно независимых векторов x1, x2,...,xK в пространстве RN. Рассмотрим все возможные линейные комбинации этих векторов

x = α1x1+ α2x2+...+ αKxK

О получившимся множестве Q говорят, что оно является линейной оболочкой или что оно натянуто на векторы x1, x2,...,xK. По определению линейного пространства это множество Q само является линейным пространством размерности K. При этом оно принадлежит пространству RN, поэтому Q называется линейным подпространством RK в пространстве RN

Содержание

2.17. Проекция на подпространство

Рассмотрим подпространство RK, натянутое на векторы X = (x1, x2,...,xK) в пространстве RN. Матрица базиса X имеет размерность (N×K). Любой вектор y из RN может быть спроецирован на подпространство RK, т.е. представлен в виде  

y = y|| + y

где вектор y|| принадлежит RK, а вектор y ортогонален y||

Рис. 26 Проекция на подпространство

Проекцию y|| можно представить как результат действия проекционной матрицы P

y|| = Py

Проекционная матрица определяется как

Пример.

Рис. 27 Проекционное разложение

Содержание

Заключение

Матричные методы активно используются при анализе данных, в том числе и хемометрическими методами. 

Примеры приведены в пособиях

 

Содержание