我正在尝试使用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]]
,与原始输入向量排序一样。
为什么?返回系数的排序如何与输入向量的排序相匹配?
答案 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