【问题标题】:Solution of linear (Over-determined) algebraic equations线性(超定)代数方程的解
【发布时间】:2014-02-04 00:29:54
【问题描述】:

我有一组线性代数方程,Ax=By。其中A是36x20的矩阵,x是20x1的向量,B是36x13,y是13x1。 排名(A)=20。因为系统是超定的,所以最小二乘解是可能的,即; x = (A^TA)^-1A^TBy。我想要解决方案,以便最小化残差 e = Ax-By。我使用 Maple 对矩阵进行转置和求逆,但是对如此大的矩阵求逆需要更长的时间和 RAM。我什至花了一整天的时间来求矩阵求逆,但由于 RAM 内存不足,它被中断了。这非常慢,我想 Maple 无法实现。

任何人都可以建议在 C++ 中这样做的任何解决方案或任何其他解决方程的方法,而不是采用逆和转置。

矩阵的形成,

    [ 1 0 0 ...0]
    [ 0 1 0 ...0]
    [ 0 0 1 ...0]    [LinearVelocity_x]
    [ 0 0 0 ...1]    [LinearVelocity_y]
    [ . . . ....], x=[LinearVelocity_z] 
A = [ . . . ....]    [RotationalVelocity_ROLL]
    [ . . . ....]    [RotationalVelocity_PITCH]    
    [ 1 0 0 ...0]    [RotationalVelocity_YAW]
    [ 0 1 0 ...0]
    [ 0 0 1 ...0]
    [ 0 0 0 ...1]

x 基本上是位置(x,y,z)和方向(滚动,俯仰和偏航)向量。 然而 B 不是固定的oneszeros 的矩阵。 B 是具有sincos 角度元素的矩阵,这些角度是实时传感器数据而不是固定数据。在 maple B 中几乎是一个由变量和固定元素组成的矩阵,可以说是一个dense sparse 矩阵。同时,y 是所有传感器或编码器的向量。

【问题讨论】:

    标签: c++ matlab maple


    【解决方案1】:

    如果您的数据是浮点数,那么 Maple 应该很快就能得到它。如果ABy 都只有数字条目,请尝试,

    ans := LinearAlgebra:-LeastSquares( evalf(A), evalf(B.y) );
    

    或者,如果您想要本身具有最小 2 范数的解决方案,

    ans := LinearAlgebra:-LeastSquares( evalf(A), evalf(B.y), 'optimize'=true );
    

    我的猜测是你的数据是纯粹的有理数或整数,你可能没有意识到使用它会导致 Maple 尝试找到一个确切的理性答案。或者您可能在数据中有一些未知的符号量(......尽管这可能会使计算最小残差的目标成为问题)。这种纯粹精确的数据,无论是理性的还是象征性的,都是一个潜在的内存占用噩梦,并且可能根本不是您真正想要的,您正在考虑将 C++ 作为替代方案。这就是为什么我调用evalf 来将数据转换为浮点数的原因。

    对于纯浮点数据,36x20 最小二乘是一个小问题,Maple 应该能够在几分之一秒内完成。

    您应该让LinearAlgebra:-LeastSquares 例程完成提升,而不是自己尝试形成或使用正规方程或矩阵求逆。如果您想要一种稳健的方法,请使用method=SVD 选项。让它处理数值难题。

    【讨论】:

    • 我现在用更详细的矩阵公式编辑了我的问题。
    • “最小 2 范数”是什么意思?残差?
    • 如果您的矩阵 B 包含的符号还没有数值,那么您的整个方法都是错误的。您不应该尝试找到一般符号解决方案(涉及符号矩阵的逆),您可能希望稍后在您从传感器获得实际数字数据时对其进行评估。即使是稀疏问题,符号解也将包含非常长的符号表达式。而是编写一个程序来接受实际的数字数据(来自传感器,最终获得),然后以数字方式(按需)计算 LS 解。
    • 那么,你推荐什么?本征?或者是其他东西?实际上我是 C++ 新手,所以请指导我应该如何进行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多