0

在 Modelica 中,我构建了一个简单的映射(一对案例结构),以将 MxN 值表简化为 5x5 值表。但是,当我使用边界处的输入(行 = M 或列 = N)进行模拟时,映射在应该返回“5”时返回“0”。我包括了一个越界情况,但返回的值应该是“3”,而不是“0”;我从不指定“0”作为输出。

这可能是由于函数是时不变的,也许是缺乏初始条件?

这是代码:

model chooseTypeArrayPosition 
          Modelica.Blocks.Interfaces.IntegerInput ModuleRow "Module Row";
      Modelica.Blocks.Interfaces.IntegerInput ModuleCol "Module Column";
      Modelica.Blocks.Interfaces.IntegerInput ArrayRows "Rows in Array";
      Modelica.Blocks.Interfaces.IntegerInput ArrayCols "Columns in Array"; 

  output Modelica.Blocks.Interfaces.IntegerOutput FractExposedTypeRow;
  output Modelica.Blocks.Interfaces.IntegerOutput FractExposedTypeCol "Enumeration of FractExposed Column";
algorithm
  if ModuleCol > ArrayCols then
    FractExposedTypeCol := 3;
  elseif ModuleCol < 2 then
    FractExposedTypeCol := 1;
  elseif ModuleCol < 3 then
    FractExposedTypeCol := 2;
  elseif ModuleCol > ArrayCols - 1 then
    FractExposedTypeRow := 5;
  elseif ModuleCol > ArrayCols - 2 then
    FractExposedTypeCol := 4;
  else
    FractExposedTypeCol := 3;
  end if;

  if ModuleRow > ArrayRows then
    FractExposedTypeRow := 3;
  elseif ModuleRow < 2 then
    FractExposedTypeRow := 1;
  elseif ModuleRow < 3 then
    FractExposedTypeRow := 2;
  elseif ModuleRow > ArrayRows - 1 then
    FractExposedTypeRow := 5;
  elseif ModuleRow > ArrayRows - 2 then
    FractExposedTypeRow := 4;
  else
    FractExposedTypeRow := 3;
  end if;
end chooseTypeArrayPosition;

感谢您的任何想法!

4

1 回答 1

1

你在第一部分打错了:

elseif ModuleCol > ArrayCols - 1 then
    FractExposedTypeRow := 5;

应该FractExposedTypeRow := ...

于 2015-05-30T07:13:54.647 回答