javascript - 计算矩阵的行列式

标签 javascript arrays algorithm matrix

我正在尝试计算 JS 中矩阵的行列式。我使用了 http://www.sanfoundry.com/java-program-compute-determinant-matrix/ 中的算法但我对最后一个条件失去了理智。我只是不明白。你能帮助我吗?

这就是我的代码现在的样子。在另一个函数中,我创建了一个空的二维数组,然后将其复制到 det 函数。接下来我从 html 中检索值,然后尝试计算矩阵的行列式。前两个案例很简单,但我对最后一个有疑问。我在 JS 中找不到工作示例。

function det() {
  var det = 0;
  var array1 = array.slice();

  for (i = 0; i < array1.length; i++) {

    for (j = 0; j < array1[i].length; j++) {
      array1[i][j] = parseInt(document.getElementById("element" + (i + 1) + (j + 1)).value, 10);
    }

  }

  if (array1.length == 1) {
    det = array1[0][0];
  } else if (array1.length == 2) {
    det = (array1[0][0] * array1[1][1]) - (array1[1][0] * array1[0][1]);
  } else {

  }

}

最佳答案

我可能会建议我的解决方案,基于递归算法,它只需要几行代码,我想,将适合大多数实际应用:

const determinant = m => 
  m.length == 1 ?
  m[0][0] :
  m.length == 2 ? 
  m[0][0]*m[1][1]-m[0][1]*m[1][0] :
  m[0].reduce((r,e,i) => 
    r+(-1)**(i+2)*e*determinant(m.slice(1).map(c => 
      c.filter((_,j) => i != j))),0)

const test1 = [[3]]                      // 3
const test2 = [[3,-2],[7,4]]             // 26
const test3 = [[1,3,7],[2,-1,4],[5,0,2]] // 81

console.log(determinant(test1))
console.log(determinant(test2))
console.log(determinant(test3))
.as-console-wrapper {min-height: 100%}

关于javascript - 计算矩阵的行列式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44474864/

相关文章:

javascript - 我可以阻止 history.popstate 在初始页面加载时触发吗?

javascript - 如何仅使用 Javascript 取消绑定(bind)添加到窗口的滚动事件?

java - 浏览器字段 Cookie 删除

c++ - 我不明白如何在 C++ 中创建和使用动态数组

c - 为什么 {0} 分配有效但 {5} 不适用于数组

javascript - 谷歌地图 v3 像 Pinterest map (移动中心位置和改变标记区域)

c - 释放数组中的结构时双重释放

MySQL 和用户偏好的预定更新?

java - 算法需要帮助

c++ - 事件管理应用的最佳适配时间调度算法