无法理解lusolve的工作原理

时间:2017-01-05 16:27:36

标签: javascript mathjs

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

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

directory.currentSession
directory.currentUser

到目前为止,非常好 - 这代表了系统

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
JavaScript中的

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

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

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

1 个答案:

答案 0 :(得分:0)

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

对于您提供的示例,您可以看到这样做:

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