MATLAB-Simulink并行仿真示例

devtools/2025/2/4 5:47:26/

 一、概述

         在进行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.ppmy.cn/devtools/155918.html

相关文章

《苍穹外卖》项目学习记录-Day7缓存套餐

如果使用EHCache作为缓存实现,只需要导入 EHCache的maven坐标。 入门案例 如果使用Spring cache缓存数据,key的生成:userCache::xxx。#user.id中的.叫做对象导航。 因为id是自增的所以只输入age和name就可以了,在插入完之后它会把…

DeepSeek模型:开启人工智能的新篇章

DeepSeek模型:开启人工智能的新篇章 在当今快速发展的技术浪潮中,人工智能(AI)已经成为了推动社会进步和创新的核心力量之一。而DeepSeek模型,作为AI领域的一颗璀璨明珠,正以其强大的功能和灵活的用法&…

神经网络|(五)概率论基础知识-条件概率

【1】引言 前序完成了古典概型知识的简单学习,今天在此基础上开始条件概率的学习。古典概型的学习文章为:神经网络|(四)概率论基础知识-古典概型-CSDN博客 【2】条件概率 条件概率就是在A事件已经发生的条件下,B事件发生的概率。 设A、B是…

深入剖析 Docker 的镜像分层存储机制

目录 一、基本原理 镜像构成 UnionFS 二、工作方式 镜像构建时 容器启动时 三、优势 共享与复用 高效存储和传输 快速镜像构建 可追溯性和可维护性 四、相关命令 查看镜像分层 基于已有镜像创建新镜像 Docker 凭借其卓越的性能和极高的灵活性,已然成为众多开发者…

《手札·开源篇》从开源到商业化:中小企业的低成本数字化转型路径 ——SKF轴承贸易商的十年信息化演进启示

一、战略驱动的数字化演进逻辑 在轴承行业利润持续走低的背景下,我们选择了一条"开源筑基-场景突破-数据驱动"的演进路径。从2013年金蝶EAS的基础供应链管理,到2023年实现车间设备全要素数字化,系统建设始终遵循"业务场景驱动…

【JavaScript笔记】01- 原型及原型链(面试高频内容)

前言 JavaScript作为前端入门三件套之一,也是前端求职的必会知识,重要性不言而喻。 这个系列分享个人学习JavaScript的记录,和大家一起学习讨论。 下面介绍关于原型&原型链的相关重要知识点。 1、构造函数创建对象 function Student(…

[HOT 100] 2824. 统计和小于目标的下标对数目

文章目录 1. 题目链接2. 题目描述3. 题目示例4. 解题思路5. 题解代码6. 复杂度分析 1. 题目链接 2824. 统计和小于目标的下标对数目 - 力扣(LeetCode) 2. 题目描述 给你一个下标从 0 开始长度为 n 的整数数组 nums 和一个整数 target ,请你…

学习日记-250202

现在开始要继续写我的日记了......(也可以当作笔记吧) 一.论文 Prompt Transfer for Dual-Aspect Cross Domain Cognitive Diagnosis 主要内容: 主要是加入prompt提示, 为重叠实体设计个性化的提示,为非重叠实体设计共…