研发日记,Matlab/Simulink避坑指南(四)——transpose()转置函数Bug

文章目录

前言

背景介绍

问题描述

分析排查

解决方案

总结


前言

        见《研发日记,Matlab/Simulink避坑指南(一)——Data Store Memory模块执行时序Bug》

        见《研发日记,Matlab/Simulink避坑指南(二)——非对称数据溢出Bug》

        见《研发日记,Matlab/Simulink避坑指南(三)——向上取整Bug》

背景介绍

        在一个嵌入式软件项目中,需要对一个Matlab Function中的数组进行转置处理,要求是把一个行向量转换成列向量,思路是直接使用transpose(),示例如下:

function y = fcn(u)


y = zeros(1,10);

y(end) = u;


y = transpose(y);

问题描述

        按照上述示例,预想应该没有什么问题,但是编译的时候却出现了报错,示例如下:

研发日记,Matlab/Simulink避坑指南(四)——transpose()转置函数Bug_第1张图片

分析排查

        编译器提醒是transpose()函数这一行有问题,先把这行屏蔽掉,示例如下:

研发日记,Matlab/Simulink避坑指南(四)——transpose()转置函数Bug_第2张图片

        这样编译没有报错,说明就是transpose()函数的用法不对。查找transpose()的help说明,没有得到相关的解释,示例如下:

研发日记,Matlab/Simulink避坑指南(四)——transpose()转置函数Bug_第3张图片

解决方案

        一、在数组定义的地方直接改成列向量,示例如下:

研发日记,Matlab/Simulink避坑指南(四)——transpose()转置函数Bug_第4张图片

        编译后还是报错,说明这种方法不行。

        二、另起一个Matlab Function来进行transpose()转置处理,示例如下:

研发日记,Matlab/Simulink避坑指南(四)——transpose()转置函数Bug_第5张图片

研发日记,Matlab/Simulink避坑指南(四)——transpose()转置函数Bug_第6张图片

        再次编译,没有报错,功能也符合要求。这个解决方案可以。

        三、使用一个中间变量来桥接transpose()的输入和输出,示例如下:

研发日记,Matlab/Simulink避坑指南(四)——transpose()转置函数Bug_第7张图片

        这次编译也没有报错,这个解决方案也可以。

总结

        综上所述,transpose()函数的用法不同于,其他加减乘除数学运算或者一般的数学函数,这一点目前还没有查到官方的解析说明,需要开发者自己留意,这个函数的输入和输出不能是同一个变量。


        版权声明:原创文章,转载和引用请注明出处和链接,侵权必究!

        上述例程使用的Demo工程,可以到笔者的主页查找和下载。

你可能感兴趣的:(Matlab/Simulink,matlab,Simulink,数据处理,转置,transpose,Bug优化)