Simulink中MATLAB Function块if-else整数判断错误修正
修正Simulink MATLAB Function块中sec恒为1的逻辑错误
你的代码核心问题是条件判断的语法逻辑错误:sector == 1 || 2这种写法在MATLAB中会被解析为(sector == 1) || 2,而MATLAB里非零整数会被视为布尔值true,因此无论sector取0-12中的任何值,第一个if分支都会被触发,导致sec始终输出1。
修正方案1:补全完整的条件判断
将每个||两侧的判断逻辑补全,确保每一侧都是针对sector的比较:
if sector == 1 || sector == 2 sec = 1; elseif sector == 3 || sector == 4 sec = 2; elseif sector == 5 || sector == 6 sec = 3; elseif sector == 7 || sector == 8 sec = 4; elseif sector == 9 || sector == 10 sec = 5; elseif sector == 11 || sector == 12 sec = 6; else % 处理sector=0的情况,避免无匹配分支时变量未定义 sec = 0; end
修正方案2:用区间判断简化代码
利用数值区间进行判断,代码更简洁易读:
if sector >= 1 && sector <= 2 sec = 1; elseif sector >= 3 && sector <= 4 sec = 2; elseif sector >= 5 && sector <= 6 sec = 3; elseif sector >= 7 && sector <= 8 sec = 4; elseif sector >= 9 && sector <= 10 sec = 5; elseif sector >= 11 && sector <= 12 sec = 6; else sec = 0; % 处理sector=0的边界情况 end
修正方案3:数学计算直接生成结果
观察到sector的分组规律是每2个值对应一个sec,可以用数学公式直接计算,效率更高:
if sector >= 1 && sector <= 12 sec = ceil(sector / 2); else sec = 0; % 处理sector=0的情况 end
内容的提问来源于stack exchange,提问作者Trickk
相关产品推荐
相关产品推荐

