implicit-explicit method for finite difference method under reaction diffusion equataions

조회 수: 14 (최근 30일)
Hello, I am trying to solve the following reaction diffusion numerically under implicit-explicit method.
I try to compare my numerical solution to artifical true solution by define
and
The implicit -explicit scheme is straight forward and I will skip the derivation. However, the error between numerical and analytic solution does not follow the first order as dx goes to 0. I am wondering where I made a small but stupid mistake. Codes are attached. Thanks for any comment.
L = 50; % spatial size
Time = 50; % final time
delta = 0.05;
index=0:1:5;
h=power(3,-index);
forward_true=@(time,space) (cos(pi.*space/50).^2-1/2).*exp(0.01*time);
f_true=@(dk) (0.01+4*(pi/50).^2+delta)*dk;
error=zeros(1,length(index));
for test=1:length(index)
dx=h(test);
dt=dx;
x=0:dx:L;
t=0:dt:Time;
A=1;
N=length(t);
M=length(x);
mu = dt/dx/dx;
[X,T] = meshgrid(x,t); % This will create two matrices, T and X, where each element of t and x is paired with the other.
data=forward_true(T,X);
K0=cos(pi.*x/50).^2-1/2;
solu=zeros(N,M);
solu(1,:)=K0;
% implicit method
main_diag=1+2*mu+delta*dt;
upper=-mu;
lower=-mu;
Mdiag=main_diag*ones(M,1);
Muppder=upper*ones(M-1,1);
Mlower=lower*ones(M-1,1);
matrix=diag(Mdiag)+diag(Muppder,1)+diag(Mlower,-1);
matrix(1,2)=-2*mu;
matrix(end,end-1)=-2*mu;
for tstep=1:N-1
Kc = solu(tstep,:)';
Knext=zeros(1,M);
fvalue = f_true(Kc);
RHS=Kc+dt*fvalue;
Knext=matrix\RHS;
solu(tstep+1, :) = Knext;
end
error(test)=norm(data-solu,inf);
disp(test)
end

답변 (0개)

카테고리

Help CenterFile Exchange에서 Boundary Conditions에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by