function [x,t,u] = Dirichlet_EA(L,N,T,K,c1,c2,f,u0,D) % ---- Solution of heat equation ---- % u_t - u_xx = f in the interval [-L,L] (doesn't matter if we change it) % Dirichlet BC % % ----------------------------------------------- % Sintassi: % [x,t,u]=calore_template(L,N,T,K,c1,c2,fun,u0) % % Input: % L Half of the width (-L,L) % N number of intervals in (-L,L) % T max time (0,T) % K number of intervals in (0,T) % c1 Dirichlet BC in x=-L % c2 Dirichlet BC in x=L % f force function % u0 initial condition in t=0 % % Output: % x vector of the spatial nodes % t vector of the time nodes % u numeric solution of the problem % discretisation step in time and space h=L/N; %space tau=T/K; %time % Initialization of t t=linspace(0,T,K+1)'; % initialization of x x=linspace(0,L,N+1); % Initialization of the matrix solution u u=zeros(N+1,K+1); % Intial conditions u(:,1)=u0(x); % BC u(1,:)=c1(t); u(end,:)=c2(t); % Creation of the matrix A % We obtained this matrix using the Central Discretization method e=ones(N-1,1); A=spdiags([-e,2*e,-e],[-1,0,1],N-1,N-1)/(h^2); I=speye(N-1,N-1); % Compute the solution % What we are doing here is to compute the solution in the interval for % each time k for k=1:K % Assembly of the force F=f(x(2:end-1),t(k)); % Correction of the force using the BC F(1)=F(1) + D*c1(t(k))/(h^2); F(end)=F(end) + D*c2(t(k))/(h^2); % Solution using Eulero forward u(2:end-1,k+1) = ((I - tau*D*A)*u(2:end-1,k))' + tau*F; end