Транспонирование матрицы Вычисление + код

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

Транспонирование матрицы — это операция, при которой строки матрицы становятся столбцами, а столбцы – строками.

Таким образом, транспонированная матрица получается путем замены элементов матрицы их соответствующими элементами на пересечении строки и столбца:

{\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++

1
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;
}

Результат выполнения

Результат транспонирования матрицы

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх