首页 > 解决方案 > 同步电机状态空间方程的局部化

问题描述

在 modelica 中,为了求解描述同步电机状态空间方程的 der( X )= AX + Bu,我在技术上被迫给出向量u的初始值(该值由电机的稳态方程获得)。初始化后,向量u会发生变化。如何在 Modelica 中实现它? u是电压矢量,X是磁通矢量,A是电感矢量。

标签: modelinitializationmodelica

解决方案


您确定要u在初始化后进行更改吗?如果输入值在仿真开始前的 0 时刻发生变化,这会对模型产生什么影响?通常你初始化状态,而不是输入。

但是,Modelica 标准库具有用于状态空间模型的模块 ( Modelica.Blocks.Continuous.StateSpace)。您可以直接使用它,或者将其作为灵感来构建您自己的模型(由于更复杂的初始化,您显然正在处理)。

您的模型可能如下所示:

model MyStateSpace

  parameter Real A[:, nx]=[1, 0; 0, 1] "System matrix";
  parameter Real B[nx, :]=[1; 1] "Input matrix";
  parameter Real C[:, nx]=[1, 1] "Output matrix";
  parameter Real D[ny, nu]=zeros(size(C, 1), size(B, 2)) "Feedthrough matrix";

  Real u[nu] "Input vector";
  Real x[size(A, 1)] "State vector";
  output Real y[size(C, 1)] "Output vector";

protected 
  final parameter Integer nx = size(A, 1) "number of states";
  final parameter Integer ny = size(C, 1) "number of outputs";
  final parameter Integer nu = size(B, 2) "number of inputs";

initial equation 

  x = {1, 0};

  /* put your equations for initialization here */

equation 

  u = if time > 0.1 then { sin(time) } else { 7 };

  der(x) = A*x + B*u;
  y = C*x + D*u;

end MyStateSpace;

在该initial equation部分中,您可以将方程式用于初始化。在这个例子中我初始化了x,没有u。为了说明u在一定时间后如何改变它的值,我包含了一个示例性方程。


推荐阅读