Matlab非稳态热传导迭代循环无法更新T_i矩阵问题求助
Matlab一维非稳态热传导迭代代码修正方案
问题原因
原代码中T_i的更新逻辑放在了迭代循环外部,所有时间步计算全程使用初始温度场计算,因此输出的T矩阵所有行数值完全相同。
修改后代码
function stainless_steel(~,~,~) clear,clc % 初始温度场,边界节点固定为0 T_i = [0 0 12.5 25 37.5 50 0]; k = 0.0162; cp = 0.5; rho = 8000; dt = 3; dx = 0.0125; t = 120; q = 20000; Fo = (k*dt)/(((dx)^2)*rho*cp); e_gen = q*(dt)/(rho*cp); n = t/dt; % 总迭代次数40次 T = zeros(n,7); for iteration = 1:n % 先赋值当前迭代步的边界温度 T(iteration,1) = 0; T(iteration,7) = 0; % 计算内部节点温度 for x = 2:6 T(iteration,x) = Fo*(T_i(x+1)+273.15 + T_i(x-1)+273.15) + (T_i(x)+273.15)*(1-2*Fo) + e_gen - 273.15; end % 更新温度场为当前步计算结果,用于下一次迭代 T_i = T(iteration,:); end disp(T) end
核心修改点
- 将
T_i的更新操作移到了单次迭代循环内部,每完成一个时间步的温度计算后,立刻将T_i替换为当前时间步的计算结果,下一次迭代直接使用上一步的温度场作为输入计算。 - 补充了边界节点的显式赋值逻辑,避免边界温度出现未定义的问题。
内容的提问来源于stack exchange,提问作者Carlos Puente
相关产品推荐
相关产品推荐

