1

我正在尝试使用mathjs 3.8.0中的lusolve函数来求解线性系统。但是,我在解释输入的返回结果时遇到了一些麻烦。

我将根据文档中的示例进行解释:示例源开始

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

[[-1], [-0.5], [-0.25], [-1/3]]在 JavaScript 中。

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

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

4

1 回答 1

0

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

对于您给出的示例,您可以看到它是如何做的:

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

于 2017-01-05T17:05:12.627 回答