在Modelica中,我构造了一个简单的映射(一对案例结构),将MxN值表缩减为5x5值的表。但是当我使用位于边界处的输入(行= M或列= N)进行模拟时,映射返回" 0"何时它应该返回" 5"。我包含了一个越界案例,但返回的值应为" 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;
感谢您的任何想法!
答案 0 :(得分:1)
你在第一部分写了一个拼写错误:
elseif ModuleCol > ArrayCols - 1 then
FractExposedTypeRow := 5;
应为FractExposedTypeRow := ...