利用matlab的PDE工具箱求解Neumann边界的Poisson方程之3

针对于 利用matlab的PDE工具箱求解Neumann边界的Poisson方程之2 出现的问题,后面察觉是由于 对法向导数理解的误解。

首先明白:Poisson方程的第二边值问题:n是外法线方向向量.
 
例如:对于下图所示
下边界时条件为
对于左边边界为
在左边边界设定的时候,前面添加一负号。

                               原方程在PDE工具箱中的设置

上边界与下边界 sin(3*pi*x+pi/4)*sin(pi/4)

(注意:此处不能为'x',后同)

左边界 -3*pi*sin(2*pi*y+pi/4)*cos(pi/4)

右边界 -3*pi*sin(2*pi*y+pi/4)*cos(pi/4)

方程设置:13*pi*pi.*sin(3*pi*x+pi/4).*sin(2*pi*y+pi/4)


 

最后的数值结果为:
 
X-Y平面图为:
与精切解吻合比较好。
 如果为一导数边界,而其他边界为第二类,具体代码实现如下:
View Code
function pdemodel
[pde_fig,ax]=pdeinit;
pdetool('appl_cb',1);
set(ax,'DataAspectRatio',[1 2.583333333333333 1.6666666666666665]);
set(ax,'PlotBoxAspectRatio',[1 1 1]);
set(ax,'XLim',[-0.10000000000000001 1.1000000000000001]);
set(ax,'YLim',[-0.10000000000000001 3]);
set(ax,'XTickMode','auto');
set(ax,'YTickMode','auto');
pdetool('gridon','on');

% Geometry description:
pderect([0 1 1 0],'R1');
set(findobj(get(pde_fig,'Children'),'Tag','PDEEval'),'String','R1')

% Boundary conditions:
pdetool('changemode',0)
pdesetbd(4,...
'dir',...
1,...
'1',...
'sin(3*pi*x+pi/4)*sin(pi/4)')
pdesetbd(3,...
'neu',...
1,...
'0',...
'-2*pi.*sin(3*pi*x+pi/4)*sin(pi/4)')
pdesetbd(2,...
'neu',...
1,...
'0',...
'-3*pi.*sin(2*pi.*y+pi/4)*cos(pi/4)')
pdesetbd(1,...
'neu',...
1,...
'0',...
'2*pi.*sin(3*pi*x+pi/4)*sin(pi/4)')

% Mesh generation:
setappdata(pde_fig,'Hgrad',1.3);
setappdata(pde_fig,'refinemethod','regular');
pdetool('initmesh')

% PDE coefficients:
pdeseteq(1,...
'1.0',...
'0.00',...
'13*pi*pi.*sin(3*pi*x+pi/4).*sin(2*pi*y+pi/4)',...
'1.0',...
'0:10',...
'0.0',...
'0.0',...
'[0 100]')
setappdata(pde_fig,'currparam',...
['1.0                                         ';...
'0.00                                        ';...
'13*pi*pi.*sin(3*pi*x+pi/4).*sin(2*pi*y+pi/4)';...
'1.0                                         '])

% Solve parameters:
setappdata(pde_fig,'solveparam',...
str2mat('0','1000','10','pdeadworst',...
'0.5','longest','0','1E-4','','fixed','Inf'))

% Plotflags and user data strings:
setappdata(pde_fig,'plotflags',[1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 0 0 1]);
setappdata(pde_fig,'colstring','');
setappdata(pde_fig,'arrowstring','');
setappdata(pde_fig,'deformstring','');
setappdata(pde_fig,'heightstring','');

 

 
 
 
posted @ 2012-12-30 16:22  liang_l  阅读(1585)  评论(0编辑  收藏  举报