在modelica中,为了求解描述同步电机状态空间方程的der(X)=AX+Bu,我在技术上被迫给出向量u的初值(这个值是由机器的稳态方程得到的)。初始化后,向量u将发生变化。u是电压矢量,X矢量是磁通,A是电感矢量。
发布于 2020-04-06 09:23:22
这些方程在Modelica模型中通常是不明显的.
我建议只对模型线性化,这将给你A,B(如果你也有输出C,D)-matrices。
请注意,与您所写的内容相比,线性化在一般情况下略有不同。
der(X)=A*(X-X0)+B*(U-U0);
当线性化在X0,U0,假设X0时,U0是稳态的.如果X0不是一个稳定状态点,您将得到:
der(X)-X0_der=A*(X-X0)+B*(U-U0);
其中X0_der是X0的导数。加上明确的时间依赖性会使它变得更加混乱。
发布于 2020-04-06 11:58:37
您确定要在初始化后更改u
吗?如果在模拟开始之前输入值在0时发生变化,那么这对模型有什么影响?通常您初始化状态,而不是输入。
但是,为状态空间模型(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
如何在一段时间后改变其值,我提供了一个示例性的公式。
https://stackoverflow.com/questions/61021049
复制相似问题