分享

基于Python的动态建模——状态空间

 基算仿真 2023-05-30 发布于江苏

线性时不变 (LTI) 系统的状态空间模型是离散或连续时间动态系统的线性表示。将模型转换为状态空间的形式是过程动态和控制分析中许多方法的基础。 

状态空间指以n个状态变量作为基底所组成的n维空间。

首先是状态空间模型的连续时间形式。

其中:

Rn表示一个在长度为 n 的实数向量集合。

同理对于输出y和输入u有:

对于状态转移矩阵A、输入矩阵B、输出矩阵C和输入输出矩阵D。

如果 A 的所有特征值都是负实数或具有复数特征值的负实部,则线性状态空间模型是稳定的。如果特征值的所有实部都是负数,则系统是稳定的,这意味着任何初始条件都以指数方式收敛到一个稳定的吸引点。如果任何实部为零,则系统将不会收敛到一个点,如果特征值为正,则系统是不稳定的并且将呈指数形式发散。

01

状态空间中的一阶系统

将一阶线性系统(没有时间延迟)转化为状态空间形式。

两边除以tp,并令x=y,x’=y',则状态空间形式为:

02

状态空间中的二阶系统

二阶过阻尼系统可以表示为串联的两个一阶线性系统。

状态空间的形式:

03

案例

通过确定矩阵 A、B、C 和 D,将以下三个方程式化为状态空间形式。并模拟每种模型的阶跃响应并确定系统是稳定的还是不稳定的。

1.

2.

3.

A、B、C、D的具体计算过程这里不再赘述。

使用Python将计算结果进行展示,这里使用到了scipy库中的signal函数。

import numpy as npfrom scipy import signal
# 问题1A = [-4.0]B = [2.0]C = [1.0]D = [0.0]sys1 = signal.StateSpace(A,B,C,D)t1,y1 = signal.step(sys1)
# 问题2A = [[-3.0,0.0],[-2.0,-3.0]]print(np.linalg.eig(A)[0])B = [[4.0],[0.0]]C = [0.5,0.5]D = [0.0]sys2 = signal.StateSpace(A,B,C,D)t2,y2 = signal.step(sys2)
# 问题3A = [[0.0,1.0],[-0.25,-0.5]]print(np.linalg.eig(A)[0])B = [[0.0],[0.75]]C = [1.0,0.0]D = [0.0]sys3 = signal.StateSpace(A,B,C,D)t = np.linspace(0,30,100)u = np.zeros(len(t))u[5:50] = 1.0 # first step inputu[50:] = 2.0 # second step inputt3,y3,x3 = signal.lsim(sys3,u,t)
import matplotlib.pyplot as pltplt.figure(1)plt.subplot(3,1,1)plt.plot(t1,y1,'r-',linewidth=3)plt.ylabel('Problem 1')plt.legend(['y'],loc='best')plt.subplot(3,1,2)plt.plot(t2,y2,'b--',linewidth=3)plt.ylabel('Problem 2')plt.legend(['y'],loc='best')plt.subplot(3,1,3)plt.plot(t3,y3,'k-',linewidth=3)plt.plot(t,u,'r-')plt.ylabel('Problem 3')plt.legend(['y','u'],loc='best')plt.show()

—— end ——

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多