Matlab - ecuacion del calor por crank-nicolson

 
Vista:
sin imagen de perfil
Val: 43
Ha disminuido su posición en 13 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

ecuacion del calor por crank-nicolson

Publicado por wil (26 intervenciones) el 04/06/2020 00:10:07
Hola, estaba haciendo lla comparacion entre la solucion exata u(x,t) y la solucion aproximada w(x,t) de la ecuacion del calor, en el punto x=0.5 y haciendo variat t en el intervalo [0,1] solo que los valores de w
solo coincide el primer valor y los otros salen diferente.???
Si alguien me pudiera ayuda, agradezco de antemano.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function w=Crank_Nicolson(xl,xr,yb,yt,M,N)
% Ecuación del calor por Crank-Nicolson
% Entrada: [xl,xr], tiempo[yb,yt], pasos M, tiempos N
f=@(x) exp(-0.5*x);
l=@(t)exp(t);
r=@(t)exp(t-0.5);
D=4;
h=(xr-xl)/M; k=(yt-yb)/N; m=M-1; n=N;
sigma=(D*k)/(h*h);
a=diag((2+2*sigma)*ones(m,1))+diag(-sigma*ones(m-1,1),1);
a=a+diag(-sigma*ones(m-1,1),-1);% matriz a tridiagonal
b=diag((2-2*sigma)*ones(m,1))+diag(sigma*ones(m-1,1),1); % matriz b tridiagonal
b=b+diag(sigma*ones(m-1,1),-1);
lside=l(yb+(0:n)*k);rside=l(yb+(0:n)*k);
w(:,1)=f(xl+(1:m)*h)';
u=@(x,t) exp(t-(0.5).*x); % solucao exata
t=yb;
fprintf('\n t_j \t \t  u(0.5,j) \t w(0.5,j)  \n'); % nao confundir con la posicion !!!!
 
 
 
for j=1:n
 
    sides=[lside(j)+lside(j+1);zeros(m-2,1);rside(j)+rside(j+1)];
    w(:,j+1)=a\(b*w(:,j)+sigma*sides);
 
end
 
w=[lside;w;rside];
 
 
for j=1:n+1
 
  fprintf('\n %5.4f \t %5.4f \t %5.4f \n',t,u(0.5,t),w(6,j));
  t=yb+j*k;
 
end
 
 
 
>>w=Crank_Nicolson(0,1,0,1,10,10); % intente con esos valores solo sale correcto u pero la aproximada sale diferente .
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder