Simulink函数模块中如何逐时间步更新温度参数至阈值?
Simulink函数模块实现温度逐时间步更新解决方案
问题根源
你当前的代码存在两个核心问题:
- 每次调用函数时都会将
T重置为20,无法保留上一个时间步的温度值 while循环会在单次函数调用内直接完成所有升温操作,不符合"逐时间步更新"的要求
修正后的代码
function [delta_T,T] = fcn(u) persistent T_current % 用持久变量保存温度状态,跨时间步保留值 m = 100; T_max = 100; % 初始化:仅在第一次调用时设置初始温度 if isempty(T_current) T_current = 20; end delta_T = u/m; % 逐时间步更新温度,达到最大值后停止 if T_current < T_max T_current = T_current + delta_T; % 防止超过最大值 if T_current > T_max T_current = T_max; end end T = T_current; % 输出当前温度 end
关键说明
- 使用
persistent关键字声明T_current,让变量在函数多次调用(即不同时间步)之间保留值,不会每次重置 - 去掉了
while循环,改为每个时间步判断一次:如果当前温度未达最大值,就更新一次;达到后不再变化 - 增加了上限判断,避免温度超过
T_max
额外注意事项
- 若需要重置温度,可在Simulink中添加触发信号,或者在函数中增加重置逻辑(比如新增一个输入参数控制重置)
- 如果ΔT是固定值10,直接把
delta_T = 10替换掉delta_T = u/m即可
内容的提问来源于stack exchange,提问作者Ameen Mohamed Bassam
相关产品推荐
相关产品推荐

