主要内容

tunableSurface

为增益调度创建可调增益面

描述

tunableSurface让您参数化和调优获得时间,这是作为一个或多个调度变量的函数而变化的增益。

为了调优的目的,将可变增益参数化为平滑是很方便的获得表面形式的:

K n σ γ K 0 + K 1 F 1 n σ + + K F n σ ]

在哪里

  • σ是调度变量的向量。

  • nσ)是一个归一化函数(参见归一化输出参数的属性K).

  • γ比例因子(见归一化输出参数的属性K).

  • F1、……F是用户选择的基础函数。

  • K0、……K系数需要调整吗

可以将一般多项式展开中的项用作基函数。或者,当期望的形状Kσ)是已知的,您可以使用更具体的函数。然后你可以使用systune调整系数K0、……K,根据您的设计要求,在调度变量值的范围内。

例子

K= tunableSurface (名字K0initshapefcn创建可调增益表面:

K n σ γ K 0 + K 1 F 1 n σ + + K F n σ ]

可调表面K指定的基函数shapefcn一个离散的集合σ值(设计点)由。可调谐增益面具有可调谐系数K0、……K。增益值初始化为常数增益K0init。你可以结合K与其他静态或动态元件一起构建增益调度控制系统的闭环模型。或者,使用K类中的查找表参数化slTuner接口到Simulink®模型。然后,用systune调优K0、……K使闭环系统在选定的设计点满足您的设计要求。

K= tunableSurface (名字K0init创建一个平坦的表面与恒定的,可调的增益。这个语法等价于K0init tunableGain(名称)

例子

全部折叠

创建一个标量增益K它以二次函数的形式变化t

K t K 0 + K 1 n t + K 2 n t 2

这个增益面可以表示随时间变化的增益。系数 K 0 K 1 , K 2 是时变增益的可调参数。对于这个例子,假设t取值范围为0 ~ 40。在这种情况下,归一化函数是 n t t - 2 0 / 2 0

表示可调谐增益面Kt)在MATLAB®中,首先选择一个向量t作为系统设计点的值。例如,如果您的设计点是从时间t = 0到t = 40每5秒对时变系统进行快照,则使用以下采样网格:

T = 0:5:40;Domain = struct(“t”t);

为可变增益指定一个二次函数。

Shapefcn = @(x) [x,x²];

shapefcn匿名向量函数的句柄。向量中的每一项都给出了多项式展开中描述变量增益的一项。tunableSurface隐式地假设常数函数 f 0 t 1 ,所以不需要包含在shapefcn

创建可调增益面Kt).

K = tunableSurface()“K”1域shapefcn)
K =标量增益的可调曲面“K”,具有:*调度变量:t *基函数:t,t^2 *设计点:t值的1x9网格*归一化:默认(从设计点开始)

显示器总结了增益面的特性,包括设计要点和基函数。检查的属性K

得到(K)
BasisFunctions: @(x)[x,x^2]系数:[1x3 realp] SamplingGrid: [1x1 struct]归一化:[1x1 struct]名称:'K'

系数可调曲面的性质是可调系数数组, K 0 K 1 K 2 ] ,以数组值的形式存储realp块。

现在可以在控制系统模型中使用可调曲面。在MATLAB中进行调优,互联K使用其他控制系统元素,就像使用控制设计块创建可调控制系统模型一样。在Simulink®中进行调优,请使用setBlockParam为了使K中的可调块的参数化slTuner接口。当您调优模型或slTuner接口的使用systune,结果模型或接口包含系数的调优值 K 0 K 1 , K 2

调好系数后,可以使用viewSurf命令。对于本例,不进行调优,而是手动将系数设置为非零值。将所得增益视为时间的函数。

ktune = setData(K,[12.1,4.2,2]);viewSurf (Ktuned)

图包含一个轴对象。标题为增益K(t)的轴对象包含类型为line的对象。

viewSurf指定的调度变量值范围,将增益显示为调度变量的函数并存储在SamplingGrid增益面的性质。

这个例子展示了如何对标量增益进行建模K具有双线性依赖于两个调度变量。为此,您可以创建一个设计点网格,表示两个变量的独立依赖关系。

假设第一个变量α入射角在0到15度之间,第二个变量是什么V取值范围为300 ~ 600m /s。默认情况下,归一化变量为:

x α - 7 5 7 5 y V - 4 5 0 1 5 0

增益面建模为:

K α V K 0 + K 1 x + K 2 y + K 3. x y

在哪里 K 0 K 3. 是可调参数。

创建设计点的网格,(αV),它们呈线性间隔αV。这些设计点是用于调整增益面系数的调度变量值。它们必须与你对植物取样时的参数值相对应。

[alpha,V] = ndgrid(0:3:15 300:50:600);

这些数组,αV,表示两个调度变量的独立变化,每个调度变量都在其全范围内。将它们放入一个结构中,以定义可调曲面的设计点。

Domain = struct(“α”α,“V”, V);

创建描述双线性展开的基函数。

Shapefcn = @(x,y) [x,y,x*y];%或使用polybase ('canonical',1,2)

返回的数组中shapefcn,基函数为:

