无法理解 lusolve 的工作原理

Trouble understanding how lusolve works

我正在尝试使用 lusolve function from mathjs 3.8.0 求解线性系统。但是,我在解释关于输入的 returned 结果时遇到了一些麻烦。

我将根据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

如原始示例的评论中所述。 实际的 return 值是一个数组,其值与输入向量的顺序相同,即 [[-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

[[-1], [-0.5], [-0.25], [-1/3]] 在 JavaScript.

然而,这个输入函数的实际return值是仍然是[[-1],[-0.5],[-1/3],[-0.25]],像使用原始输入向量排序。

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

LU decomposition 方法 returns 上三角矩阵和下三角矩阵可以用来求解线性系统。这意味着矩阵将被重新排序以具有此形状(对角线下方及上方为零)。

对于您给出的示例,您可以看到这样做的效果:

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]]); /* Matrix of size [3, 2] */

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

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

写成

0 1

2 3

4 5