Транспонирование матрицы — это операция, при которой строки матрицы становятся столбцами, а столбцы – строками.
Таким образом, транспонированная матрица получается путем замены элементов матрицы их соответствующими элементами на пересечении строки и столбца:
{\displaystyle{ {\begin{vmatrix}a_{11} &a_{12} & \cdots &a_{1m}\\a_{21} &a_{22} & \cdots &a_{2m}\\ \vdots & \vdots & \ddots & \vdots\\a_{n1} &a_{n2} & \cdots &a_{nm}\end{vmatrix}}^T \ = \ {\begin{vmatrix}a_{11} &a_{12} & \cdots &a_{1n}\\a_{21} &a_{22} & \cdots &a_{2n}\\ \vdots & \vdots & \ddots & \vdots\\a_{m1} &a_{m2} & \cdots &a_{mn}\end{vmatrix}} }}
Свойства транспонированной матрицы
Транспонированная дважды матрица А равна исходной матрице А.
{\displaystyle (A^{T})^{T}=A}
Транспонированная сумма матриц равна сумме транспонированных матриц.
{\displaystyle (A+B)^{T}=A^{T}+B^{T}}
Транспонированное произведение матриц равно обратному порядку произведения транспонированных матриц.
{\displaystyle (AB)^{T}=B^{T}A^{T}}
Если исходную матрицу можно представить произведением скаляра на остаточную матрицу, то тот же самый скаляр можно умножить на транспонированную остаточную матрицу.
{\displaystyle (\lambda A)^{T}=\lambda A^{T}}
Определитель транспонированной матрицы совпадает с определителем исходной матрицы.
{\displaystyle \Delta A=\Delta A^{T}}
Реализация на C++
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
// Ввод элементов матрицы
double** Input(int rows, int cols) {
double** p;
p = (double**)malloc(rows * sizeof(double*));
for (int i = 0; i < rows; i++) {
p[i] = (double*)malloc(cols * sizeof(double));
for (int j = 0; j < cols; j++)
{
printf("mas[%d][%d]= ", i, j);
scanf("%lf", &p[i][j]);
}
}
return p;
}
// Вывод элементов матрицы
void Output(double** mas, int rows, int cols) {
int i, j;
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++)
printf("%8.4lf ", mas[i][j]);
printf("\n");
}
}
// Освобождение памяти матрицы
void Free(double** mas, int rows, int cols)
{
for (int i = 0; i < rows; i++)
free(mas[i]);
free(mas);
}
// Транспонирование матрицы
double** Transpone(double** mas, int rows, int cols)
{
double** rez;
rez = (double**)malloc(cols * sizeof(double*));
for (int i = 0; i < cols; i++)
{
rez[i] = (double*)malloc(rows * sizeof(double));
for (int j = 0; j < rows; j++)
rez[i][j] = mas[j][i];
}
return rez;
}
// Основная функция
int main()
{
int rows, cols; // количество строк и столбцов
double** mas;
system("chcp 1251");
system("cls");
printf("Введите количество строк: ");
scanf("%d", &rows);
printf("Введите количество столбцов: ");
scanf("%d", &cols);
mas = Input(rows, cols);
printf("Исходная матрица:\n");
Output(mas, rows, cols); // вывод исходного массива
double** tr = Transpone(mas, rows, cols);
printf("\nТранспонированная матрица:\n");
Output(tr, cols, rows); // вывод транспонированной матрицы
Free(tr, cols, rows);
Free(mas, rows, cols);
getchar(); getchar();
return 0;
}
Результат выполнения