核心内容摘要
【原神】她们为何泪眼婆娑?揭秘那些令人心疼的“翻白眼落泪”瞬间!
【电热耦合——锂电池集总参数热模型参数辨识】 Rs Cs Rc Cc GA算法辨识热参数 simulink热模型验证参数玩过锂电池热模型的朋友都知道参数辨识这活儿就像在玩密室逃脱——明明知道出口就在那儿但就是得找对钥匙。
今天咱们要对付的是集总参数模型里的四个狠角色Rs表面热阻、Cs表面热容、Rc核心热阻、Cc核心热容。
这四个参数直接决定了模型的预测精度但实测数据又不会直接告诉你它们的真值这时候就得祭出我们的秘密武器遗传算法GA。
先来看段MATLAB代码的适应度函数这是GA的核心战场function error thermal_fitness(params) % 参数解包 Rs params(
; Cs params(
; Rc params(
; Cc params(
; % 调用Simulink模型 simOut sim(battery_thermal_model, LoadExternalInput, on); % 获取仿真温度数据 simTemp simOut.logsout.get(T_core).Values.Data; % 计算与实验数据的均方误差 error mean((expData - simTemp).^
; end这段代码就像个尽职的裁判每次都会给GA生成的参数组合打分。
注意到我们直接调用Simulink模型进行在线仿真这种骚操作省去了导出导入数据的麻烦但代价是计算量有点大——不过现在谁电脑还没个多核CPU呢遗传算法的参数设置其实挺有意思这里有个小技巧options optimoptions(ga,... PopulationSize, 50,... MaxGenerations, 100,... FunctionTolerance, 1e-6,... PlotFcn, gaplotbestf); [optParams, fval] ga(thermal_fitness, 4, [], [], [], [], lb, ub, [], options);把种群规模控制在
之间效果最佳太小了容易早熟太大了算到地老天荒。
特别注意这里的边界约束lb和ub这可不是随便填的——比如Cs的值域通常在
J/(kg·K)之间晃悠乱设边界会让算法在错误的方向上狂奔。
【电热耦合——锂电池集总参数热模型参数辨识】 Rs Cs Rc Cc GA算法辨识热参数 simulink热模型验证参数当算法跑出结果后咱们得用Simulink模型来验证真伪。
举个栗子这是参数加载的关键步骤% 更新模型参数 set_param(battery_thermal_model/Rs, R, num2str(optParams(
)); set_param(battery_thermal_model/Cs, C, num2str(optParams(
)); % ...其他参数同理 % 运行验证仿真 simOut sim(battery_thermal_model);这时候如果看到仿真曲线和实测数据基本重合恭喜你今晚可以加鸡腿了。
不过别高兴太早记得检查参数物理意义是否合理——曾经有个哥们儿跑出负的热容值那场面简直比永动机还魔幻。
有个坑得特别注意Simulink模型里的热容单元如果是并联结构实际计算的等效热容可不是简单相加。
这时候需要手动推导下等效公式不然参数辨识出来的数值会带着系统误差满街跑。
最后给个实战建议先用全局搜索算法比如GA找到大致范围再用局部优化算法比如fmincon微调。
这种组合拳比单打独斗效率高得多毕竟参数空间里可能存在多个局部最优解别让算法在第一个山谷里就躺平了。