linear-algebra - 使用 numeric.js 求解线性方程

标签 linear-algebra numeric

我一定错过了一些非常简单的东西。我有一些 JS 代码可以创建简单的线性系统(我正在尝试创建两条斜线之间的最短线)。我已经达到了 Ax = b 的地步,并且需要求解 x。 A 是 3 x 2 矩阵,b 是 3 x 1。

我有:

function build_equation_system(v1, v2, b) { 
    var a = [ [v1.x, v2.x], [v1.y, v2.y], [v1.z, v2.z] ];
    var b = [ [b.x], [b.y], [b.z]];
    return numeric.solve(a,b)
}

即使存在解,数值也会返回 1 x 3 NaN 矩阵。

最佳答案

使用数字您可以执行以下操作:

创建一个计算 A 矩阵的伪逆的函数:

function pinv(A) {
    return numeric.dot(numeric.inv(numeric.dot(numeric.transpose(A),A)),numeric.transpose(A));
}

使用该函数求解线性最小二乘方程以获得系数。

var p = numeric.dot(pinv(a),b);

我尝试了您使用 numeric.solve 的初始方法,但也无法使其工作,因此我有兴趣知道问题是什么。

一个简单的测试...

var x = new Array(10);
var y = new Array(10);
for (var i = 0; i < 10; ++i) { 
    x[i] = i;
    y[i] = i;
}
// Solve for the first order equation representing this data
var n = 1;
// Construct Vandermonde matrix.
var A = numeric.rep([x.length, n + 1], 1);
for (var i = 0; i < x.length; ++i) {
    for (var j = n-1; j >= 0; --j) {
        A[i][j] = x[i] * A[i][j+1];
    }
}

// Solves the system Ap = y
var p = numeric.dot(pinv(A),y);

p = [1, 2.55351295663786e-15]

我使用此方法重新创建了 MATLAB 的 polyfit 以供 Javascript 使用。

关于linear-algebra - 使用 numeric.js 求解线性方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17347530/

相关文章:

scala - Scala 中的简单税收计算

c++ - 实现 3d vector 数组的最佳方法是什么?

python - Numpy - 坐标系之间的转换

linux - 使用数字排序合并 pdf 文件

r - 如何将因子转换为数字二进制变量?

ANDROID - 数字键盘

graphics - 线到圆的变换

python - 给定一个用给定基向量构建的函数,逼近矩阵的值

python - 在Python中以两点之间的角度绘制椭圆

android - 如何在数字 EditText 上启用语音输入?