c++ - 我尝试使用 matlab 创建被动电池平衡,但我的电池 4 中的充电状态无法平衡
问题描述
Below is the code in my matlab function
我试图在 4 个电池单元中获得最低充电状态并尝试平衡电池,以使所有电池处于相似的充电状态范围内,但电池 4 工作不正常,而电池 1 -3 工作正常。
function [y1, y2, y3, y4] = fcn(s1,s2,s3,s4)
s1 = int16(s1);
s2 = int16(s2);
s3 = int16(s3);
s4 = int16(s4);
a = min([s1 s2 s3 s4]);
if(s1 == a)
if(s1 == a && s4 == a)
y1 = 0;
y2 = 1;
y3 = 1;
y4 = 0;
elseif(s1 == a && s3 == a)
y1 = 0;
y2 = 1;
y3 = 0;
y4 = 1;
elseif(s1 == a && s2 == a)
y1 = 0;
y2 = 0;
y3 = 1;
y4 = 1;
elseif(s1 == a)
y1 = 0;
y2 = 1;
y3 = 1;
y4 = 1;
else
y1 = 0;
y2 = 0;
y3 = 0;
y4 = 0;
end
elseif(s2 == a)
if(s2 == a && s4 == a)
y1 = 1;
y2 = 0;
y3 = 1;
y4 = 0;
elseif(s2 == a && s3 == a)
y1 = 1;
y2 = 0;
y3 = 0;
y4 = 1;
elseif(s2 == a && s1 == a)
y1 = 0;
y2 = 0;
y3 = 1;
y4 = 1;
elseif(s2 == a)
y1 = 1;
y2 = 0;
y3 = 1;
y4 = 1;
else
y1 = 0;
y2 = 0;
y3 = 0;
y4 = 0;
end
elseif(s3 == a)
if(s3 == a && s4 == a)
y1 = 1;
y2 = 1;
y3 = 0;
y4 = 0;
elseif(s3 == a && s2 == a)
y1 = 1;
y2 = 0;
y3 = 0;
y4 = 1;
elseif(s3 == a && s1 == a)
y1 = 0;
y2 = 1;
y3 = 0;
y4 = 1;
elseif(s3 == a)
y1 = 1;
y2 = 1;
y3 = 0;
y4 = 1;
else
y1 = 0;
y2 = 0;
y3 = 0;
y4 = 0;
end
elseif(s4 == a)
if(s4 == a && s3 == a)
y1 = 1;
y2 = 1;
y3 = 0;
y4 = 0;
elseif(s4 == a && s2 == a)
y1 = 1;
y2 = 0;
y3 = 1;
y4 = 0;
elseif(s4 == a && s1 == a)
y1 = 0;
y2 = 1;
y3 = 1;
y4 = 0;
elseif(s4 == a)
y1 = 1;
y2 = 1;
y3 = 1;
y4 = 0;
else
y1 = 0;
y2 = 0;
y3 = 0;
y4 = 0;
end
else
y1 = 0;
y2 = 0;
y3 = 0;
y4 = 0;
解决方案
min()
有一个可选的第二个输出,它返回初始数组中最小值的位置。因此,您可以删除所有这些 if 语句并将其替换为
[a, idx] = min([s1, s2, s3, s4]);
y = ones(1, 4);
y(idx) = 0;
那么您的 y1, y2, ... 只是该向量中的第一个、第二个、... 元素。这肯定有助于发现您遇到的任何其他问题。
推荐阅读
- java - OpenAPI 生成器 spring-boot 和 delegatePattern
- netsuite - 使用 SuiteScript 创建托运库存项目时出错
- python - Python pandas 字典上的月份分割
- cypress - 赛普拉斯测试框架未使用 npm 安装
- wordpress - 在 wordpress 中显示子类别
- jquery - 选择一个元素以在 jQuery 中显示错误消息
- reactjs - 开玩笑拒绝功能失败
- reactjs - 我应该为我的 Web 应用程序使用另一个数据库吗?
- php - 短信 tm4b 账户余额请求
- javascript - 在 ngFor 中创建的组件没有正确更新