主要内容

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

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

当修剪模型使用findop,您可以指定一组要修剪模型的参数值。所有的值集合称为a参数网格参数样本findop计算参数网格中每个值组合的操作点。您可以更改多个参数,从而扩展参数网格维度。

哪些参数可以采样?

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

不同单一参数

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

例如,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,将参数样本指定为结构数组。该结构的每个参数的值都有一个条目。每个参数的结构与中描述的相同不同单一参数.您可以指定价值字段,将参数作为任意维度的数组。然而,大小价值字段必须匹配所有参数。所有参数的对应数组项,也称为参数网格点,必须映射到指定的参数组合。当软件修剪模型时,它为每个网格点计算一个操作点。

指定完整的网格

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

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

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

一个 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

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

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

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

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

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

创建一个1xN结构数组。

参数(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)。值= B;

参数变化的批量修剪模型

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

打开Simulink模型。

sys =“watertank”;open_system(系统)

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

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

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

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

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

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

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

选择= findopOptions (“DisplayReport”“关闭”);

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

[op, opreport] = findop (sys、opspec params,选择);

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

的第一行和第一列的操作点人事处

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

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

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

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

打开Simulink模型。

sys =“scdairframeTRIM”;open_system(系统)

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

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

nA = 6;alpha值的%数量nV = 4;V值的%数量alphaRange = linspace (20, -20 nA) *π/ 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) = operspec(系统);指定哪些状态是已知的,哪些状态处于稳态。。opspec (i, j) .States(1)。知道= (1,1);opspec (i, j) .States(1)。稳态= (0,0);opspec (i, j) .States(3)。知道= (1,1);opspec (i, j) .States(3)。稳态= [0,1];opspec (i, j) .States(2)。= 1;opspec (i, j) .States(2)。稳态= 0;opspec (i, j) .States(4)。知道= 0;opspec (i, j) .States(4)。稳态= 1;结束结束

为批量裁剪创建一个参数结构。为每个参数指定名称和值网格。

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

使用指定的参数网格和操作点规格修剪模型。当指定操作点规格和可变参数值的数组时,规格数组的尺寸必须与参数网格尺寸匹配。

选择= findopOptions (“DisplayReport”“关闭”);op = findop (sys、opspec params,选择);

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

另请参阅

||

相关的话题

Baidu
map