PDA

查看完整版本 : [讨论]matlab解一维偏微分方程的讨论


dmarquis
2008-03-14, 11:44
(1)形如 du/dt + a*du/dx = v*du2/dx2(二次偏导数) 的一阶偏微分方程可用pde函数求解

如下例:
0<x<1,0<t<0.00006; 初值u(x,0) = 0;边值u(0,t)=1,u(1,t)=0;参数a=10000,v=1;
编程如下:
function pdexvv
m = 0;
x = linspace(0,1,101);
t = linspace(0,0.00006,501);
sol = pdepe(m,@pdexvvpde,@pdexvvic,@pdexvvbc,x,t);
u = sol(:,:,1);
figure
plot(x,u(end,:),'-r')
title('Numerical solution and exact solution.')
xlabel('x')
ylabel('u(x,end)')
%----------------------------------------------
function [c,f,s] = pdexvvpde(x,t,u,DuDx)
c = 1;
f = DuDx;
s = -10000.*DuDx ;
%---------------------------------------------
function u0 = pdexvvic(x)
u0 = 0;
%----------------------------------------------
function [pl,ql,pr,qr] = pdexvvbc(xl,ul,xr,ur,t)
pl = ul-1;
ql = 0;
pr = ur;
qr = 0;
可以很方便的求解,但是对于含点源的问题,不知道能否用pde求解
即相对于(1)中的问题,方程右端多了一个源项SS(x0);
当x0=0.3时,SS=1;其他SS=0

初步编程如下:
function pdexvv
m = 0;
x = linspace(0,1,101);
SS = zeros(size(x));
N = length(x);
for n = 1:N
if x(n)==0.3;
SS(n) = 1.;
end
end
t = linspace(0,0.00006,501);
sol = pdepe(m,@pdexvvpde,@pdexvvic,@pdexvvbc,x,t,SS);
u = sol(:,:,1);
figure
plot(x,u(end,:),'-r')
title('Numerical solution and exact solution.')
xlabel('x')
ylabel('u(x,end)')
%----------------------------------------------
function [c,f,s] = pdexvvpde(x,t,u,DuDx,SS)
c = 1;
f = DuDx;
s = -10000.*DuDx + SS ;
%---------------------------------------------
function u0 = pdexvvic(x)
u0 = 0;
%----------------------------------------------
function [pl,ql,pr,qr] = pdexvvbc(xl,ul,xr,ur,t)
pl = ul-1;
ql = 0;
pr = ur;
qr = 0;

但总调试不过去
报错如下
??? Input argument 'ss' is undefined.

Error in ==> C:\MATLAB6p5p1\work\pdexvvd.m (pdexvvpde)
On line 24 ==> s = -10000.*DuDx + ss ;

Error in ==> C:\MATLAB6p5p1\toolbox\matlab\funfun\pdepe.m
On line 238 ==> c = feval(pde,xi(1),t(1),U,Ux,varargin{:});

Error in ==> C:\MATLAB6p5p1\work\pdexvvd.m
On line 13 ==> sol = pdepe(m,@pdexvvpde,@pdexvvic,@pdexvvbc,x,t,ss);

请大家不吝指教

dmarquis
2008-04-03, 16:44
这个问题我想错了么?

有没有人愿意指点我,谢谢

watcher
2008-04-03, 17:24
取消pdexvvpde函数输入参量中对SS的声明,把点源函数的定义放到函数pdexvvpde里试试

dmarquis
2008-04-10, 11:07
谢谢指教,该问题按照您的指点已解决