modalreal
说明
[___] = modalreal( 根据一个或多个名称-值参量指定的选项,返回模态实现。使用这些选项来控制模块大小,并对与复数对相关的 2×2 模块进行归一化处理。sys,Name=Value)
对于稀疏模型,该语法会根据已计算的极点子集返回一个截断的模态实现。该子集由 Focus 和 MaxOrder 选项控制。 (自 R2026a 起)
示例
pendulumCartSSModel.mat 包含小车上倒立摆的状态空间模型,其输出为小车位移 和摆角 。控制输入 u 是作用于小车的水平力。
首先,将状态空间模型 sys 加载到工作区。
load('pendulumCartSSModel.mat','sys');
将 sys 转换为模态形式并提取块大小。
[msys,blks,TL,TR] = modalreal(sys)
msys =
A =
x1 x2 x3 x4
x1 0 0 0 0
x2 0 -0.05 0 0
x3 0 0 -5.503 0
x4 0 0 0 5.453
B =
u1
x1 1.875
x2 6.298
x3 12.8
x4 12.05
C =
x1 x2 x3 x4
y1 16 -4.763 -0.003696 0.003652
y2 0 0.003969 -0.03663 0.03685
D =
u1
y1 0
y2 0
Continuous-time state-space model.
Model Properties
blks = 4×1
1
1
1
1
TL = 4×4
0.0625 1.2500 -0.0000 -0.1250
0 4.1986 0.0210 -0.4199
0 0.2285 -13.5873 2.4693
0 -0.2251 13.6287 2.4995
TR = 4×4
16.0000 -4.7631 -0.0037 0.0037
0 0.2381 0.0203 0.0199
0 0.0040 -0.0366 0.0369
0 -0.0002 0.2015 0.2009
msys 是 sys 的模态实现,blks 表示对角线上的模块大小,而 TL 和 TR 表示模块对角化变换矩阵。
例如,在此示例中,请考虑以下具有双极点和密集极点簇的系统:
创建该系统的 zpk 模型,并使用函数 modalreal 获得模态实现。
sys = zpk([1 -1],[0 -10 -10.0001 1+1i 1-1i 1+1i 1-1i],100); [msys1,blks1] = modalreal(sys); blks1
blks1 = 3×1
1
4
2
msys1.A
ans = 7×7
0 0 0 0 0 0 0
0 1.0000 2.1220 0 0 0 0
0 -0.4713 1.0000 1.5296 0 0 0
0 0 0 1.0000 1.8439 0 0
0 0 0 -0.5423 1.0000 0 0
0 0 0 0 0 -10.0000 4.0571
0 0 0 0 0 0 -10.0001
msys1.B
ans = 7×1
0.1600
-0.0052
0.0201
-0.0975
0.2884
0
4.0095
sys 在 s = -10 和 s = -10.0001 处各有一对极点,并在 s = 1+i 和 s = 1-i 处各有一个重数为 2 的复极点。因此,模态形式 msys1 是一个状态空间模型,其中针对 s = -10 附近的两个极点,设有一个大小为 2 的模块;针对复特征值,设有一个大小为 4 的模块。
现在,通过提高块对角化变换的条件数,将 s = -10 附近的两极分离。例如,在此示例中,将 SepTol 设置为 1e-10。
[msys2,blks2] = modalreal(sys,SepTol=1e-10); blks2
blks2 = 4×1
1
4
1
1
msys2.A
ans = 7×7
0 0 0 0 0 0 0
0 1.0000 2.1220 0 0 0 0
0 -0.4713 1.0000 1.5296 0 0 0
0 0 0 1.0000 1.8439 0 0
0 0 0 -0.5423 1.0000 0 0
0 0 0 0 0 -10.0000 0
0 0 0 0 0 0 -10.0001
msys2.B
ans = 7×1
105 ×
0.0000
-0.0000
0.0000
-0.0000
0.0000
1.6267
1.6267
A 矩阵的 msys2 部分包含针对 s = -10 附近极点的独立对角元素。随着条件数的增大,B 矩阵中会出现一些非常大的值。
例如,考虑以下具有复数成对极点和密集极点簇的系统:
创建该系统的 zpk 模型,并使用函数 modalreal 获得模态实现。
sys = zpk([1 -1],[0 -10 -10.0001 3+4i 3-4i],100); [msys1,blks1] = modalreal(sys); blks1
blks1 = 3×1
1
2
2
msys1.A
ans = 5×5
0 0 0 0 0
0 3.0000 8.7637 0 0
0 -1.8257 3.0000 0 0
0 0 0 -10.0000 8.8001
0 0 0 0 -10.0001
msys1 是一个状态空间模型,其中在 s = -10 附近有两个极点,对应一个大小为 2 的模块;此外,在 s = 3 +4i 和 s = 3-4i。
您可以使用 Normalize 选项对 2×2 模块的值进行归一化,以显示实际的极点值。此外,放宽模块对角化变换的相对精度要求,以便分离靠近 s = -10 的模块。
[msys2,blks2] = modalreal(sys,Normalize=true,SepTol=1e-10); blks2
blks2 = 4×1
1
2
1
1
msys2.A
ans = 5×5
0 0 0 0 0
0 3.0000 4.0000 0 0
0 -4.0000 3.0000 0 0
0 0 0 -10.0000 0
0 0 0 0 -10.0001
对于复极点,此选项将复极点 的 2×2 模块归一化为 。
自 R2026a 起
本示例演示了如何使用 modalreal 获取稀疏模型的截断模态实现。
加载稀疏模型。
load flowmeterSparse.mat
size(sys)Sparse state-space model with 5 outputs, 1 inputs, and 9669 states.
该稀疏模型包含 9669 个状态。默认情况下,modalreal 会为稀疏模型计算模值最小的前 1000 个极点,这可能会耗费较长时间。计算模态实现时,您会发现 modalreal 返回的实现大小为 1000。
[msys,blks,TL,TR] = modalreal(sys); size(msys)
State-space model with 5 outputs, 1 inputs, and 1000 states.
您可以使用 Focus 和 MaxOrder 选项来限制计算极点的子集。例如,计算频率范围为 0 rad/s 至 250 rad/s 内的模态实现值。
[msys2,blks2,TL2,TR2] = modalreal(sys,Focus=[0 250]); size(msys2)
State-space model with 5 outputs, 1 inputs, and 33 states.
将截断实现的频率响应与原始稀疏模型进行比较。
sigmaplot(sys,msys,".-",msys2,"--",w) legend("Original model","Truncated realization (1000 modes)",... "Truncated realization (33 modes)")

