松弛法求解给定边界条件的泊松方程
一、问题描述
一块 4cm x 3cm 的板,表面的散热忽略不计,四边温度给定,除一条长边温度为 100◦C 外,其他三条边的温度为 20◦C。计算其稳定的温度场。
采用迭代法计算时,注意采用不同的松弛因子,并比较收敛速度,观察在不同的网格尺度下,最佳松弛因子的变化。
二、解题思路
本题为给定边界条件的泊松方程的求解问题。
采用 SOR 松弛法:
其中
β
=
Δ
x
Δ
y
\beta = \frac{\Delta x}{\Delta y}
β=ΔyΔx
用 matlab 编写函数
f
u
n
c
t
i
o
n
n
=
S
O
R
(
w
)
function \quad n = SOR(w)
functionn=SOR(w)
其中参数 w 为松弛因子 ,返回值 n 为收敛所需要的迭代次数 。判断收敛的条件为
∑ i , j ( T i , j n + 1 − T i , j n ) 2 < ϵ \sum_{i,j} (T_{i,j}^{n+1} - T_{i,j}^n)^2 < \epsilon i,j∑(Ti,jn+1−Ti,jn)2<ϵ
function n = SOR(w)
xl = 1;
yl = 1;
n = 30;
hx = xl/n;
hy = yl/n;
T = zeros(n);
f = zeros(n);
T(:,1)=20;
T(:,end)=20;
T(1,:)=20;
T(end,:) = 100;
e = 1;
while(e >0.0001)
n = n+1;
T1 = sor(T,f,w,hx,hy,1);
e = sum((T1(:)-T(:)).^2);
T = T1;
end
contour(T,100);
function T = sor(T,f,w,dx,dy,N)
b = dx/dy;
B2 = b*b;
DX2 = dx*dx;
C = w/(2*(1+B2));
for t = 1:N
for i =2:size(T,1)-1
for j = 2:size(T,1)-1
T(i,j) = (1-w)*T(i,j) + C*(T(i+1,j)+T(i-1,j) + ...
B2*(T(i,j+1)+T(i,j-1))+DX2*f(i,j));
end
end
end
结果
不同网格尺度下最佳松弛因子的变化
可见随着网格数增加 ,最佳松弛因子随之增大 ,趋向 2.0