C++ 用一级S函数求解线性方程组与Matlab编码器的比较
我有一个matlab 1级s函数,我用它来解线性方程组。不幸的是,我的模拟速度非常慢,而且探查器报告告诉我,这个特殊的s函数非常耗时。由于我可以访问MATLAB编码器,所以我有机会把我的S-函数转换成C++代码。然而,它并不那么简单,因为到Matlab sFube的信号是可变大小的,并且需要一些努力来实现C++中的相同的东西(虽然我知道它可以完成)。C++ 用一级S函数求解线性方程组与Matlab编码器的比较,c++,matlab,simulink,matlab-coder,C++,Matlab,Simulink,Matlab Coder,我有一个matlab 1级s函数,我用它来解线性方程组。不幸的是,我的模拟速度非常慢,而且探查器报告告诉我,这个特殊的s函数非常耗时。由于我可以访问MATLAB编码器,所以我有机会把我的S-函数转换成C++代码。然而,它并不那么简单,因为到Matlab sFube的信号是可变大小的,并且需要一些努力来实现C++中的相同的东西(虽然我知道它可以完成)。 在开始之前,我想问一下,所有CMEX代码的运行速度是否都比1级s函数快?尤其是使用codegen生成的代码?更重要的是,反斜杠运算符在CMEX中是
在开始之前,我想问一下,所有CMEX代码的运行速度是否都比1级s函数快?尤其是使用
codegen
生成的代码?更重要的是,反斜杠运算符在CMEX中是否以相同的速度工作?反斜杠运算符在c中根本不起作用——它纯粹是一种m代码语法。如果可能的话,您最好将代码转换为使用MATLAB函数块(它支持将mldivide(即反斜杠)转换为c代码)。您好,PhilGoddard,是的,这是我的计划。通常,我在matlab level-1中编写一个s函数,因为这样很容易调试。之后,我去掉了其中的s函数部分,将所有内容复制到一个典型的matlab.m函数中。然后我使用Matlab编码器,让它为我做转换。最后,我为它编写了一个包装器代码,并使用mex
函数将所有内容编译成CMEX。这就是我的计划,需要注意的是,我需要合并可变大小的信号。为什么不把它写在一个MATLAB函数块中,这与标准m代码函数略有不同,并且不需要使用MATLAB编码器?以我的经验,这会进一步减慢我们的模拟速度,由于我们有一些内部库,这些库也需要从s函数中调用。我们最终不得不使用coder.extrinsic
很多,结果就是没有那么快。