MATLAB Simulink 模型:状态空间模型的实现
这段代码是一个 switch 语句,根据输入的 flag 值执行不同的操作。根据不同的 flag 值,分别执行以下操作:
- case 0: 初始化模型的大小,并返回模型的初始状态、输出和采样时间。
- case 1: 计算模型的导数,根据当前时间 t、状态变量 x 和输入变量 u,计算模型的导数并返回。
- case 3: 计算模型的输出,根据当前时间 t、状态变量 x 和输入变量 u,计算模型的输出并返回。
- case {2,4,9}: 该情况下什么也不做,将 sys 设置为空。
- default: 如果 flag 值不在以上情况中,则抛出错误。
下面是每行代码的解释:
- 定义函数
[sys,x0,str,ts]=mdlInitializeSizes,该函数用于初始化模型的大小和初始状态,并返回模型的大小、初始状态、状态变量的类型和采样时间。 - 创建一个 simsizes 对象 sizes,用于保存模型的大小信息。
- 设置连续状态变量的数量为 8。
- 设置离散状态变量的数量为 0。
- 设置输出变量的数量为 12。
- 设置输入变量的数量为 4。
- 设置是否有直接馈送为 0。
- 设置采样时间的数量为 1。
- 使用 simsizes 函数创建 sys 对象,并将上述定义的大小信息赋值给 sys。
- 设置初始状态变量 x0,包括 8 个初始状态。
- 设置状态变量的类型 str 为空。
- 设置采样时间 ts 为 [-1 0],表示不进行采样。
- 定义函数
sys=mdlDerivatives(t,x,u),该函数用于计算模型的导数。 - 定义模型中的参数 a1 和 a2。
- 定义两个随时间变化的幅值 Delta1 和 Delta2。
- 创建一个大小为 1x8 的零矩阵 FG,用于保存计算出来的 f1 和 g1 的值。
- 使用 for 循环计算 f1 和 g1 的值,并将其保存在 FG 矩阵中。
- 定义控制输入变量 omega、bil 和 bir 的值。
- 创建一个大小为 1x4 的零矩阵 Uf,用于保存计算出来的 Uf 的值。
- 使用 for 循环计算 Uf 的值,并将其保存在 Uf 矩阵中。
- 使用 sys(1)~sys(8) 分别计算 8 个状态变量的导数。
- 定义函数
sys=mdlOutputs(t,x,u),该函数用于计算模型的输出。 - 使用 for 循环计算 Uf 的值,并将其保存在 Uf 矩阵中。
- 将状态变量 x 的值依次赋给 sys(1)~sys(8)。
- 将 Uf 的值依次赋给 sys(9)~sys(12)。
原文地址: https://www.cveoy.top/t/topic/pjdf 著作权归作者所有。请勿转载和采集!