Unttransfe 12

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 4

function x=gseidel(A,b,tol,imax)

n=max(size(A)); % Obtenemos de la matriz A


% el número de ecuaiones
% y por ende de incognitas.
c=diag(A); % Almacenamos en 'c' los elementos
% de la diagonal principal.
d=1;
i=1;
while (d~=0)&&(i<n) % revisamos si en la diagonal principal 'c'
d=c(i,1)*c(i+1,1); % existe algún elemento igual a 0.
i=i+1; % En caso de que lo haya
end % salir del bucle y d=0.

while d==0 % Si se ha detectado algún cero en la


B(1,:)=A(n,:); % diagonal principal se entra en este bucle
U(1,1)=b(n,1); % para así cambiar las filas. Se alternarán
for i=2:n % las filas hasta que todos los elementos
B(i,:)=A(i-1,:);% de la diagonal principal
U(i,1)=b(i-1,1);% sean distintos de cero.
end % Todo esto para evitar una división
A=B; % por cero. Aunque se recomienda
b=U; % siempre ordenar las ecuaciones apriori.
c=diag(A);
d=1;i=1;
while (d~=0)&&(i<n)
d=c(i,1)*c(i+1,1);
i=i+1;
end
end

% Se selecciona un vector X(n,1) sólo para evaluar


% el error en la primera iteración.
for i=1:n
X(i,1)=b(i,1)/A(i,i);
end

% se sespecifica el vector x(n,1) con valores iguales a cero


% para iniciar las iteraciones.
x=zeros(n,1);

err=tol+1;
iter=1;

% Se inician las iteraciones


while (tol<err)&&(iter<imax)
for i=1:n
if i==1
sum=0;
for j=i+1:n
sum=A(i,j)*x(j,1)+sum;
end
x(i,1)=(b(i,1)-sum)/A(i,i);
end
if i==n
sum=0;
for j=i-1:-1:1
sum=A(i,j)*x(j,1)+sum;
end
x(i,1)=(b(i,1)-sum)/A(i,i);

TRANSFERENCIA DE CALOR ING. ELI GUAYAN


end
if 2<=i<=n-1
sum1=0;
for j=i+1:n
sum1=A(i,j)*x(j,1)+sum1;
end
sum2=0;
for j=i-1:-1:1
sum2=A(i,j)*x(j,1)+sum2;
end
x(i,1)=(b(i,1)-sum1-sum2)/A(i,i);
end
end
err=abs((x-X)./x);
err=max(err);
X=x;
iter=iter+1;
end

Solución :

Las temperaturas correspondientes son

% Difusión de calor por el método de Crank Nicholson


clear;

TRANSFERENCIA DE CALOR ING. ELI GUAYAN


% Parametros definidos por el espacio y tiempo
L = 1.; % Longitud de la placa
T =1.; % Tiempo final
% Parametros necesarios para poder resolver la ecuación de Crank
Nicholson
maxk = 2500; % Numero máximo de intervalos de tiempo
dt = T/maxk;
n = 50.; % Numero máximo de intervalos en x
dx = L/n;
cond = 1/2; % Conductividad
b = cond*dt/(dx*dx); % parámetro del metodo
% Condicion incial de la temperatura en función del tiempo
for i = 1:n+1
x(i) =(i-1)*dx;
u(i,1) =sin(pi*x(i));
end
% Condiciones de contorno
for k=1:maxk+1
u(1,k) = 0.;
u(n+1,k) = 0.;
time(k) = (k-1)*dt;
end
% Definimos la matriz Mj=MMr y Mj+1=MMl
aal(1:n-2)=-b;
bbl(1:n-1)=2.+2.*b;
ccl(1:n-2)=-b;
MMl=diag(bbl,0)+diag(aal,-1)+diag(ccl,1);
aar(1:n-2)=b;
bbr(1:n-1)=2.-2.*b;
ccr(1:n-2)=b;
MMr=diag(bbr,0)+diag(aar,-1)+diag(ccr,1);
% Implementacion del metodo
for k=2:maxk % Bucle de tiempo
uu=u(2:n,k-1);
u(2:n,k)=inv(MMl)*MMr*uu;
end
% Grafica del metodo
figure(1)
plot(x,u(:,1),'-',x,u(:,100),'-',x,u(:,300),'-',x,u(:,600),'-')
title('Distribucion de temperatura con el método Crank Nicholson')
xlabel('X')
ylabel('T')
figure(2)
mesh(x,time,u')
title('Distribucion de temperatura con el método Crank Nicholson ')
xlabel('X')
ylabel(Temperatura')

TRANSFERENCIA DE CALOR ING. ELI GUAYAN


TRANSFERENCIA DE CALOR ING. ELI GUAYAN

También podría gustarte