主要内容

批量计算参数变化的稳态工作点

块参数配置一个Simulink金宝app®以多种方式建模。例如,您可以使用块参数来指定各种系数或控制器采样时间。也可以使用离散参数,如控件的输入多端口切换块,以控制模型中的数据路径。改变参数的值可以帮助您理解它对模型行为的影响。此外,还可以改变控制系统中植物模型的参数,以研究控制器对植物变化的鲁棒性。

修剪模型时使用findop,您可以指定一组参数值来修剪模型。完整的值集合称为a参数网格参数样本findop为参数网格中的每个值组合计算一个工作点。您可以改变多个参数,从而扩展参数网格维度。

哪些参数可以采样?

您可以用模型工作区MATLAB中的变量给出的值来改变任何模型参数®工作区,或者数据字典。在变化参数都是的情况下可调findop只需要一次模型编译就可以为不同的参数值找到工作点。这种效率对于重复编译成本较高的模型尤其有利。

改变单个参数

更改用于批量修剪的单个参数的值findop,将参数grid指定为具有两个字段的结构。的的名字字段包含指定参数的工作区变量的名称。的价值字段包含该参数在修整期间要取的值的向量。

例如,Watertank模型中有三个参数定义为MATLAB工作空间变量,一个b,一个.以下命令为for的单个参数指定参数网格一个

参数。Name =“一个”;参数。价值=保兑;

在这里,保兑数组是否指定样例值一个

下表列出了一些指定参数样本的常用方法。

样本空间类型 如何指定参数样本
线性变化的 参数。价值=linspace(A_min,A_max,num_samples)
对数变化 参数。价值=logspace(A_min,A_max,num_samples)
随机 参数。价值=rand(1,num_samples)
自定义 参数。价值=custom_vector

如果模型使用的变量不是标量变量,则将参数名称指定为解析为数值标量值的表达式。例如,假设Kpid为PID增益矢量。这个向量的第一项,Kpid,在模型中用作块中的增益值。使用下面的命令使用矢量中给出的值来改变增益Kpvals

参数。Name =“Kpid(1)”;参数。价值=Kpvals;

在创建结构之后参数,传递给findop随着参数输入参数。

多维参数网格

当您一次改变多个参数时,您将生成更高维度的参数网格。例如,改变两个参数产生一个参数矩阵,改变三个参数产生一个三维参数网格。考虑以下用于批量修剪的参数网格:

在这里,你改变三个参数的值,一个b,c.这些样本形成了一个3 × 4 × 5的网格。人事处具有相同尺寸的数组,其中包含相应的经过修剪的工作点对象。

改变多个参数

更改多个参数的值,用于批量修剪findop,将参数样本指定为结构数组。该结构为每个值不同的参数都有一个条目。每个参数的结构与中描述的相同改变单个参数.您可以指定价值字段作为任意维数的数组。然而,大小的价值字段必须与所有参数匹配。所有参数的对应数组项,也称为a参数网格点,必须映射到指定的参数组合。当软件修整模型时,它为每个网格点计算一个工作点。

指定完整网格

假设你的模型有两个参数,你想改变它们的值,一个而且b

一个 一个 1 一个 2 b b 1 b 2

你想修剪模型的每一个组合一个而且b,也被称为a完整的网格

一个 1 b 1 一个 1 b 2 一个 2 b 1 一个 2 b 2

创建一个矩形参数网格使用ndgrid

A1 = 1;A2 = 2;A = [a1 a2];B1 = 3;B2 = 4;B = [b1 b2];[A,B] = ndgrid(A,B)
>> a a = 1 1 2 2 >> b b = 3 4 3 4 4

创建结构数组,参数个数,它指定参数grid。

参数(1)。Name =“一个”;参数(1)。价值=一个;参数(2)。Name =“b”;参数(2)。Value = B;

通常,为指定一个完整的网格N参数,使用ndgrid获得N网格阵列。

[P1,…,PN] = ndgrid(p1,...,pN);

在这里,p1、……pN是参数样本向量。

创建一个1 xN结构数组。

参数(1)。Name ='p1'; params(1).Value = P1; ... params(N).Name = 'pN'; params(N).Value = PN;

指定完整网格的子集

如果你的模型很复杂,或者你改变了许多参数的值,为整个网格修整模型会变得很昂贵。在这种情况下,您可以使用类似表格的方法指定完整网格的子集。使用中的例子指定完整网格,假设您想修剪模型以获得以下组合一个而且b

一个 1 b 1 一个 1 b 2

创建结构数组,参数个数,指定此参数网格。

A = [a1 a1];参数(1)。Name =“一个”;参数(1)。价值=一个;B = [b1 b2];参数(2)。Name =“b”;参数(2)。Value = B;

