sandbox/easystab/diffusion_global_reversed.m
Diffusion equation without time marching (but reversed)
Here is like in advection_global_reversed.m, except that we do this for the diffusion equation (which should be much more ill-behaved, and more sensitive to errors).
clear all; clf
% parameters
Nx=61; % number of gridpoints
Nt=60; % gridpoints in time
Lx=10; % domain length in x
Lt=4; % duration in time
xpos=5; % position of the final condition
mu=0.1;
% differentiation
[d.x,d.xx,d.wx,x]=dif1D('cheb',0,Lx,Nx);
[d.y,d.yy,d.wy,y]=dif1D('fd',0,Lt,Nt,5);
[D,l,X,Y,Z,I,NN]=dif2D(d,x,y);
% rename y to time derivative
D.t=D.y;
D.tt=D.yy;
t=y;
T=Y;
l.left=[l.cbl;l.left;l.ctl];
l.right=[l.cbr;l.right;l.ctr];
l.start=l.bot;
l.end=l.top;
% system matrices
A=D.t-mu*D.xx;
b=zeros(NN,1);
Here this is the “final guess”.
% final guess
f0=exp(-((X-xpos)/1).^2);
Boundary conditions
The “left”, “right” and “end” boundaries should be like in the initial guess.
% boundary conditions
loc=[l.end; l.right; l.left];
C=I(loc,:);
b(loc)=C*f0(:);
A(loc,:)=C;
Solve system
f=A\b;
f=reshape(f,Nt,Nx);
% show evolution of f
subplot(1,2,1);
surf(X,T,f); view(2)
xlabel('x'); ylabel('t');
title('time evolution of the string');
March in time of the initial condition
Here this is some kind of validation, we use a different method to go back from the initial condition to the final one, and compare to the global solution.
% march in time the initial condition
I=eye(Nx);
E=I;
A=mu*d.xx;
% boundary conditions
loc=[1;Nx];
E(loc,:)=0;
A(loc,:)=I(loc,:);
% march in time matrix
dt=t(2)-t(1);
Mm=(E-A*dt/2);
M=Mm\(E+A*dt/2);
% initial condition
q=f(1,:)';
% marching loop
for ind=1:(Nt-1); q=M*q; end
% plotting
subplot(1,2,2);
plot(x,q,'b',X(l.end),f(l.end),'r.-');
axis([0,Lx,0,1.2])
legend('march in time','global'); title('diffusion reversed')
xlabel('x'); ylabel('final time');
set(gcf,'paperpositionmode','auto');
print('-dpng','-r80','diffusion_global_reversed.png');
The subplot on the left shows the evolution in time of the solution. You see that this is ill-behaved because the solution becomes very large and oscillatory.
Exercises/contributions
- Please add exercices and contributions