主要内容

生成MEX代码以加速弹跳球的模拟

此示例演示如何使用生成的MEX函数加速MATLAB®算法的执行编码基因命令为使用多个MATLAB文件的复杂应用程序生成MEX函数。你可以用编码基因来检查您的MATLAB代码是否适合于代码生成,并且在许多情况下,可以加速您的MATLAB算法。您可以运行MEX函数来检查运行时错误。

先决条件

这个示例没有先决条件。

关于跑球函数

这个run_balls.m函数接受单个输入来指定要模拟的弹跳球的数量。模拟运行并绘制球的弹跳图,直到没有剩余能量,并返回所有球的状态(位置)。

类型跑球
%balls=run_balls(n)%给定“n”个球的数量,运行模拟,直到球完全停止(或当系统没有更多动能时)。函数balls=run_balls(n)%#codegen coder.External('fprintf'));%版权所有2010-2013 MathWorks,Inc.%播种随机数生成器将保证每次调用此函数时得到%完全相同的模拟。old_settings=rng(1283,'V4');%cdata变量是表示colordata位图的矩阵,该位图将%在每个时间步渲染。cdata=0(400600,'uint8'));%Setup figure windows im=Setup\u figure\u window(cdata);%Get'n'balls的初始配置。balls=initialize\u balls(cdata,n);energy=2;%大于1次迭代的值=1;而energy>1%清除位图cdata(:,:)=0;%应用一次移动迭代[cdata,balls,energy]=步进函数(cdata,balls);%呈现当前状态cdata=draw\u balls(cdata,balls);迭代=iteration+1;如果mod(iteration,10)==0 fprintf(1,'迭代%d\n',迭代);结束刷新图像(im,cdata);结束fprintf(1,'完成的迭代:%d\n',迭代);%Restore RNG settings.RNG(旧的\u设置);

生成MEX函数

首先,使用该命令生成一个MEX函数编码基因后面跟着要编译的MATLAB文件的名称。传递一个示例输入(-args 0)指示生成的MEX函数将使用类型为double的输入调用。

编码基因跑球-args0
代码生成成功。

这个跑球函数调用其他MATLAB函数,但在调用时只需指定入口点函数编码基因.

默认情况下,编码基因生成一个名为跑球在当前文件夹中。这允许您测试MATLAB代码和MEX函数,并比较结果。

比较结果

跑和时间原配跑球函数,然后是生成的MEX函数。

tic,跑球(50);t1=总有机碳;
迭代10迭代20迭代30迭代40迭代50迭代60迭代70迭代80迭代90迭代100迭代110迭代120迭代130迭代140迭代150迭代160迭代170迭代180迭代190迭代200迭代210迭代220迭代230迭代240迭代250迭代260迭代270迭代280已完成迭代:281
抽搐,run_balls_mex (50);t2 = toc;

图MATLAB编码器弹跳球包含一个轴对象。axes对象包含类型为image的对象。

迭代10迭代20迭代30迭代40迭代50迭代60迭代70迭代80迭代90迭代100迭代110迭代120迭代130迭代140迭代150迭代160迭代170迭代180迭代190迭代200迭代210迭代220迭代230迭代240迭代250迭代260迭代270迭代280

图MATLAB编码器弹跳球包含一个轴对象。axes对象包含类型为image的对象。

完成迭代:281

预计提速为:

fprintf(1,'加速:x~%2.1f\n',t1/t2);
加速:x~2.9