Merge branch 'master' of https://git.art-ist.cc/daniel/NSSC
This commit is contained in:
		
						commit
						dad2f0151f
					
				
							
								
								
									
										60
									
								
								Exercise_03/calore_CN.m
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								Exercise_03/calore_CN.m
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,60 @@
 | 
			
		||||
function [x,t,u] = calore_CN(L,N,T,K,c1,c2,f,u0)
 | 
			
		||||
% ----  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=2*L/N;
 | 
			
		||||
tau=T/K;
 | 
			
		||||
% Inizializzazione del vettore t
 | 
			
		||||
t=linspace(0,T,K+1)';
 | 
			
		||||
% Inizializzazione del vettore x
 | 
			
		||||
x=linspace(-L,L,N+1);
 | 
			
		||||
 | 
			
		||||
% Inizializzazione della matrice soluzione u
 | 
			
		||||
u=zeros(N+1,K+1);
 | 
			
		||||
% Condizione iniziale
 | 
			
		||||
u(:,1)=u0(x);
 | 
			
		||||
 | 
			
		||||
% Condizioni al bordo
 | 
			
		||||
u(1,:)=c1(t);
 | 
			
		||||
u(end,:)=c2(t);
 | 
			
		||||
 | 
			
		||||
% Costruzione della matrice A
 | 
			
		||||
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);
 | 
			
		||||
 | 
			
		||||
% Ciclo iterativo
 | 
			
		||||
for k=1:K
 | 
			
		||||
    % Assemblaggio termine noto
 | 
			
		||||
    F1=f(x(2:end-1),t(k));
 | 
			
		||||
    F2=f(x(2:end-1),t(k+1))
 | 
			
		||||
    % Correzione del termine noto con le condizioni al bordo
 | 
			
		||||
    F1(1)=F1(1) + c1(t(k))/(h^2);
 | 
			
		||||
    F1(end)=F1(end) + c2(t(k))/(h^2);
 | 
			
		||||
    F2(1)=F2(1) + c1(t(k+1))/(h^2);
 | 
			
		||||
    F2(end)=F2(end) + c2(t(k+1))/(h^2);
 | 
			
		||||
    % Risoluzione del problema
 | 
			
		||||
    u(2:end-1,k+1) = ((I + 0.5*tau*A)\((I - 0.5*tau*A)*u(2:end-1,k)))' + 0.5*tau*F1 + 0.5*tau*F2;
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								Exercise_03/image.png
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Exercise_03/image.png
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user