3

客观的

目前我正在尝试创建一个基于一系列状态空间模型的不确定系统,使用ucover. 为此,我的脚本基于文档“将响应族建模为不确定系统” ,该文档明确显示了基于单输入单输出系统 (SISO) 创建不确定系统的技术,但明确指出这也完全适用于 MIMO 系统。

技术细节

具体来说ucover,它支持 MIMO 系统的文档说明:

USYS = ucover(PARRAY,PNOM,ORD1,ORD2,UTYPE) returns an uncertain 
  system USYS with nominal value PNOM and whose range of behaviors 
  includes all LTI responses in the LTI array PARRAY. PNOM and PARRAY 
  can be SS, TF, ZPK, or FRD models. USYS is of class UFRD if PNOM
  is an FRD model and of class USS otherwise.

ORD1 and ORD2 specify the order (number of states) of each diagonal  
  entry of W1 and W2. If PNOM has NU inputs and NY outputs, ORD1 and ORD2
  should be vectors of length:  

UTYPE           ORD1          ORD2  
InputMult       NU-by-1       NU-by-1  
OutputMult      NY-by-1       NY-by-1  
Additive        NY-by-1       NU-by-1  

在我的情况下,我同时使用 2 个输入和 2 个输出,因此 ORD1 和 ORD2 都应该是 2 乘 1。我使用 8 作为 W1 和 W2 使用的状态数(只是因为,一旦出现此问题,我将尝试调整它排序)。

尝试

基于我尝试创建的 MIMO 示例的 SISO 示例,如下所示

noInputs=2;
noOutputs=2;
noOfStates=4;

Anom=rand(noOfStates,noOfStates);
Bnom=rand(noOfStates,noInputs);
Cnom=rand(noOutputs,noOfStates);
Dnom=rand(noOutputs,noInputs);
Pnom=ss(Anom, Bnom, Cnom, Dnom);


p1 = Pnom*tf(1,[.06 1]);              % extra lag
p2 = Pnom*tf([-.02 1],[.02 1]);       % time delay
p3 = Pnom*tf(50^2,[1 2*.1*50 50^2]);

Parray = stack(1,p1,p2,p3);
Parrayg = frd(Parray,logspace(-1,3,60));
[P,Info] = ucover(Parrayg,Pnom,[8 8]',[8 8]','InputMult');
Wt = Info.W1;
bodemag((Pnom-Parray)/Pnom,'b--',Wt,'r'); grid
title('Relative Gaps vs. Magnitude of Wt')

问题

文档中的图像不同,我的不确定模型(通过波特图时)仅在前导对角线上显示响应。请参阅屏幕截图以了解我的意思:

在此处输入图像描述

其中蓝色是单个模型,红色是不确定模型

问题

如何基于一系列正确覆盖所有输入和输出之间响应的 MIMO 状态空间模型创建不确定系统?

4

3 回答 3

0

如果您使用[8,8]'不确定性顺序结构ord1,ord2,matlab 将尝试在您的不确定性块中各有两个对角线块。

但是,matlab 仅支持对角加权函数(由于非凸搜索的一些复杂性),您绘制的是对角加权,它将乘以 2x2 全块 LTI 动态不确定性。W1 影响行,W2 影响不确定性的列。

因此,您应该检查不确定性的样本乘以权重,然后再检查工厂。然后您可以将其与不确定的模型堆栈进行比较。请注意,您的非对角线条目实际上为零(<1e-10),因此几乎是解耦的。但是 W1、W2 搜索会寻找 H-infinity 范数,因此您不会在波特图的每个块上看到完美的覆盖。它结合了所需最小不确定量的行/列(请参阅帮助文件中的示例)。这就是为什么您会在演示中看到每个权重 1 个图。

如果您想分别对影响每个块的每个不确定性进行建模,那么您需要形成一个新的增强 LFT,使得不确定性是对角线上的四个 1x1(标量)LTI 动态不确定性,那么您可以在 ord1 和 ord2 中有四个条目。

于 2015-05-28T19:36:51.783 回答
0

为了创建离散或连续时间不确定系统,您可以使用ussureal.

快速示例

定义一个不确定的螺旋桨半径

% Propeller radius (m)
rp = ureal('rp',13.4e-2,'Range',[0.08 0.16]);

定义不确定的连续时间系统

tenzo_unc = uss(A,Bw,Clocal,D,'statename',states,'inputname',inputs,'outputname',outputsLocal);

模拟阶跃响应:

N = 5;
% Prende alcuni campioni del sistema incerto e calcola bound su incertezze
for i=1:1:N
sys{i} = usample(tenzo_unc);
step(sys{i})
hold on
cprintf('text','.');
end

完整示例

使用 LQR 的四轴飞行器不确定线性化模型控制。代码可在此处获得

阶跃响应

在此处输入图像描述

闭环阶跃响应

在此处输入图像描述

    <script src="https://gist.github.com/GiovanniBalestrieri/f90a20780eb2496e730c8b74cf49dd0f.js"></script>

注意:如果您没有实用程序 cprintf,请将此脚本包含在您的文件夹中并使用它。

于 2017-03-24T16:41:31.943 回答
0

由于这是一个 MIMO 系统,因此您不应该逐个元素地比较事物。您正在使用输入乘法形式,因此正在创建的不确定系统的形式为

Pnom*(I + W1*Delta*W2),其中 Delta 是任何稳定的(在这种情况下为 2×2)系统,具有 ||Delta|| <= 1. 因此,要验证生成的不确定模型是否“覆盖”了您的系统数组,您应该考虑方程

Parray = Pnom*(I + W1*Delta*W2)

并求解 Delta。绘制它(例如,使用 SIGMA),您会看到它对于所有频率的幅度都小于 1。Matlab代码将是(按顺序将下面列出的所有内容相乘 - 我的乘法符号未出现在发布的答案中......)

 sigma(inv(W1)*inv(Pnom)*(Parrayg-Pnom)*inv(W2))

现在,使用您指定的语法,您将使用以下形式的权重 W1 和 W2:

W1 = [W1_11 0;
    0  W1_22]

W2 = [W2_11 0;
    0  W2_22]

您已经为所有非零条目指定了 8 阶拟合。当然,对于您的示例,这是矫枉过正的(尽管在更丰富的问题​​上,它可能没问题)。

我会尝试更简单,比如

ucover(Parrag,Pnom,3,[],'InputMult')

该语法将使形式的不确定模型

Pnom*(I + w1*Delta)

其中 w1 是一个标量,三阶系统。您仍然可以通过绘制 SIGMA(Delta) 来看到覆盖,即

sigma((1/w1)*inv(Pnom)*(Parrayg-Pnom))

我希望这会有所帮助。

于 2016-05-20T05:41:19.137 回答