使用此工作流可快速获得稀疏模型的截断模态实现。为了获得更大的灵活性,请先使用 reducespec 获得一个降阶模型,然后对结果应用 modalreal。
输入参数
动态系统,指定为 SISO 或 MIMO 动态系统模型。您可以使用的动态系统包括:
连续时间或离散时间数值 LTI 模型,如
tf(Control System Toolbox)、zpk(Control System Toolbox)、ss(Control System Toolbox) 或pid(Control System Toolbox) 模型。广义或不确定的 LTI 模型,如
genss(Control System Toolbox) 或uss(Robust Control Toolbox) 模型。(使用不确定模型需要 Robust Control Toolbox™ 软件。)稀疏状态空间模型,
sparss(Control System Toolbox) 或mechss(Control System Toolbox)。 (自 R2026a 起)对于稀疏模型,当您希望快速获得截断模态形式时,
modalreal会很有帮助。为了获得更大的灵活性,请先使用reducespec(Control System Toolbox) 获得一个降阶模型,然后对结果应用modalreal。
您可以使用频率响应数据模型,如 frd (Control System Toolbox) 模型。
名称-值参数
以 Name1=Value1,...,NameN=ValueN 的形式指定可选参量对组,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。
示例: [msys,blks] = modalreal(sys,Normalize=true)
块对角化的相对精度,指定为介于 0 和 1 之间的标量。
此选项将块对角化变换的条件数限制在约 SepTol/eps 左右。增加 SepTol 的值有助于生成更小的模块,但会以牺牲精度为代价。
对 1×1 和 2×2 对角块进行归一化,指定为逻辑值 0 (false) 或 1 (true)。
当 Normalize 等于 true 时,该函数会对该模块进行归一化处理,以显示极点值。
对于显式模型,函数将与复数对 a ± jb 相关的 2×2 模块归一化为 。
对于描述符模型,函数执行以下归一化操作:
将 1×1 模块归一化为:Aj = a,Ej = 1。
将 2×2 模块归一化为:Aj = ,Ej = I。
自 R2026a 起
感兴趣的频率范围,指定为 [fmin,fmax] 形式的向量。当您为该属性指定一个值时,算法将仅计算该频率范围内的模态。
默认情况下,焦点未指定 ([0 inf]),算法会计算模值最小的 MaxOrder 模式。
自 R2026a 起
模态逼近的最高阶数,指定为一个正整数。该值限制了克雷洛夫-舒尔迭代 ([1] (Control System Toolbox)) 计算的特征值个数,以及原始稀疏模型的模态逼近阶数。
自 R2026a 起
在克雷洛夫-舒尔迭代中用于辨识收敛特征值的容差,指定为一个正标量。
自 R2026a 起
用于评估和匹配 DC 分量的频率,指定为一个非负标量。
对于包含积分器的模型,由于 DC 增益为无穷大,因此无法在 DC 条件下评估模态贡献。要评估不同频率下的模态贡献和匹配增益,请将该属性设置为正值。该属性的默认值对应于真正的 DC 值。
自 R2026a 起
输入缩放因子,指定为长度为 Nu 的向量,其中 Nu 是原始模型 sys 中的输入数量。
使用此选项可在 sys 中突出显示特定的输入通道。软件对缩放后的系统的模态贡献进行了评估。
自 R2026a 起
输出缩放因子,指定为长度为 Ny 的向量,其中 Ny 是原始模型 sys 中的输出数量。
使用此选项可在 sys 中突出显示特定的输出通道。软件对缩放后的系统的模态贡献进行了评估。
自 R2026a 起
显示或隐藏进度报告,指定为 "off" 或 "on"。
输出参量
动态模型的模态状态空间实现,以 ss (Control System Toolbox) 模型对象的形式返回。msys 是一种实现形式,其中 A 或 (A,E) 为块对角矩阵,且每个块分别对应一个实极点、一对复极点或一组重复极点。
模块对角实现中的模块大小,以向量形式返回。
块对角化变换的左侧矩阵,以矩阵形式返回。
对于普通的 LTI 模型,
TL是一个 Nx×Nx 的矩阵,其中 Nx 是模型中的状态数sys对于稀疏模型,
TL是一个 nc 行 Nx 列的矩阵,其中 nc 是计算出的模态组件个数。对于mechss模型,TL对应于等效的一阶表示sparss(sys)。 (自 R2026a 起)
该算法将模型的状态空间实现(A、B、C、D、E)转换为块对角矩阵(Am、Bm、Cm、Dm、Em),其表达式如下:
对于显式状态空间模型
对于描述子状态空间模型
当输入模型 sys 不是状态空间模型时,该函数会为该参量返回空值 []。
块对角化变换的右侧矩阵,以矩阵形式返回。
对于普通的 LTI 模型,
TR是一个 Nx×Nx 的矩阵,其中 Nx 是模型中的状态数sys对于稀疏模型,
TR是一个 Nx 行 nc 列的矩阵,其中 nc 是计算出的模态组件个数。对于mechss模型,TR对应于等效的一阶表示sparss(sys)。 (自 R2026a 起)
该算法将模型的状态空间实现(A、B、C、D、E)转换为块对角矩阵(Am、Bm、Cm、Dm、Em),其表达式如下:
对于显式状态空间模型
对于描述子状态空间模型
当输入模型 sys 不是状态空间模型时,该函数会为该参量返回空值 []。
参考
[1] Stewart, G. W. “A Krylov--Schur Algorithm for Large Eigenproblems.” SIAM Journal on Matrix Analysis and Applications 23, no. 3 (January 2002): 601–14. https://doi.org/10.1137/S0895479800371529.
版本历史记录
在 R2023b 中推出现在,您可以使用 modalreal 来计算稀疏状态空间模型的截断模态形式。当您希望快速获得稀疏模型的截断模态形式时,这会很有帮助。
为了获得更大的灵活性,请先使用 reducespec (Control System Toolbox) 获得一个降阶模型,然后对结果应用 modalreal。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)