从我没有提供的条件选择算法返回的值?
A value returned from a conditional selection algorithm that I didn't provide?
在 Modelica 中,我构建了一个简单的映射(一对 case 结构),将 table 的 MxN 值减少为 table 的 5x5 值。但是,当我使用位于边界(行 = M 或列 = N)的输入进行模拟时,映射 returns“0”应该 return“5”。我包括了一个越界的情况,但是 returned 值应该是“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;
感谢任何想法!
您在第一部分中打错了字:
elseif ModuleCol > ArrayCols - 1 then
FractExposedTypeRow := 5;
应该是FractExposedTypeRow := ...
在 Modelica 中,我构建了一个简单的映射(一对 case 结构),将 table 的 MxN 值减少为 table 的 5x5 值。但是,当我使用位于边界(行 = M 或列 = N)的输入进行模拟时,映射 returns“0”应该 return“5”。我包括了一个越界的情况,但是 returned 值应该是“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;
感谢任何想法!
您在第一部分中打错了字:
elseif ModuleCol > ArrayCols - 1 then
FractExposedTypeRow := 5;
应该是FractExposedTypeRow := ...