我正在尝试使用 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/