当前位置:首页 > 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实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(func…

js实现选题

js实现选题

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

js实现自举

js实现自举

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

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue…