function [x,t,u] = Mixed_EI(L,N,T,K,c1,c2,f,u0,D)
% ----  Risoluzione dell'equazione del calore ----
%   u_t - u_xx = f nell'intervallo [-L,L] 
%   con condizioni al bordo di Dirichlet
%   e condizioni iniziali.
% -----------------------------------------------
% Sintassi:
%   [x,t,u]=calore_template(L,N,T,K,c1,c2,fun,u0)
%
% Input:
%   L semiampiezza intervallo spaziale (-L,L) 
%	N numero di sottointervalli in (-L,L)
%   T estremo finale intervallo temporale (0,T)
%	K numero di sottointervalli in (0,T)
%   c1 funzione che descrive la condizione di Dirichlet in x=-L
%   c2 funzione che descrive la condizione di Dirichlet in x=L
%   f funzione che descrive il termine noto dell'equazione
%   u0 funzione che descrive la condizione iniziale in t=0
%
% Output:
%   x vettore dei nodi spaziali
%   t vettore dei nodi temporali
%   u soluzione numerica 
%     del problema

% Calcolo passo di discretizzazione in spazio e tempo
h=L/N;
tau=T/K;
% Inizializzazione del vettore t
t=linspace(0,T,K+1);
% Inizializzazione del vettore x
x=linspace(0,L,N+1);

% Inizializzazione della matrice soluzione u
u=zeros(N+1,K+1);
% Condizione iniziale
u(:,1)=u0(x);

% BC Dirichlet
u(1,:)=c1(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);
%modify the matrix such that we can use the noimann condition to calculate
%the last node.
%In this case we want to use a second order decentralized approximation 
A(end,end-1)=-2/(h^2);
I=speye(N-1,N-1);


for k=1:K
    % Assemblaggio termine noto
    F=f(x(2:end-1),t(k+1));
    % Correzione del termine noto con le condizioni al bordo
    F(1)=F(1) + c1(t(k+1))/(h^2);
    F(end)=c2*h*2;
    % Risoluzione del problema
    u(2:end-1,k+1) = ((I+tau*A)\u(2:end-1,k))' + tau*F;
    u(end,k+1)=u(end-2,k+1) + c2*2*h;
end
