当前位置:首页 > JavaScript

js 实现矩阵

2026-02-01 09:43:56JavaScript

矩阵的定义与创建

在JavaScript中,矩阵通常以二维数组的形式表示。每个子数组代表矩阵的一行,子数组中的元素代表该行的列值。

// 创建一个2x3的矩阵
const matrix = [
  [1, 2, 3],
  [4, 5, 6]
];

矩阵的基本操作

矩阵加法 两个相同维度的矩阵可以通过逐元素相加实现加法。

function addMatrices(a, b) {
  return a.map((row, i) => row.map((val, j) => val + b[i][j]));
}

矩阵乘法 矩阵乘法遵循线性代数规则,第一个矩阵的列数必须等于第二个矩阵的行数。

function multiplyMatrices(a, b) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = [];
    for (let j = 0; j < b[0].length; j++) {
      let sum = 0;
      for (let k = 0; k < a[0].length; k++) {
        sum += a[i][k] * b[k][j];
      }
      result[i][j] = sum;
    }
  }
  return result;
}

矩阵转置

转置操作将矩阵的行列互换。

function transpose(matrix) {
  return matrix[0].map((_, i) => matrix.map(row => row[i]));
}

矩阵行列式计算

行列式是方阵的一个标量值,用于判断矩阵是否可逆。

function determinant(matrix) {
  if (matrix.length === 1) return matrix[0][0];
  if (matrix.length === 2) {
    return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
  }
  let det = 0;
  for (let i = 0; i < matrix[0].length; i++) {
    const minor = matrix.slice(1).map(row => row.filter((_, j) => j !== i));
    det += matrix[0][i] * Math.pow(-1, i) * determinant(minor);
  }
  return det;
}

矩阵求逆

可逆矩阵的逆矩阵满足与原矩阵相乘为单位矩阵的条件。

function inverse(matrix) {
  const det = determinant(matrix);
  if (det === 0) throw new Error('Matrix is not invertible');

  const adjugate = [];
  for (let i = 0; i < matrix.length; i++) {
    adjugate[i] = [];
    for (let j = 0; j < matrix.length; j++) {
      const minor = matrix.filter((_, k) => k !== i)
                         .map(row => row.filter((_, l) => l !== j));
      adjugate[i][j] = Math.pow(-1, i + j) * determinant(minor);
    }
  }
  const adjugateT = transpose(adjugate);
  return adjugateT.map(row => row.map(val => val / det));
}

使用库简化操作

对于复杂的矩阵运算,可以使用专门的数学库如math.jsnumeric.js

// 使用math.js示例
const math = require('mathjs');
const m = math.matrix([[1, 2], [3, 4]]);
console.log(math.inv(m)); // 输出逆矩阵

性能优化建议

大型矩阵运算可能消耗大量内存和计算资源。使用TypedArray(如Float64Array)替代普通数组可以提升性能。

// 使用TypedArray创建矩阵
const rows = 1000, cols = 1000;
const matrix = new Float64Array(rows * cols);
// 访问第i行第j列:matrix[i * cols + j]

可视化输出

将矩阵格式化输出为可读字符串。

js 实现矩阵

function matrixToString(matrix) {
  return matrix.map(row => row.join('\t')).join('\n');
}
console.log(matrixToString([[1, 2], [3, 4]]));

标签: 矩阵js
分享给朋友:

相关文章

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似:…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…