【发布时间】: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 不是固定的ones 和zeros 的矩阵。 B 是具有sin、cos 角度元素的矩阵,这些角度是实时传感器数据而不是固定数据。在 maple B 中几乎是一个由变量和固定元素组成的矩阵,可以说是一个dense sparse 矩阵。同时,y 是所有传感器或编码器的向量。
【问题讨论】: