如何计算动态系统的无穷范数(H)?

问题描述 投票:0回答:2

我试图获得两个动态系统的无穷范数(H):第一个是非受控系统,第二个是受控系统。 我在 Jupyter Notebook 上绘制了两个模型的时间和频率响应,如下:

enter image description here enter image description here

尽管如此,我想计算 infinity_norm (H_infinity) 和 H2_norm。有谁知道我该怎么做?或者有人可以建议我使用 python 上的任何命令来做到这一点? 我认为 H_infinity 范数是频谱的峰值,但我不确定。

python math dynamic controller controls
2个回答
1
投票

此处所解释,对于 SISO(单输入、单输出)系统,无穷范数是整个频率范围内的最大增益(输出/输入幅度的最大比率)。 然而,对于 MIMO 系统来说,事情就没那么简单了。

Python 控制系统库有一个函数

control.hinfsyn
,它计算闭环系统的 H-无穷控制器和无穷范数。但我不知道有任何现成的函数可以计算给定系统的无穷范数。

顺便说一句,MATLAB确实有这样的功能:

Inf_norm = norm(G,'inf');

但是,您也可以使用 control.freqresp 函数手动计算无穷大范数,并使用 numpy.linalg.svd 进行奇异值分解:

import numpy as np
from control import tf

# Define LTI system
num = [[[3], [2]], [[-2], [3]]]
den = [[[100, 10, 1], [1, 1]], [[20, 1], [5, 1]]]
sys = tf(num, den)

# Calculate frequency response over a wide range of frequencies
omega = np.logspace(-4, 2, 1001)
H = sys(omega * 1j)
assert(H.shape == (2, 2, 1001))

# Calculate all the singular values
singular_values = [np.linalg.svd(H[..., i], compute_uv=False)
                   for i in range(len(omega))]

# Find the highest
print(np.vstack(singular_values).max())

# Output:
# 4.082899055432674

这与我使用 MATLAB 范数函数得到的结果相同。


0
投票

Python

control
包还提供命令
hinfnorm
。然而,这个命令需要安装
slycot
包,过去我在让控制包正确识别某些子模块时遇到了问题,所以我不能提供任何保证。

© www.soinside.com 2019 - 2024. All rights reserved.