Matlab循环求解热流方程并存储Tw1、Tw2数组问题
解决Matlab循环中批量存储Tw1、Tw2结果的问题
问题根源
原代码未预先初始化存储数组,且未将每次循环计算的Tw1/Tw2结果按循环索引存入数组,导致每次循环的结果被覆盖,最终仅保留最后一次计算的单个值。
修正方案
- 预先初始化数组:在循环外创建与输入序列长度匹配的数组,用于存储每次循环的
Tw1、Tw2及制冷负荷结果。 - 按循环索引存储结果:使用循环变量
j作为数组索引,将符号变量转成数值后存入对应位置。 - 修正制冷负荷的存储逻辑:避免每次循环覆盖结果数组,改为按索引追加。
修正后的完整代码
% 预先初始化存储数组,长度与Tsol_N一致(j从2开始,索引对应) Tw1_results = zeros(size(Tsol_N)); Tw2_results = zeros(size(Tsol_N)); overall_cooling_load_results = zeros(size(Tsol_N)); for j = 2:numel(Tsol_N) i = Tsol_N(j); % 定义热流方程组 eqns_N = [H*AN*L*(i-Tw1) == k*AN*(Tw1-Tw2), k*AN*(Tw1-Tw2) == H1*AN*L*(Tw2-T2)]; % 求解方程组 S_N = solve(eqns_N, [Tw1 Tw2], 'Real', true); % 将符号结果转为数值,存入对应索引的数组 Tw1_results(j) = double(S_N.Tw1); Tw2_results(j) = double(S_N.Tw2); % 计算并存储制冷负荷 overall_cooling_load = H*AN*(S_N.Tw2 - T2); overall_cooling_load_results(j) = double(overall_cooling_load); end % 若不需要j=1的空值,可截取有效部分 Tw1_results = Tw1_results(2:end); Tw2_results = Tw2_results(2:end); overall_cooling_load_results = overall_cooling_load_results(2:end);
关键说明
- 初始化数组时用
zeros(size(Tsol_N))确保长度匹配,避免动态扩容影响效率。 - 使用循环变量
j作为索引,确保每次计算的结果存入数组的对应位置,不会被后续循环覆盖。 - 最后可根据需求截取
2:end的有效结果,去掉j=1的初始0值。
内容的提问来源于stack exchange,提问作者Chacko
相关产品推荐
相关产品推荐

