meili 发表于 2022-10-27 15:50:28

【偏微分方程∂^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。。。但是我想知道该方程的数值解法,和迭代方法】

<p>问题:【偏微分方程∂^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。。。但是我想知道该方程的数值解法,和迭代方法】
<p>答案:↓↓↓<p class="nav-title mt10" style="border-top:1px solid #ccc;padding-top: 10px;">李训涛的回答:<div class="content-b">网友采纳  源程序:  function=Helmholtz(f,g,bx0,bxf,by0,byf,D,Mx,My,MinErr,MaxIter)  %解方程:u_xx+u_yy+g(x,y)u=f(x,y)  %自变量取值区域D=={(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)在(x,y)点的函数值  x0=D(1);xf=D(2);y0=D(3);yf=D(4);  dx=(xf-x0)/Mx;x=x0+*dx;%构造内点数组  dy=(yf-y0)/My;y=y0+'*dy;  Mx1=Mx+1;My1=My+1;  %边界条件  form=1:My1     u(,m)=;%左右边界  end  forn=1:Mx1     u(n,)=;%上下边界  end  %边界平均值作迭代初值  sum_of_bv=sum(sum(,2:My)u(2:Mx,)']));  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)))<MinErr%循环结束条件         break;     end     u0=u;  end  u=u';  在MATLAB中编写脚本文件:  f=inline('2*x^2+2*y^2','x','y');  g=inline('0','x','y');  x0=0;xf=1;y0=0;yf=1;%自变量取值范围  Mx=50;My=30;%等分段数  bx0=inline('0','y');%边界条件  bxf=inline('y^2','y');  by0=inline('0','x');  byf=inline('x^2','x');  D=;MaxIter=100;MinErr=1e-4;  =Helmholtz(f,g,bx0,bxf,by0,byf,D,Mx,My,MinErr,MaxIter);  clf,mesh(U)  xlabel('x')  ylabel('y')  zlabel('U')
页: [1]
查看完整版本: 【偏微分方程∂^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。。。但是我想知道该方程的数值解法,和迭代方法】