这个例子展示了如何使用fastRestartForLinearAnalysis
函数来加快多个调用编译函数模型®控制设计™软件等金宝appfindop
和线性化
。
在本例中,您修剪和线性化闭环转速控制模型。你改变PI控制参数和观察闭环稳态行为变化。自线性化
和findop
被称为在一个循环中,模型编译2 *包括第一次调用N + 1次operspec
。
打开发动机转速控制模型,从模型中获得的线性分析点。
mdl =“scdspeedctrl”;open_system (mdl) io = getlinio (mdl);据= findopOptions (“DisplayReport”,“关闭”);
PI控制器配置为使用基本工作空间变量kp
和ki
。
黑色= [mdl,/ PID控制器的];set_param(黑色,“P”,“金伯利进程”);set_param(黑色,“我”,“吻”);
创建一个网格的参数值有所不同。
vp = 0.0005:0.0005:0.003;vi = 0.0025:0.0005:0.005;(KP, KI) = ndgrid(副总裁、vi);N =元素个数(KP);深圳=大小(KP);
初始化基本工作空间变量。
kp = kp (1);ki = ki (1);
循环运行,记录执行时间。
t = cputime;行动= operspec (mdl);为我= N: 1:1 kp = kp(我);ki = ki (i);%削减模型。op = findop (mdl、ops、录像);[j, k] = ind2sub(深圳,我);%线性化模型。sysLoop (:,: j k) =线性化(mdl io, op);结束
计算时间。
timeElapsedLoop = cputime - t;
而不是循环参数,findop
和线性化
可以直接接受一批参数变异结构来减少模型编译的次数。在这种情况下,模型与调用编译三次operspec
,findop
,线性化
。
运行并记录执行时间。
t = cputime;行动= operspec (mdl);
创建批处理参数结构。
参数(1)。Name =“金伯利进程”;参数(1)。值= KP;参数(2)。Name =“吻”;参数(2)。值=吻;
调整模型参数集。
op = findop (mdl、ops、params,录像);
线性化模型参数和操作点设置。
sysBatch =线性化(mdl、io、op params);
计算时间。
timeElapsedBatch = cputime - t;
的fastRestartForLinearAnalysis
功能配置模型来减少编译即使编译函数是运行在一个循环。模型与调用编译operspec
,findop
,线性化
在一个循环中。
循环运行,记录执行时间启用快速启动线性分析。
t = cputime;
启用快速启动进行线性分析。提供线性分析指出,减少编译之间调用findop
和线性化
。
fastRestartForLinearAnalysis (mdl“上”,“AnalysisPoints”io);
修剪和线性化模型在一个循环中。
行动= operspec (mdl);为我= N: 1:1 kp = kp(我);ki = ki (i);%削减模型。op = findop (mdl、ops、录像);[j, k] = ind2sub(深圳,我);%线性化模型。sysFastRestartLoop (:,: j k) =线性化(mdl io, op);结束
线性分析关闭快速启动,uncompiles模型。
fastRestartForLinearAnalysis (mdl“关闭”);
计算时间。
timeElapsedFastRestartLoop = cputime - t;
您可以进一步提高性能通过启用快速启动线性分析和执行批处理线性化
和findop
功能。在这种情况下,模型与调用编译一次operspec
,findop
,线性化
。
运行并记录执行时间线性分析的快速重启。
t = cputime;
启用快速启动进行线性分析。提供线性分析指出,减少编译之间调用findop
和线性化
。
fastRestartForLinearAnalysis (mdl“上”,“AnalysisPoints”io)
创建批处理参数结构。
参数(1)。Name =“金伯利进程”;参数(1)。值= KP;参数(2)。Name =“吻”;参数(2)。值=吻;
调整模型参数集。
行动= operspec (mdl);op = findop (mdl、ops、params,录像);
线性化模型参数和操作点设置。
sysFastRestartBatch =线性化(mdl、io、op params);
禁用快速重启线性分析uncompiles模型。
fastRestartForLinearAnalysis (mdl“关闭”);
计算时间。
timeElapsedFastRestartBatch = cputime - t;
比较四种方法的线性化的结果。下面的波德图显示每个方法返回相同的结果。
compareIdx = 1: N;波德(…sysLoop (:,:, compareIdx),…sysBatch (:,:, compareIdx),…sysFastRestartLoop (:,:, compareIdx),…sysFastRestartBatch (:,:, compareIdx));传奇(…“循环线性化”,…批处理线性化的,…“循环线性化与快速启动”,…“批处理线性化与快速启动”)
编译运行时间为每个表中的方法和加速比。您可以使用批处理获得显著的性能提升削减和线性化fastRestartForLinearAnalysis
。
方法= [“循环”,“批”,“快速重新启动循环”,“快速启动批处理”]“;TimeElapsed = [timeElapsedLoop timeElapsedBatch…timeElapsedFastRestartLoop timeElapsedFastRestartBatch]”;SpeedUpFactor = TimeElapsed (1)。/ TimeElapsed;TimeElapsedTable =表(方法、TimeElapsed SpeedUpFactor)
TimeElapsedTable = 4 x3表法TimeElapsed SpeedUpFactor ____________________ ___________ _________________“循环”39.49 - 3.1031 122.54 - 1“批处理”“快速重新启动循环”52.35 - 2.3408 35.82 - 3.421“快速启动批处理”
关闭仿真软件模型。金宝app
bdclose (mdl)