首页 文章

线性(超定)代数方程的解

提问于
浏览
0

我有一组线性代数方程, Ax=By . 其中 A 是36x20的矩阵, x 是20x1的向量, B 是36x13, y 是13x1 . Rank(A)=20 . 因为系统是超定的,所以最小二乘解是可能的,i,e; 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)和方向(Roll,Pitch和Yaw)矢量 . 但是B不是固定 oneszeros 的矩阵 . B是具有 sincos 个角度的元素的矩阵,其是实时传感器数据而不是固定数据 . 在枫B中几乎是一个变量矩阵和固定元素,你可以说是一个 dense sparse 矩阵 . 同时,y是所有传感器或编码器的矢量 .

1 回答

  • 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 例程进行提升,而不是尝试形成或使用正规方程或自己进行Matrix反演 . 如果需要稳健的方法,请使用 method=SVD 选项 . 让它来处理数值上的困难 .

相关问题