linmod
在工作点附近提取连续时间线性状态空间模型
语法
argout
= linmod('sys
')argout
= linmod('sys
',x,u)argout
= linmod('sys
',x,u,para)argout
= linmod('sys
',x,u,'v5')argout
= linmod('sys
',x,u,para,'v5')argout
= linmod('sys
',x,u,para,xpert,upert,'v5')
参数
| 从中提取线性模型的 Simulink® 系统的名称。 |
| 状态 ( x = Simulink.BlockDiagram.getInitialState('sys'); 然后,您可以通过编辑 如果状态包含不同的数据类型(例如, |
| 离散时间线性化模型的采样时间 |
| 可选参数,用于调用在 MATLAB® 5.3 版之前创建的扰动算法。调用此可选参数等效于调用 |
| 可选参数的三元素向量:
|
| 扰动值用于对模型的所有状态和输入执行扰动。默认值为 xpert = para(1) + 1e-3*para(1)*abs(x) upert = para(1) + 1e-3*para(1)*abs(u) 当模型具有使用 Model 模块的模型引用时,您必须使用 Simulink 结构体格式来指定 xpert = Simulink.BlockDiagram.getInitialState('sys'); 然后,您可以通过编辑 仅当通过调用 |
| 如果您指定如下的等式输出(左侧)端,
|
说明
注意
linmod
仅提供基本的线性化功能。要获得完整的线性化功能,请使用 Simulink Control Design™ 软件。有关详细信息,请参阅选择线性化工具 (Simulink Control Design)。
linmod
通过对模型中的每个模块分别进行线性化来计算线性状态空间模型。
linmod
从以 Simulink 模型描述的常微分方程组中获取线性模型。使用 Inport 和 Outport 模块在 Simulink 模块图中表示输入和输出。
默认算法对大多数模块使用预编程的分析模块雅可比矩阵,这样生成的线性化应该比通过对模块输入和状态进行数值扰动更准确。Simulink Control Design 文档中提供了具有预编程分析雅可比矩阵的模块列表,还按模块讨论了用来进行线性化的分析算法。
默认算法还允许对有问题的模块(如 Transport Delay 和 Quantizer)进行特殊处理。有关这些模块的详细信息和选项,请参阅这些模块的封装对话框。
附注
默认情况下,系统时间设置为零。对于依赖于时间的系统,您可以将变量 para
设置为二元素向量,其中第二个元素用于设置要获取线性模型的 t
值。
从非线性模型到线性模型的状态顺序保持不变。对于 Simulink 系统,可以使用以下等式获取包含每个状态关联的模块名称的字符向量变量:
[sizes,x0,xstring] = sys
其中 xstring
是字符串向量,它的第 i 行是与第 i
个状态关联的模块名称。图中的输入和输出按顺序编号。
对于单输入多输出系统,您可以使用例程 ss2tf
将它们转换为传递函数形式,或者使用 ss2zp
转换为零极点形式。您也可以使用 ss
将线性化模型转换为 LTI 对象。此函数生成状态空间形式的 LTI 对象,然后可以使用 tf
或 zpk
将该对象进一步转换为传递函数或零极点增益形式。
linmod
中的默认算法通过将模块的线性化替换为 Pade 逼近来处理 Transport Delay 模块。对于 'v5'
算法而言,将包含 Derivative 或 Transport Delay 模块的模型线性化可能比较麻烦。有关详细信息,请参阅 线性化模型。
包含一个或多个配置为使用局部求解器的引用模型的模型不支持线性化。有关详细信息,请参阅Use Local Solvers in Referenced Models。
示例
引用模型的线性化
您可以使用 linmod
从包含 Model 模块的 Simulink® 环境中提取线性模型。例如,打开引用模型 mdlref_dynamics
和顶层模型 mdlref_f14
。
open_system('mdlref_dynamics'); open_system('mdlref_f14');
在 mdlref_f14
模型中,Aircraft Dynamics Model 模块引用 mdlref_dynamics
模型。
要线性化 mdlref_f14
模型,请使用 linmod
命令。
[A,B,C,D] = linmod('mdlref_f14');
### Starting serial model reference simulation build. ### Successfully updated the model reference simulation target for: mdlref_dynamics Build Summary Simulation targets built: Model Action Rebuild Reason =========================================================================================== mdlref_dynamics Code generated and compiled. mdlref_dynamics_msf.mexa64 does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 34.251s
生成的状态空间模型对应于完整的 mdlref_f14
模型,包括引用模型。
对于包含 Model 模块的模型,您可以使用状态和输入工作点调用 linmod
。使用工作点时,状态向量 x
是指顶层模型和所有引用模型的总状态向量。必须按照结构体格式输入状态向量。要获取完整的状态向量,请使用 getInitialState
。
x = Simulink.BlockDiagram.getInitialState(
topModelName
)
提示
在普通模式下,linmod
命令将对引用模型内的模块应用逐模块线性化算法。如果 Model 模块在加速模式下,linmod
命令将使用数值扰动对引用模型进行线性化。由于在加速模式下对多速率的 Model 模块进行线性化存在限制,因此在对引用模型进行线性化时,应为 Model 模块引用的所有模型使用普通模式仿真。
使用 'v5' 算法进行线性化
调用包含 'v5'
参数的 linmod
命令将调用在 MATLAB 软件 5.3 版之前创建的扰动算法。此算法还允许您指定用于对模型的所有状态和输入执行扰动的扰动值。
[A,B,C,D]=linmod('sys',x,u,para,xpert,upert,'v5')
'v5'
选项的 linmod
命令进行线性化可能比较麻烦。进行线性化之前,应将这些模块替换为专门设计的模块,以避免出现问题。这些模块位于 Simulink Extras 库的 Linearization 子库中。您可以通过 Blocksets & Toolboxes 图标来访问 Extras 库:
对于 Derivative 模块,使用“切换的导数”进行线性化。
使用 Derivative 模块时,还可以尝试将该导数项并入其他模块中。例如,如果 Derivative 模块与 Transfer Fcn 模块串联,最好使用以下形式的单个 Transfer Fcn 模块来实现(尽管有时候不可能):
在此示例中,图中左侧的两个模块可用右侧的一个模块代替。
版本历史记录
在 R2007a 中推出
另请参阅
函数
dlinmod
|linmod2
|linmodv5
|linearize
(Simulink Control Design) |slLinearizer
(Simulink Control Design)
App
- 模型线性化器 (Simulink Control Design)
主题
- 选择线性化工具 (Simulink Control Design)
- 线性化非线性模型 (Simulink Control Design)
- Exact Linearization Algorithm (Simulink Control Design)