优化、估计和扫描块参数值
当你扫描在模拟运行之间更改一个或多个参数的值,并比较和分析每次运行的输出信号数据。使用参数扫描来调优控制参数,估计未知模型参数,并通过考虑现实系统中的不确定性来测试控制算法的鲁棒性。
可以扫描块参数值或用于设置参数值的工作区变量的值。使用参数页上的“模型数据编辑器”选项卡建模选项卡上,单击模型数据编辑器)、属性检查器(在建模选项卡,在设计,点击属性检查器)、命令提示符或脚本,以便在模拟运行之间更改参数值。
如果您想重复更改块参数的值,请考虑在工作区中创建一个变量。您可以使用Model Explorer或编程命令来更改变量的值,而不是定位或识别模型中的块。此外,一些促进参数优化、估计和扫描的特性和产品要求您通下载188bet金宝搏过创建工作空间变量来设置块参数值。
要了解如何在创建模型的迭代过程中操作参数值,请参见调优和实验块参数值.
有关在设计模型时访问和设置块参数值的基本信息,请参见设置块参数值.有关以编程方式模拟模型(例如使用脚本)的基本信息,请参见以编程方式运行模拟.
扫描参数值并检查仿真结果
此示例演示如何在多个编程模拟运行之间更改块参数值。使用该技术通过比较每次运行的输出信号数据来确定最佳参数值。
示例模型ex_sldemo_absbrake
使用Constant块指定防抱死制动系统的滑移设定值。用两种不同的滑移设定值0.24和0.25模拟模型,并比较每次模拟运行的输出轮速。
要存储设定值,请在基本工作空间中创建一个变量。这种技术使您能够为值分配一个有意义的名称。
打开示例模型。
open_system (“ex_sldemo_absbrake”);
在建模选项卡上,单击模型数据编辑器.
在模型数据编辑器中,选择信号选项卡。
设置改变观点下拉列表仪表
.的日志数据列表示信号你
(这是一个虚拟总线)和方案得到
配置为日志记录。在模拟模型时,可以通过使用Simulation Data Inspector收集这些信号的值,并在以后检查这些值。
在模型数据编辑器中,选择参数选项卡。集改变观点来设计
.
在模型中,选择有标记的Constant块期望相对滑移
.模型数据编辑器突出显示与恒定值块参数。
使用价值列,将参数值设置为relSlip
.
在编辑值时,旁边的relSlip
,点击操作按钮(有三个垂直点)并选择创建.
2 .在“创建新数据”对话框中设置价值来0.2
并点击创建.变量,其值为0.2
,出现在基本工作区中。模型现在从这个变量获得相对滑移设定值。
或者,你可以在命令提示符处使用这些命令来创建变量并配置块:
relSlip = 0.2;set_param ('ex_sldemo_absbrake/期望的相对滑移',“价值”,“relSlip”)
在命令提示符中,创建一个数组来存储相对滑移设定值的两个实验值,0.24
而且0.25
.
relSlip_vals = [0.24 0.25];
创建一个金宝app仿真软件。SimulationInput
对象为您希望运行的每个模拟(在本例中为两个)。将对象存储在一个数组变量中,思敏
.使用setVariable
每个对象的方法,以确定每个两个实验值。
为i = 1:length(relSlip_vals) simIn(i) = 金宝appSimulink。SimulationInput (“ex_sldemo_absbrake”);simIn(i) = setVariable(simIn(i),“relSlip”relSlip_vals(我));结束
使用sim卡
函数来模拟模型。可选地,将输出存储在名为simOutputs
.
simOutputs = sim(simIn);
[26-Feb-2022 15:18:18]运行模拟…[26-Feb-2022 15:18:20]完成2次模拟运行中的2次
该模型对记录的信号进行流式处理,你
而且方案得到
,转到模拟数据检查器。您可以在仿真数据检查器中查看信号数据。
比较最近两次模拟运行的输出数据。
runIDs = 金宝appSimulink.sdi.getAllRunIDs();runResult = 金宝appSimulink.sdi.compareRuns(runid (end-1), runid (end));
的值之间的差Ww
信号(是虚拟总线信号的一个元素你
)通过指定结果索引1
.
signalResult = getResultByIndex(runResult,1);情节(signalResult.Diff);
将扫描值存储在金宝app仿真软件。SimulationInput
对象
编写脚本以运行许多模拟时,创建一个数组金宝app仿真软件。SimulationInput
对象(要运行的每个模拟对应一个对象)。使用setVariable
而且setBlockParameter
方法,以识别用于相应模拟运行的参数值。使用这种技术,可以避免使用set_param
函数修改块参数值和分配命令以在模拟运行之间修改工作区变量值。
有关使用的更多信息金宝app仿真软件。SimulationInput
对象以运行多个模拟,请参见sim卡
.
扫描非标量、结构和参数对象
如果使用非标量变量、结构变量或金宝app仿真软件。参数
对象来设置块参数值,请使用setVariable
各方法金宝app仿真软件。SimulationInput
对象。参考表中的例子。
场景 | 例子 |
---|---|
MATLAB®变量,myArray ,其值为数组。您需要设置数组中的第三个元素(假设基于一的索引)。 |
setVariable(思敏,“myArray(3)”, 15.23)
|
MATLAB变量,myStruct ,它的字段名为field1 . |
setVariable(思敏,“myStruct.field1”, 15.23)
|
参数对象,myParam ,他的价值 属性是标量。 |
setVariable(思敏,“myParam。价值”, 15.23)
|
参数对象,myArrayParam ,他的价值 属性是一个数组。你要设置数组中的第三个元素。 |
setVariable(思敏,“myArrayParam.Value(3)”, 15.23)
|
参数对象,myStructParam ,他的价值 属性是一种结构。该结构有一个名为field1 . |
setVariable(思敏,“myStructParam.Value.field1”, 15.23)
|
模型工作区中变量的扫描值
如果使用模型工作区存储变量,则在使用setVariable
方法金宝app仿真软件。SimulationInput
对象修改变量值时,请使用工作空间
参数来标识包含的模型:
setVariable(思敏,“myvar#”, 15.23,“工作区”,“myModel”)
捕获和可视化仿真结果
在参数扫描期间运行的每个模拟都会产生输出,例如来自的信号值外港块和从日志信号。
您可以在变量和对象中捕获这些输出,以便以后进行分析。有关更多信息,请参见导出仿真数据.
若要可视化模拟输出数据,以便比较每个参数值的效果,请参见决定如何可视化模拟数据.
提高仿真速度
要执行多个使用不同参数值的模拟,可以使用加速模拟模式。对于较大的模型,加速模拟比普通模拟执行的时间更短。如果您还拥有并行计算工具箱™,则可以使用处理器的多个核心同时执行模拟。的参数sim卡
而且parsim
功能。
扫描参数值以测试和验证系统
如果你有金宝app®测试™,您可以确认您的模型在使用不同的参数值时仍然满足要求。参数覆盖和测试迭代使您能够为每个测试用例设置不同的参数值。有关更多信息,请参见参数将覆盖(金宝app仿真软件测试)而且测试迭代(金宝app仿真软件测试).
估计和校准模型参数
如果你有金宝appSimulink设计优化™,您可以估计模型参数值,以便模拟输出与您在现实世界中测量的数据紧密匹配。使用此技术来估计模型中参数的实际值工厂模式,它表示现实世界系统的动态,当您不能直接测量值时。这种估计提高了工厂模型的准确性。有关更多信息,请参见从实测数据估计参数(金宝appSimulink设计优化).
调优PID和控制器参数
如果你有金宝appSimulink控制设计™,可以使用PID调谐器来调优a的参数PID控制器块。有关更多信息,请参见Simulink PID控制器整定金宝app(金宝appSimulink控制设计).
如果你有金宝appSimulink设计优化,您可以优化控制参数值,使模拟输出满足指定的响应要求。有关更多信息,请参见优化设计以满足阶跃响应要求(GUI)(金宝appSimulink设计优化).