Освоение операций с квадратной матрицей в TypeScript: подробное руководство

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

  1. Создание квадратной матрицы.
    Для начала давайте научимся создавать квадратную матрицу в TypeScript. Мы можем представить квадратную матрицу как двумерный массив, где каждая строка представляет собой подмассив. Вот пример:
const matrix: number[][] = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];
  1. Сложение матрицы.
    Для добавления двух квадратных матриц необходимо добавить соответствующие элементы из каждой матрицы. Вот пример сложения матрицы в TypeScript:
function addMatrices(matrixA: number[][], matrixB: number[][]): number[][] {
  const result: number[][] = [];
  for (let i = 0; i < matrixA.length; i++) {
    const row: number[] = [];
    for (let j = 0; j < matrixA[i].length; j++) {
      row.push(matrixA[i][j] + matrixB[i][j]);
    }
    result.push(row);
  }
  return result;
}
  1. Умножение матриц.
    Умножение матриц — это фундаментальная операция. В TypeScript мы можем выполнять умножение матриц, используя вложенные циклы. Вот пример:
function multiplyMatrices(matrixA: number[][], matrixB: number[][]): number[][] {
  const result: number[][] = [];
  for (let i = 0; i < matrixA.length; i++) {
    const row: number[] = [];
    for (let j = 0; j < matrixB[0].length; j++) {
      let sum = 0;
      for (let k = 0; k < matrixB.length; k++) {
        sum += matrixA[i][k] * matrixB[k][j];
      }
      row.push(sum);
    }
    result.push(row);
  }
  return result;
}
  1. Транспонирование матрицы.
    Чтобы получить транспонирование квадратной матрицы (т. е. поменять местами строки и столбцы), мы можем использовать следующий код TypeScript:
function transposeMatrix(matrix: number[][]): number[][] {
  const result: number[][] = [];
  for (let i = 0; i < matrix.length; i++) {
    const row: number[] = [];
    for (let j = 0; j < matrix[i].length; j++) {
      row.push(matrix[j][i]);
    }
    result.push(row);
  }
  return result;
}
  1. Вычисление определителя:
    Определитель — это скалярное значение, связанное с квадратной матрицей. TypeScript предоставляет различные подходы для вычисления определителя, такие как разложение Лапласа или использование LU-разложения. Вот пример использования метода разложения Лапласа:
function calculateDeterminant(matrix: number[][]): number {
  if (matrix.length === 1) {
    return matrix[0][0];
  }
  let determinant = 0;
  for (let i = 0; i < matrix.length; i++) {
    determinant += matrix[0][i] * cofactor(matrix, 0, i);
  }
  return determinant;
}
function cofactor(matrix: number[][], row: number, col: number): number {
  return Math.pow(-1, row + col) * calculateDeterminant(minor(matrix, row, col));
}
function minor(matrix: number[][], row: number, col: number): number[][] {
  const result: number[][] = [];
  for (let i = 0; i < matrix.length; i++) {
    if (i !== row) {
      const newRow: number[] = [];
      for (let j = 0; j < matrix[i].length; j++) {
        if (j !== col) {
          newRow.push(matrix[i][j]);
        }
      }
      result.push(newRow);
    }
  }
  return result;
}

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