javascript - 无法理解 lusolve 的工作原理

标签 javascript mathjs

我正在尝试使用 lusolve function来自mathjs 3.8.0求解线性系统。但是,我在解释相对于输入的返回结果时遇到一些困难。

我将根据example from the docs进行解释:示例来源开始

var m = [[1, 0, 0, 0], [0, 2, 0, 0], [0, 0, 3, 0], [0, 0, 0, 4]];

var x = math.lusolve(m, [-1, -1, -1, -1]);        // x = [[-1], [-0.5], [-1/3], [-0.25]]

到目前为止,一切顺利 - 这代表了系统

1a          = -1
   2b       = -1
      3c    = -1
         4d = -1

解决方案显然是

a = -1
b = -0.5
c = -1/3
d = -0.25

如原始示例的注释中所述。 实际返回值是一个数组,其值的顺序与输入向量相同,即 [[-1], [-0.5], [-1/3], [-0.25]] .

但是,现在我尝试切换到输入向量:

var m = [[1, 0, 0, 0], [0, 2, 0, 0], [0, 0, 0, 4], [0, 0, 3, 0]];

var x = math.lusolve(m, [-1, -1, -1, -1]);

我认为这应该代表系统

1a          = -1
   2b       = -1
         3d = -1
      4c    = -1

如果是这样,解决方案应该是

a = -1
b = -0.5
c = -0.25
d = -1/3

或 JavaScript 中的 [[-1], [-0.5], [-0.25], [-1/3]]

但是,此输入的函数的实际返回值仍然是 [[-1],[-0.5],[-1/3 ],[-0.25]],与原始输入向量排序相同。

这是为什么呢?返回系数的顺序如何与输入向量的顺序匹配?

最佳答案

LU decomposition方法返回上三 Angular 矩阵和下三 Angular 矩阵,然后可用于求解线性系统。这意味着矩阵将被重新排序以具有这种形状(对 Angular 线下方及其上方的零)。

对于您给出的示例,您可以看到它的样子:

math.lup([[1, 0, 0, 0], [0, 2, 0, 0], [0, 0, 3, 0], [0, 0, 0, 4] ])

参见math.lusolve获取更多具体信息的来源。

另请注意矩阵如何映射到向量

http://mathjs.org/docs/datatypes/matrices.html#creation

在那里您将看到一个示例矩阵

math.matrix([[0, 1], [2, 3], [4, 5]]);/* 大小为 [3, 2] 的矩阵 */

这意味着每个内部向量是一行而不是列。即:

[[0, 1], [2, 3], [4, 5]]

写为

0 1

2 3

4 5

关于javascript - 无法理解 lusolve 的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41489942/

相关文章:

javascript - 状态 vs 转换 vs 动画中的 Angular 2 动画样式函数

javascript - 使用 React 和 Redux 的分形项目结构 - 优点/缺点

javascript - AngularJS,ng-repeat + 过滤器从 Controller 调用

javascript - JavaScript 锯齿状多维数组中的逐元素算术运算

javascript - mathjs 评估错误 : (intermediate value)(intermediate value)(intermediate value) is not a function

mathjs - 无法解析 'mathjs/number'

javascript - 如何将 MathJax 和 Math.js 连接到 slider

javascript - 在for()循环中创建多个Smoothie.js图表

javascript - 如何在 TypeScript 中安全地解构 JavaScript 对象

javascript - 在 Javascript 中从 math.matrix 获取元素