MATLAB脚本调用simulink仿真文件及simulink模块参数修改-load_system函数-sim函数-set_param函数

本文介绍了如何在MATLAB中使用Simulink进行模型加载、仿真、参数设置和获取。通过load_system加载模型,sim进行仿真,set_param和get_param分别用于修改和读取模块参数。这些功能在参数寻优中尤其有用,例如在指定范围内调整参数并利用脚本自动进行试错仿真,以找到最优参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. load_system

加载系统,添加所需要加载的simulink仿真模型所在的路径和名称。

load_system('pathname\filename');

必须加载系统之后才可以完成后续的运行simulink仿真模型和获取仿真模型参数和设置仿真模型参数的操作。

2. sim

sim('filename',[0 1]);

运行函数名为filename的simulink仿真文件,[0,1]为仿真时长,可根据实际需要进行设置。

3. set_param

set_param('CS/hot1','value','37'); 

CS对应仿真文件的名称.slx,hot1对应.slx文件内模块的名称,这里我给他起名叫做hot1,hot1是一个常数模块,可以通过set_param函数对value这个参数进行设置。这里很奇怪的就是写成‘Constant value’会显示错误,需要写成‘value’才能正确运行。(2019b的版本)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4. get_param

c=get_param('CS/hot1','value')
C=str2num(c)

使用get_param函数可以获得模块的数,但是得到的str格式,如果需要后续计算的话,需要通过str2num函数转化为num格式。
在这里插入图片描述
在这里插入图片描述

5. 应用

通过脚本.m文件运行simulink文件,通过以上介绍的函数,可以用于参数寻优。设定一个寻优参数区间和步长,给定一个约束函数,通过不断的试错仿真,可以得到一个最优函数。

A=(0.1:0.02:0.9);%%参数寻优范围与步长
%%此处为约束函数----输出最佳参数param%%
set_param('CS/hot1','value','param'); %%%将得到的最佳参数设置给仿真模型,并运行该模型
sim('CS',[0 1]);

通过脚本的仿真可以自动对参数进行寻优与试错,大量节省了时间。

### 如何在运行时动态更改Simulink模型中的模块参数 #### 加载模型 为了能够在MATLAB环境中操作Simulink模型,首先需要加载目标模型。这一步骤确保了后续的操作可以在指定的仿真环境内执行。 ```matlab load_system('model_name'); ``` 此处`'model_name'`应替换为实际使用的Simulink模型名称[^1]。 #### 获取现有参数配置 了解当前模型的具体结构及其初始设定对于进一步调整至关重要。利用`get_param`函数可以读取特定模块或整个系统的属性信息。 ```matlab currentSettings = get_param(gcb, 'ParameterName'); disp(currentSettings); ``` 这里`gcb`代表获取当前选中的块路径名,而`'ParameterName'`则需替换成想要查询的实际参数名称。 #### 修改参数值 当明确了要改变哪些参数之后,就可以借助`set_param`命令实现对这些参数的新定义。此过程允许用户直接输入新的数值或是表达式作为新值。 ```matlab set_param(blockPath, 'ParameterName', newValueString); ``` 其中`blockPath`指定了待更新参数所属模块的确切位置;`newValueString`表示希望赋予该参数的新字符串形式的值。值得注意的是,如果涉及多个不同类型的参数,则可能需要多次调用上述指令完成全部设置工作。 #### 运行仿真并监控变化效果 一旦完成了必要的参数调整,便可通过启动仿真来观察所做改动带来的影响。此时可采用如下方法触发模拟: ```matlab out = sim('model_name'); ``` 这段代码不仅能够驱动一次完整的仿真流程,还能接收返回的结果数据对象`out`用于后期分析处理。 #### 实现批量化自动化的参数调节 针对含有大量相似组件的情况,手动逐个编辑显然效率低下。为此,可以通过编写脚本循环遍历所有相关联的对象,并对其实施统一标准下的个性化定制化变更。下面给出了一种基于元胞数组存储多组参数映射关系的例子: ```matlab blocksAndParams = { {'BlockA', 'ParamX', 'ValueForA'}; {'BlockB', 'ParamY', 'ValueForB'} }; for i=1:size(blocksAndParams, 1) set_param(blocksAndParams{i, 1}, blocksAndParams{i, 2}, num2str(str2double(blocksAndParams{i, 3}))); end ``` 这种做法极大地简化了复杂场景下大规模参数同步管理的任务难度[^2]。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值