当前位置:首页 > 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;
}

矩阵转置

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

js 实现矩阵

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

矩阵求逆

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

js 实现矩阵

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]

可视化输出

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

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

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

相关文章

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback) {…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现抽奖

js实现抽奖

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

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…