一、数值求解如下正方形域上的 Poisson 方程边值问题 { −(ᵱ2ᵆᵱᵆ2 + ᵱ2ᵆᵱᵆ2) = f(x, y)= 2,0 < x, y < 1ᵆ(0, ᵆ)= ᵆ(1, ᵆ)= ᵆ(1 − ᵆ), 0 ≤ ᵆ ≤ 1ᵆ(0,ᵆ) = ᵆ(ᵆ, 1)= 0, 0≤ ᵆ ≤ 1 用椭圆型第一边值问题的五点差分格式得到线性方程组为 4ᵆᵅ,ᵅ − ᵆᵅ−1,ᵅ−ᵆᵅ+1,ᵅ − ᵆᵅ,ᵅ−1 − ᵆᵅ,ᵅ+1 = ℎ2ᵅᵅᵅ 1≤ ᵅ,ᵅ ≤ ᵄᵆ0,ᵅ = ᵅℎ(1 − ᵅℎ),ᵆᵄ+1,ᵅ = ᵅℎ(1− ᵅℎ) ᵆᵅ,0 = 0, ᵆᵅ,ᵄ+1 = 0 0≤ ᵅ,ᵅ ≤ ᵄ + 1 写成矩阵形式Au =f。其中[] A =[ ᵃ11−ᵃ−ᵃᵃ22⋱⋱⋱−ᵃ−ᵃᵃᵄᵄ ] u = [ᵆ1ᵆ2⋮ᵆᵄ] f = [ᵄ1ᵄ2⋮ᵄᵄ] A = [4−1−14⋱⋱⋱−1−14] ᵆ1 = (u1,1, u2,1,⋯, u N,1)ᵄ ᵆ2 = (u1,2,u2,2,⋯, u N,2)ᵄ ⋯⋯ ᵆᵄ = (u1,ᵄ,u2,N,⋯, u N,N)ᵄ ᵄ1 = ℎ2(ᵅ1,1,ᵅ2,1, ⋯ᵅᵄ ,1)ᵄ + ᵆ0 + ᵆ2 ᵄ2 = ℎ2(ᵅ1,2,ᵅ2,2,⋯ ᵅᵄ,2)ᵄ + ᵆ1 + ᵆ3 ⋯⋯ ᵄᵄ = ℎ2(ᵅ1,ᵄ, ᵅ2,ᵄ, ⋯ᵅᵄ,ᵄ )ᵄ + ᵆᵄ−1 + ᵆᵄ+1 采用Jacobi、块 Jacobi、SOR、块 SOR、Gauss-Seidal 和块 Gauss-Seidal 六种不同迭代法求解 Au=f。 1、用 Jacobi 迭代法求解线性方程组 Au =f。 Jacobi 迭代法格式: uᵅ,ᵅ(ᵅ+1)= (uᵅ−1,ᵅ(ᵅ)+ uᵅ+1,ᵅ(ᵅ)+ uᵅ,ᵅ−1(ᵅ)+ uᵅ,ᵅ+1(ᵅ)+ ℎ2ᵅᵅᵅ)/4 function [u,k,time]=Jac(n) % Jac:用Jacobi 迭代法求解线性方程组A*u=f % u: 方程组的解; k: 迭代次数; n: 非边界点数;time:所花费的计算时间; % temp: Jacobi 迭代算法所需的一套中间数组。 % e: 允许误差界; er:迭代误差; h = 1/(n+1); f(2:n+1,2:n+1)=h^2*2; u=zeros(n+2,n+2); temp=zeros(n+2,n+2); for j = 1:(n+2) %带入边界值 b1=j-1; u(j,1)=b1*h*(1-b1*h); u(j,(n+2))=b1*h*(1-b1*h); end e=0.000000001; t=cputime; for k=1:1000 %迭代求解 er=0; temp=u; for j=2:n+1 for i=2:n+1 Ub=u(i,j); u(i,j)=(temp(i-1,j)+u(i+1,j)+temp(i,j-1)+u(i,j+1)+f(i,j))/4; er=er+abs(Ub-u(i,j)); end end if er/n^2