参数变化的批量修剪模型

这个例子展示了如何通过改变参数值来获得一个模型的多个工作点。您可以通过使用修剪的工作点批量线性化模型来研究控制器对种植变化的鲁棒性。

打开Simulin金宝appk模型。

sys =“watertank”;open_system(系统)

不同的参数一个而且b其标称价值的10%以内。指定三个值一个还有四个值b,为每个参数创建一个3乘4的值网格。

[A_grid,b_grid] = ndgrid(linspace(0.9*A,1.1*A,3),...linspace (0.9 * b, b 1.1 * 4));

创建一个参数结构数组,为每个参数指定名称和网格点。

参数(1)。Name =“一个”;参数(1)。价值=一个_grid; params(2).Name =“b”;参数(2)。价值=b_grid;

为模型创建一个默认的操作点规范,它指定了两个模型状态都是未知的,并且必须在裁剪的操作点中处于稳定状态。

Opspec = operspec(sys)
opspec =型号水箱的工作点规格。(时变组件评估在时间t = 0) : ---------- x已知稳态分钟马克斯dxMin dxMax  ___________ ___________ ___________ ___________ ___________ ___________ ___________ ( 1) watertank / PID控制器/集成商/连续/集成商0错误真的负无穷到正无穷负无穷到正无穷(2)watertank /水箱系统/ H 1假真的0正无穷正输入:没有  ---------- 输出:没有  ----------

默认情况下,findop在命令窗口中显示每个修整操作的操作点搜索报告。若要禁用报表显示,请创建修剪选项集并关闭操作点搜索报表显示。

opt = findopOptions(“DisplayReport”“关闭”);

使用指定的工作点规范、参数网格和选项集修剪模型。

[op,opreport] = findop(sys,opspec,params,opt);

findop为每个参数组合修剪模型。该软件只使用一个模型编译。人事处对应于指定参数网格点的操作点对象的3 × 4数组。

的第一行和第一列中查看工作点人事处

op (1, 1)
ans =模型水箱的工作点。(时间t=0时评估的时变组件)状态:---------- x ______(1.)水箱/PID控制器/积分器/连续/积分器1.4055(2.)水箱/水箱系统/H 10输入:无----------

由参数值导出已知状态下的批量修剪模型

这个例子展示了当指定的参数变化影响到用于修剪的已知状态时,如何批量修剪模型。

参数变化的批量修剪模型例如,模型被修整以满足包含未知状态的单个工作点规范。在其他情况下,模型状态是已知的修剪,但取决于变化参数的值。在这种情况下,您不能使用单个工作点规范批量修剪模型。必须为每个参数值网格点创建单独的规范。

打开Simulin金宝appk模型。

sys =“scdairframeTRIM”;open_system(系统)

在这个模型中,空气动力和力矩取决于速度,五美元,和发生率,\α美元

改变五美元而且\α美元参数,并创建一个6乘4的参数网格。

nA = 6;alpha值的百分比nV = 4;V值的百分比alphaRange = linspace(-20,20,nA)*pi/180;vRange = linspace(700,1400,nV);[alphaGrid,vGrid] = ndgrid(alphaRange,vRange);

因为一些已知的状态值的修剪取决于的值五美元而且\α美元,则必须为每个参数组合创建单独的工作点规范对象。

i = 1:nAj = 1:nV在模型中设置参数值。alpha_ini = alphaGrid(i,j);v_ini = vGrid(i,j);根据指定参数创建默认规格。Opspec (i,j) =操作规范(sys);指定哪些状态是已知的,哪些状态处于稳定状态。。opspec (i, j) .States(1)。已知= [1;1];opspec (i, j) .States(1)。SteadyState = [0;0];opspec (i, j) .States(3)。已知= [1;1];opspec (i, j) .States(3)。SteadyState = [0;1];opspec (i, j) .States(2)。已知= 1;opspec (i, j) .States(2)。SteadyState = 0;opspec (i, j) .States(4)。已知= 0;opspec (i, j) .States(4)。SteadyState = 1;结束结束

创建用于批量修剪的参数结构。为每个参数指定名称和值网格。

参数(1)。Name =“alpha_ini”;参数(1)。价值=一个lphaGrid; params(2).Name =“v_ini”;参数(2)。价值=vGrid;

使用指定的参数网格和操作点规范修整模型。当指定一个工作点规范数组和不断变化的参数值时,规范数组的尺寸必须与参数网格尺寸匹配。

opt = findopOptions(“DisplayReport”“关闭”);Op = findop(sys,opspec,params,opt);

findop为每个参数组合修剪模型。人事处是与指定参数网格点对应的工作点对象的6 × 4数组。

另请参阅

||

相关的话题