问题:【偏微分方程∂^2*u/∂x^2+∂^2*u/∂y^2=2(x^2+y^2)的数值解法..定解条件u(0,y)=u(x,0)=0;u(1,y)=y^2;u(x,1)=x^2;我知道精确解是u(x,y)=(xy)^2。。。但是我想知道该方程的数值解法,和迭代方法】
答案:↓↓↓ 李训涛的回答: 网友采纳 源程序: function[u,x,y]=Helmholtz(f,g,bx0,bxf,by0,byf,D,Mx,My,MinErr,MaxIter) %解方程:u_xx+u_yy+g(x,y)u=f(x,y) %自变量取值区域D=[x0,xf,y0,yf]={(x,y)|x0<=x<=xf,y0<=y<=yf} %边界条件 %u(x0,y)=bx0(y),u(xf,y)=bxf(y) %u(x,y0)=by0(x),u(x,yf)=byf(x) %x轴均分为Mx段 %y轴均分为My段 %tol误差因子 %MaxIter:最大迭代次数 %[u,x,y]:方程u(x,y)在(x,y)点的函数值 x0=D(1);xf=D(2);y0=D(3);yf=D(4); dx=(xf-x0)/Mx;x=x0+[0:Mx]*dx;%构造内点数组 dy=(yf-y0)/My;y=y0+[0:My]'*dy; Mx1=Mx+1;My1=My+1; %边界条件 form=1:My1 u([1Mx1],m)=[bx0(y(m))bxf(y(m))];%左右边界 end forn=1:Mx1 u(n,[1My1])=[by0(x(n));byf(x(n))];%上下边界 end %边界平均值作迭代初值 sum_of_bv=sum(sum([u([1Mx1],2:My)u(2:Mx,[1My1])'])); u(2:Mx,2:My)=sum_of_bv/(2*(Mx+My-2)); fori=1:Mx forj=1:My F(i,j)=f(x(i),y(j));G(i,j)=g(x(i),y(j)); end end dx2=dx*dx;dy2=dy*dy;dxy2=2*(dx2+dy2); rx=dx2/dxy2;ry=dy2/dxy2;rxy=rx*dy2; foritr=1:MaxIter fori=2:Mx forj=2:My u(i,j)=ry*(u(i+1,j)+u(i-1,j))+rx*(u(i,j+1)+u(i,j-1))+rxy*(G(i,j)*u(i,j)-F(i,j));%迭代公式 end end ifitr>1&max(max(abs(u-u0))) |