首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Modelica_LinearSystems2中使用库OpenModelica时出错

在Modelica_LinearSystems2中使用库OpenModelica时出错
EN

Stack Overflow用户
提问于 2021-11-02 14:58:14
回答 1查看 154关注 0票数 1

我正在尝试使用Modelica_LinearSystem2库OpenModelica中的卡尔曼滤波器,但在我的测试模型中,该库的功能似乎没有正常工作。

为了找到问题,我从文档(LinearSystems2.StateSpace.%27constructor%27.fromABCDMatrices.html)中复制了代码示例

代码语言:javascript
复制
model test3

  Real A[1,1] = [1];
  Real B[1,1] = [1];
  Real C[1,1] = [1];
  Real D[1,1] = [0];

public
  Modelica_LinearSystems2.StateSpace ss;

algorithm
  ss := Modelica_LinearSystems2.StateSpace.'constructor'.fromABCDMatrices(A, B, C, D);


equation

end test3; 

当我单击check model时,会收到以下错误:

Modelica_LinearSystems2.StateSpace: 7:3-8:68:由于缺少绑定方程,无法推导出A的维数1.

这指的是行

代码语言:javascript
复制
Real A[:,size(A, 1)];

例如,当我预定义这个(和其他)矩阵时

代码语言:javascript
复制
Real A[4,4];

我知道错误了

test3的内部错误实例化失败,没有错误消息。

我的问题是:为什么是这样,我怎样才能防止这些错误?

EN

回答 1

Stack Overflow用户

发布于 2021-11-02 16:22:50

调查结果

看来Modelica_LinearSystems2只受Dymola的支持。他们的github储存库的登陆页面是:

请注意,已知的图书馆只与Dymola合作。

现在看来情况仍然是这样。至少在我的机器上,库Modelica_LinearSystems2 v2.4.1在OpenModelica v1.18.0中存在严重问题。大多数示例都有错误退出,或者什么也不做。

不过,问题中的代码在Dymola中不起作用。下面你可以找到一个解释和纠正的例子,成功地测试了Dymola。在所有工具中,基本问题应该是相同的,我希望一旦OpenModelica支持Modelica_LinearSystems2库,我的解决方案也能在它中工作。

原始答案(与Dymola用户最相关)

示例代码的问题是,在执行模拟时,Modelica工具必须知道向量、矩阵和数组的大小,而不是在调用函数时。由于您正在构建模型,因此该工具假设您想要模拟它。

代码实例化StateSpace记录ssss保存矩阵ABCD。只要您不给ss分配任何东西,就不知道它们的大小。当然,有一种算法可以设置ss,但这是在模拟过程中发生的。在翻译过程中,无法确定ss中矩阵的大小。因此,典型的Modelica工具要求您使用绑定等式。

要使您的剪短工作,您可以将其更改为:

代码语言:javascript
复制
model Demo
  Real A[1,1] = [1];
  Real B[1,1] = [1];
  Real C[1,1] = [1];
  Real D[1,1] = [0];
  Modelica_LinearSystems2.StateSpace ss = Modelica_LinearSystems2.StateSpace.'constructor'.fromABCDMatrices(A, B, C, D);
end Demo;

请注意,ss现在有一个绑定方程。因此,可以确定ss内部矩阵的大小。

问题是,如果您真的想使用您的StateSpace记录运行模拟。通常,线性系统库中的函数在Modelica函数中使用。在这种情况下,代码可以如下所示:

代码语言:javascript
复制
function demo
  output Modelica_LinearSystems2.StateSpace ss;
protected
  Real A[1,1] = [1];
  Real B[1,1] = [1];
  Real C[1,1] = [1];
  Real D[1,1] = [0];
algorithm
  ss = Modelica_LinearSystems2.StateSpace.'constructor'.fromABCDMatrices(A, B, C, D);
end demo;

我建议查看包Modelica_LinearSystems2.Examples.StateSpace中的各种示例,以正确使用StateSpace记录。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69812521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档