Alglib:以最小二乘意义求解A * x = b

时间:2013-05-18 13:09:21

标签: c++ numerical-methods alglib

我有一个有点复杂的算法,需要将二次曲线拟合到一组点。该二次曲线由参数化(u, v, f(u,v))给出,其中f(u,v) = au^2+bv^2+cuv+du+ev+f。 需要找到f(u,v)函数的系数,因为我有一组这个函数应该服从的6个约束。问题是这组约束虽然产生了像A*x = b这样的问题,但并不能很好地保证一个独特的解决方案。

因此,为了缩短它,我想使用alglib的设施以某种方式确定A的伪逆或直接找到最适合x向量。

除了计算SVD之外,是否有一个更直接的算法在这个库中实现,可以解决最小二乘意义上的系统(再次,除了SVD或使用朴素的inv(transpose(A)*A)*transpose(A)*b公式一般来说最少正方形问题,其中A不是方阵?

1 个答案:

答案 0 :(得分:1)

通过一些仔细的文档浏览找到答案:

rmatrixsolvels( A, noRows, noCols, b, singularValueThreshold, info, solverReport, x)

文档说明奇异值阈值是一个钳位阈值,如果该值低于它,则将SVD分解S矩阵中的任何奇异值设置为0。因此它应该是0到1之间的标量。

希望它也可以帮助其他人。