F 1 x y x F 2 x y y F 3. x y x y

创建可调增益面。

K = tunableSurface()“K”1域shapefcn);

可以将可调曲面用作Simulink模型中的查找表块或MATLAB函数块的参数化。或者,使用模型互连命令将其合并为在MATLAB中建模的控制系统中的可调元素。调优系数后,可以使用viewSurf命令。对于本例,不进行调优,而是手动将系数设置为非零值并查看结果增益。

ktune = setData(K,[100,28,40,10]);viewSurf (Ktuned)

图包含一个轴对象。标题为增益K(alpha,V)的轴对象包含一个类型为surface的对象。

viewSurf指定的值范围的增益曲面显示为调度变量的函数并存储在SamplingGrid增益面的性质。

使用在操作域中不形成规则网格的设计点创建增益面。增益面作为归一化调度变量的双线性函数变化 α N β N

K α N β N K 0 + K 1 α N + K 2 β N + K 3. α N β N

假设调度变量感兴趣的值如下 α β 对。

α β { - 0 9 0 0 5 - 1 5 0 6 - 1 5 0 9 5 - 2 5 0 5 - 3. 2 0 7 - 3. 9 0 3.

指定 α β 样本值作为向量。

Alpha = [-0.9;-1.5;-1.5;-2.5;-3.2;-3.9];Beta = [0.05;0.6;0.95;0.5;0.7;0.3];Domain = struct(“α”α,“β”,β);

而不是一个规则的网格 α β 值,这里系统在不规则间隔点上采样 α β 讨论。

情节(α,β,“o”

图包含一个轴对象。axes对象包含line类型的对象。

指定基函数。

Shapefcn = @(x,y) [x,y,x*y];

使用这些采样函数值创建增益面的可调模型。

K = tunableSurface()“K”1域shapefcn)
K =标量增益的可调曲面“K”,具有:*调度变量:alpha,beta *基函数:alpha,beta,alpha*beta *设计点:6x1 (alpha,beta)值网格*归一化:默认(从设计点开始)

域是六个元素的列表 α β 对。默认情况下,规范化会发生移位 α β 使每个变量的范围中心为0,并对它们进行缩放,使其范围从-1到1。

K.Normalization
ans =带有字段的结构体:InputOffset: [-2.4000 0.5000] InputScaling: [1.5000 0.4500] OutputScaling: 1

创建一个可调增益面,它接受两个调度变量并返回一个3 × 3增益矩阵。增益矩阵中的每一项都是两个调度变量的独立函数。

创建设计点的网格(α,V)

[alpha,V] = ndgrid(0:3:15 300:50:600);Domain = struct(“α”α,“V”, V);

创建描述曲面如何随调度变量变化的基函数。用一组基来描述中的双线性展开式αV

shapefcn = polyBasis(“规范”、1、2);

要创建可调曲面,请指定矩阵值增益曲面的初始值。当归一化调度变量均为零时,此值设置增益面的值。tunableSurface从您指定的初始值获取增益面的尺寸。因此,要创建一个3 × 3的增益矩阵,使用一个3 × 3的初始值。

K0init = diag([0.05 0.05 -0.05]);K0 = tunableSurface()“K”、K0init域,shapefcn)
K0 = 3x3增益矩阵的可调曲面“K”,具有:*调度变量:alpha,V *基函数:@(x1,x2)utFcnBasisOuterProduct(FDATA_,x1,x2) *设计点:6x7网格(alpha,V)值*归一化:默认(从设计点)

输入参数

全部折叠

可调谐增益表面的标识标签,指定为字符向量。tunableSurface的名称realp块,表示表面的可调系数。因此,您可以使用此名称来引用a中的可调增益系数一族控制系统的模型slTuner接口。

可调谐增益面中常数项的初始值,指定为标量或数组。的尺寸K0init确定增益面的I/O尺寸。例如,如果增益面表示双输入、双输出增益,则可以设置K0init = ones(2)。剩下的系数K1, K2,…总是有相同的尺寸K0。可调系数会自动扩展,这样每个I/O通道中的增益就可以独立调优。

例如,对于一个双输入、双输出的曲面,增益矩阵中的每一项都有一组展开系数。

每个条目Kij在可调增益矩阵中Knσ))由下式给出:

K j n σ K j 0 + K j 1 F 1 n σ + + K j F n σ

增益面调谐的设计点,指定为结构。该结构具有包含调度变量值的字段,您可以在这些值上对工厂进行采样以进行增益调度调优。例如,假设您想要调整增益,该增益作为两个调度变量的函数而变化,αV。在网格上线性化植物αV值,α=[0.5,0.10,0.15]和V=(700800900、1000)

。具体设计要点如下:

(α,V) = ndgrid((0.5, 0.10, 0.15),(700800900、1000));Domain = struct(“α”α,“V”, V);

设计点不必位于矩形或规则间隔的网格上(参见在不规则网格上获得表面).然而,为了获得最佳效果,使用涵盖所有操作条件的设计点。由于调谐只考虑这些设计点,在远离设计点的工作条件下,调谐增益调度的有效性是值得怀疑的。

