风沙星辰-364087 发表于 2016-6-26 14:34:23

STM32F407 DSPLib矩阵求逆的相关问题!

      最近在做一个项目,需要用到矩阵运算,在用STM32F407 DSPLib矩阵求逆的过程中发现一个问题,就是利用STM32F4 的浮点库计算逆矩阵的时候,有些逆矩阵无法求解,求不出啦,但是我用Matlab其他仿真工具求解的时候,矩阵都是可逆的,而且都能正常求解。
    是不是在使用407的浮点库中使用不当,有没有注意到的地方,非常感谢!

float32_t A_f32 = {
        0,                        0,                        -20000,
        200,                -200,                0,
        0,                        -400,                0
        };

        float32_t B_f32 = {
        0,                        200,                        0,
        0,                        -200,                        -400,
        -20000,        -0,                0
        };
       
        float32_t C_f32 = {
        -200,                        0,                        -20000,
        200,                -200,                -2,
        0,                        -400,                0
        };
       
       
float32_t AI_f32 ={0};
arm_status status;

void Mat_Inverse( float32_t *pA_f32,float32_t * pAI_f32 )
{
        arm_matrix_instance_f32 A;      /* Matrix A Instance */
arm_matrix_instance_f32 AI;   /* Matrix AT(A transpose) instance */
       
        arm_mat_init_f32(&A, 3, 3, pA_f32);
        arm_mat_init_f32(&AI, 3, 3, pAI_f32);
       
        status = arm_mat_inverse_f32(&A, &AI);
       
        delay_ms(100);
}
      这个是一个求逆矩阵的函数,我们发现A_f32,B_f32都无法求解,而C_f32是可以求解的。实际上,在matlab中,三个举证都是可以求解的,如下图:
>> A =

A =

         0         0      -20000
         200      -200         0
         0      -400         0

>> B = inv(A)

B =

         0    0.0050   -0.0025
         0         0   -0.0025
   -0.0001         0         0

>> A =

A =

         0         200         0
         0      -200      -400
      -20000         0         0

>> B = inv(A)

B =

         0         0   -0.0001
    0.0050         0         0
   -0.0025   -0.0025         0

>> A = [-200 0 -20000;200 -200 -2; 0 -400 0]

A =

      -200         0      -20000
         200      -200          -2
         0      -400         0

>> B = inv(A)

B =

   -0.0000    0.0050   -0.0025
         0         0   -0.0025
   -0.0000   -0.0000    0.0000

>>
         我们在用407求解的时候,函数调用如下,只有C_f32可以被正确求解:
Mat_Inverse(A_f32, AI_f32);
Mat_Inverse(C_f32, AI_f32);
Mat_Inverse(B_f32, AI_f32);
       非常感谢!

风沙星辰-364087 发表于 2016-6-27 09:30:45

没有人回答吗??求帮助,非常感谢!!!
页: [1]
查看完整版本: STM32F407 DSPLib矩阵求逆的相关问题!