加速弹跳球的模拟

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

先决条件

这个示例没有先决条件。

关于run_balls.函数

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

类型run_balls.
%球= run_balls(n)%给定'n'球,运行模拟,直到球达到%完全停止(或者当系统没有移动能量时)。功能球= run_balls(n)%#codegen编码器.Extrinsic('fprintf');%版权所有2010-2013 MathWorks,Inc.%播种随机数发生器将保证每次调用此功能时,我们都会精确地相同的模拟。old_settings = rng(1283,'v4');%“CDATA”变量是表示Colordata位图的矩阵,其在每次步骤中都会呈现%。CDATA =零(400,600,'UINT8');%设置图窗口IM = setup_figure_window(cdata);%获得“N”球的初始配置。球= initialize_balls(cdata,n);能量= 2; % Something greater than 1 iteration = 1; while energy > 1 % Clear the bitmap cdata(:,:) = 0; % Apply one iteration of movement [cdata,balls,energy] = step_function(cdata,balls); % Render the current state cdata = draw_balls(cdata, balls); iteration = iteration + 1; if mod(iteration,10) == 0 fprintf(1, 'Iteration %d\n', iteration); end refresh_image(im, cdata); end fprintf(1, 'Completed iterations: %d\n', iteration); % Restore RNG settings. rng(old_settings);

生成MEX功能

首先,使用该命令生成一个MEX函数Codegen.后面跟着要编译的MATLAB文件的名称。传递一个示例输入(-Args 0.)表示,将使用类型的输入调用生成的MEX函数。

Codegen.run_balls.-  args.0.

run_balls.函数调用其他MATLAB函数,但您只需要在呼叫时指定入口点函数Codegen.

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

比较结果

运行和时间原始run_balls.功能后跟生成的mex函数。

tic,run_balls(50);t1 = toc;Tic,Run_Balls_Mex(50);t2 = toc;
迭代10迭代20迭代30迭代40迭代50迭代60迭代70迭代80迭代90迭代100迭代110迭代120迭代130迭代150迭代160迭代180迭代190迭代210迭代210迭代230迭代230迭代220迭代250迭代260迭代270迭代280次完成迭代:281迭代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

估计加速是:

FPRINTF(1,'加速:x〜%2.1f \ n',t1 / t2);
加速:x〜2.3