当前位置: 首页 > article >正文

MATLAB-Simulink并行仿真示例

 一、概述

         在进行simulink仿真的过程中常常遇到CPU利用率较低,仿真缓慢的情况,可以借助并行仿真改善这些问题,其核心思想是将参数扫描蒙特卡洛分析多工况验证等任务拆分成多个子任务,利用多核CPU或计算集群的并行计算能力,显著缩短整体仿真时间。
主要使用的函数包括:

1.parpool(numCore)函数,目的是开启并行池(具体数量取决于计算机物理内核数)

2.Simulink.SimulationInput函数,用于封装模型参数、变量修改、回调函数等配置,简单来说就是建立一个数组,存放并行仿真时模型的参数

3.parsim函数,用于SimulationInput数组分发到各工作进程执行

二、流程

大体使用过程如下

1.开启并行工作池

clear; clc;

% start parpool by codes.

delete(gcp('nocreate')); % 关闭之前的并行池

numCore = 2; % 设定并行工作池的数量(受限于CPU真实内核数)

p = parpool(numCore); % start parpool.

2.打开simulink文件

%打开模型

modl = 'u_of_ideal_full_bridge_LLC_double_vol_blue';

open_system(modl);

load_system(modl);

3.设置参数

Lm = 20e-6;

k = [1 10 100 1000];

Lr = zeros(size(k));

for i = 1:length(Lr)

Lr(i) = Lm/k(i);

end

4.建立输入函数

In(length(k)) = Simulink.SimulationInput(modl); %内存预分配

for i = 1 : length(k)

In(i) = Simulink.SimulationInput(modl);

In(i) = In(i).setVariable('Lr',Lr(i));

In(i) = In(i).setPostSimFcn(@(x) u_PostSimFunction(x));%这行代码用于设置后处理函数,具体作用在后面解释

end

5.运行仿真

Out = parsim(In,'ShowSimulationManager','on');%运行结果会存储在OUT中

三、后处理函数作用

simulink仿真的数据会通过to workscape模块传递到基础工作区,但是在并行仿真时,数据都会保存在计算机内存里,这样子很容易导致计算机内存爆满,所以可以设置一个后处理函数,在每次仿真结束后直接对仿真数据进行处理,把处理结果保存,其余数据清空。

示例中的后处理函数如下:
 

function newout = PostSimFunction(simOut, fm)

%计算阻抗

newout.Ro = sum(simOut.get('Vout') .* exp(-1j * 2 * pi * fm * simOut.get('to')))...

/sum(simOut.get('Iout') .* exp(-1j * 2 * pi * fm * simOut.get('to')));

%计算效率

newout.u = (mean(simOut.get('Vout'))*mean(simOut.get('Iout')))/(mean(simOut.get('Vi'))*mean(simOut.get('Ii')));

%清空simOut

simOut.Vout = 0;

simOut.Iout = 0;

simOut.to = 0;

simOut.fm = 0;

end


http://www.kler.cn/a/527804.html

相关文章:

  • DS并查集(17)
  • Ethflow Round 1 (Codeforces Round 1001, Div. 1 + Div. 2)(A,B,C,E1)
  • 前端学习-事件委托(三十)
  • 【memgpt】letta 课程4:基于latta框架构建MemGpt代理并与之交互
  • python 使用Whisper模型进行语音翻译
  • SSM开发(三) spring与mybatis整合(含完整运行demo源码)
  • 前端 Vue 性能提升策略
  • DeepLens是一个用于计算镜头设计的可微光线追踪器
  • Redis代金卷(优惠卷)秒杀案例-多应用版
  • JVM的GC详解
  • 六. Redis当中的“发布” 和 “订阅” 的详细讲解说明(图文并茂)
  • Fiddler(一) - Fiddler简介_fiddler软件
  • Spring--Bean的生命周期和循环依赖
  • leetcode——将有序数组转化为二叉搜索树(java)
  • SFTP 使用方法
  • 【Blazor学习笔记】.NET Blazor学习笔记
  • 【算法-位运算】求数字的补数
  • 知识库管理在提升客户服务质量中的应用与挑战分析
  • 嵌入式八股文之深入理解 C语言中的指针相关概念
  • 04树 + 堆 + 优先队列 + 图(D1_树(D2_二叉树(BT)(D1_基础学习)))
  • 笔记:电机及控制器的功率测量是怎么进行的?
  • 服务器架构设计大全及其优缺点概述
  • 长尾关键词在SEO提升网站流量中的关键角色与应用技巧分析
  • AVL树介绍
  • Java设计模式:行为型模式→观察者模式
  • LeetCode-180. 连续出现的数字