用于根据调度变量对增益面进行建模的基函数,指定为函数句柄。与句柄关联的函数将调度变量的规范化值作为输入,并返回基函数值的向量。基函数总是在归一化范围[- 1,1]上运行。tunableSurface隐式地将调度变量规范化到此间隔。

例如,考虑调度变量值α=[0.5,0.10,0.15]和V=(700800900、1000)。下面的表达式为这些变量的双线性增益面创建基函数:

Shapefcn = @(x,y) [x y x*y];

shapefcn是一个匿名函数两个变量。基函数描述参数化增益 G α V G 0 + G 1 α N + G 2 V N + G 3. α N V N 在哪里αNVN规范化的调度变量(参见归一化的属性K).

您可以使用匿名函数来指定描述变量增益所需的任何基函数集。或者,您可以使用辅助函数为常用的展开自动生成基函数:

  • polyBasis-幂级数展开和切比雪夫展开。

  • fourierBasis-周期傅里叶级数展开。生成的基函数fourierBasis周期是这样一个增益面吗K由这些函数定义,满足K(1) =K(1)。创建增益面时使用tunableSurface,该软件将您指定的调度变量范围规范化到区间[- 1,1]。因此,如果使用周期基函数,则相应调度变量的采样范围必须恰好是一个周期。这个限制保证了基函数的周期性与调度变量的周期性相匹配。例如,周期变化的调度变量为0 ~ 2之间的角度π中对应的值也必须在0到2之间π

  • ndBasis-从低维扩展构建多维扩展。当您希望对不同的调度变量使用不同的基函数时,此函数非常有用。

有关它们生成的基函数的更多信息,请参阅这些函数的参考页面。

输出参数

全部折叠

可调谐增益面,返回为tunableSurface对象。该对象具有以下属性,用于存储有关增益面的系数、基函数和其他信息:

  • BasisFunctions-基函数,指定为函数句柄。当你创建增益面时,shapefcn输入参数设置此属性的初始值。

  • 系数-增益面可调系数,指定为数组值realp可调参数。的尺寸K0init以及基函数的个数shapefcn确定的尺寸K.Coefficients

    对于标量增益,K.Coefficients有尺寸(1) M + 1),在那里是基函数的个数。中的项K.Coefficients对应于可调系数K0、……K

    对于数组值的增益,每个系数扩展到的维度K0init。这些展开的系数水平连接在K.Coefficients。因此,举例来说,对于一个双输入双输出增益面,K.Coefficients有尺寸(2, 2 (M + 1))

    每个条目Kij在可调增益矩阵中Knσ))由下式给出:

    K j n σ K j 0 + K j 1 F 1 n σ + + K j F n σ

  • SamplingGrid-设计点的网格,指定为数据结构。当你创建增益面时,输入参数设置此属性的初始值。

  • 归一化-规格化偏移和缩放,指定为带有字段的结构:

    • InputOffset-每个调度变量的偏移向量。

    • InputScaling-每个调度变量的缩放因子向量。

    • OutputScaling-总增益的比例因子。

    一般来说,tunableSurface参数化的形式为:

    K σ OutputScaling K 0 + K 1 F 1 n σ + + K F n σ ]

    在哪里nσ)为归一化调度变量,由式给出:

    n σ σ InputOffset InputScaling

    tunableSurface对调度变量进行归一化,压缩调度变量的数值范围,提高优化过程的数值稳定性。默认情况下,OutputScaling= 1,且tunableSurface计算值InputOffsetInputScaling那张地图SamplingGrid每个调度变量的定义域为[- 1,1]。因此,n= 0在设计点范围的中心。

    您可以通过调整这些字段的值来更改默认的规范化。例如:

    • 如果你有一个已知的增益值为一个特定的设计点,你可以设置规范化。InputOffset如此......以至于......n= 0。然后你可以设置K0init到已知的增益值。

    • 如果要将调度变量限制为非负值,请设置规范化。InputOffset到设计网格中该变量的最小值。这个限制是有用的,例如,当基函数包含 σ

  • 名字-增益面名称,指定为字符向量。当你创建增益面时,名字输入参数设置此属性的初始值。

提示

  • 在MATLAB建模的控制系统中调整增益面®:将增益面与与设计点相对应的一系列工厂模型连接起来。例如,假设G这是一个数组吗K表示一个可变的积分时间。下面的命令构建一个闭环模型,您可以使用systune命令。

    C0 = tf(K,[10]);T0 = feedback(C0*G,1);
  • 要在Simulink中建模的控制系统中调整增益面:使用增益面来参数化查找表,矩阵插值或MATLAB函数块中。例如,假设ST0是一个slTuner接口到Simulink模型,以及GainTable接口中已调优块的名称。的参数化设置GainTable到可调增益面。

    ST0 = setBlockParam(“GainTable”、K);

    看到参数化增益表了解更多信息。

  • 当你使用writeBlockValue(Simulink控制设计)将调谐增益曲面写回Simulink模型,该软件使用codegen生成增益面的MATLAB代码。你可以用codegen请自行检查此代码。

版本历史

在R2015b中引入

Baidu
map