你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

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

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

        float32_t B_f32[9] = {
        0,                        200,                        0,
        0,                        -200,                        -400,
        -20000,        -0,                0
        };
       
        float32_t C_f32[9] = {
        -200,                        0,                        -20000,
        200,                -200,                -2,
        0,                        -400,                0
        };
       
       
float32_t AI_f32[9] ={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 = [0 0 -20000;200 -200 0; 0 -400 0]

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 = [0 200 0;0 -200 -400; -20000 0 0]

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);

       非常感谢!

收藏 评论1 发布时间:2016-6-26 14:34

举报

1个回答
Seny Lee 回答时间:2016-6-27 09:30:45
没有人回答吗??求帮助,非常感谢!!!
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版