【问题标题】:Alglib: solving A * x = b in a least squares senseAlglib:以最小二乘的方式求解 A * x = b
【发布时间】:2013-05-18 13:09:21
【问题描述】:

我有一个有点复杂的算法,需要将二次曲线拟合到一组点。该二次曲线由其参数化(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不是方阵?

【问题讨论】:

    标签: c++ numerical-methods alglib


    【解决方案1】:

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

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

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

    希望它也会对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-22
      • 2012-11-24
      • 1970-01-01
      • 1970-01-01
      • 2022-11-20
      • 1970-01-01
      • 2020-07-12
      • 2014-04-05
      相关资源
      最近更新 更多