【发布时间】:2017-01-05 16:27:36
【问题描述】:
我正在尝试使用来自mathjs 3.8.0 的lusolve function 来求解线性系统。但是,我在解释输入的返回结果时遇到了一些麻烦。
我将根据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
或 [[-1], [-0.5], [-0.25], [-1/3]] 在 JavaScript 中。
但是,此输入的函数的实际返回值仍然[[-1],[-0.5],[-1/3],[-0.25]],就像原始输入向量排序一样。
这是为什么呢?返回系数的排序与输入向量的排序如何匹配?
【问题讨论】:
-
你给出的第二个例子写得不正确。给出的矩阵输入是
[[1, 0, 0, 0], [0, 2, 0, 0], [0, 0, 0, 4], [0, 0, 3, 0]]。如果你然后使用[-1, -1, -1, -1]来解决它,输入矩阵可以更改为[[1, 0, 0, 0], [0, 2, 0, 0], [0, 0, 3, 0], [0, 0, 0, 4]]与相同的[-1, -1, -1, -1]。因为是对角线,所以解是a=-1、b=-1/2、c=-1/3和d=-1/4。你只有那个小错误:P -
@stringparser:“写得不正确”是什么意思?我故意以这种方式重新排序输入向量,以检查我对输出的理解是否正确——显然不是。当然,在我的实际用例中,这些值不会被很好地四舍五入,也可能不会是对角线——正如我在下面写的,它们是 3D 场景中的任意向量。
-
输入矩阵
[[1, 0, 0, 0], [0, 2, 0, 0], [0, 0, 0, 4], [0, 0, 3, 0]]在第3行有一个4,在第3行有一个3,相反的写法。我想也应该是3c和4d。 -
等等,我明白了……您将每个内部向量视为列,但它们似乎是行。也就是说,如果我将内部向量视为列,我会发现这 not 有什么意义。
-
转到此处:mathjs.org/docs/datatypes/matrices.html#creation 您将看到示例矩阵
math.matrix([[0, 1], [2, 3], [4, 5]]); /* Matrix, size [3, 2] */。所以它似乎是rows x columns。也就是说,每个内部向量都是一行而不是一列。
标签: javascript mathjs