Professional Documents
Culture Documents
RENOVABLES - FIIS
DEPARTAMENTO ACADEMICO DE CIENCIAS AMBIENTALES
INGENIERIA AMBIENTAL
TRABAJO ENCARGADO
CICLO : 2016-II
Tingo María-Perú
1. INTRODUCCION
La aplicación de métodos numéricos en la resolución de
problemas de Fı́sica e Ingenierı́a ha estado presente a lo largo de la
historia de las matemáticas. Sin embargo, la incorporación de las
computadoras les ha dado una importancia aún mayor.
Condiciones iniciales
……. (2)
Condiciones de contorno
…… (1)
…. (3)
….. (4)
El espacio entre los puntos de la malla es uniforme en todas las filas xi+1
= xi+h; xi−1 =xi − h; y también es uniforme en todas las columnas tj+1 = tj + k
(tj−1 = tj − k).
… (5)
… (7)
Nota
Hay que tener cuidado al usar la fórmula [7] si el error cometido en una etapa de
los cálculos no se amplifica en las etapas posteriores, entonces se dice que el
método es estable. Para garantizar la estabilidad de la fórmula [7] es necesario
que
Hay otros esquemas, llamados métodos implícitos, que son de desarrollo más
complejo, pero no imponen restricciones sobre r para que se tenga estabilidad.
5. IMPLEMENTACION EN MATLAB
5.1. ONDAS EN EL AGUA
% Ondas en el agua
clear all
clc
%Inputs
% Radio de la Onda
r=(X.^2+Y.^2).^0.5;
% Programa:
for t = 0:0.1:Tiempo
% Mediante estos dos bucles y el condicional distinguimos los dos
casos
% de la distancia al foco para determinar la Amplitud de la onda.
for i = 1:n
for j = 1:n
if (r(i,j))>r0
A = 1./(r(i,j).^0.5);
% Ecuación de la onda:
Z(i,j) = A.*(sin(2*pi.*((r(i,j)./long)-(t/T))));
else
Z(i,j) = sin(2*pi.*((r(i,j)./long)-(t/T)));
end
end
end
surf(X,Y,Z,'Facecolor','blue','Edgecolor','none');
M(count)=getframe;
count=count+1;
end
5.2. ONDAS EN 2D
Definición
𝜕𝑇 𝜕 2𝑇 𝜕 2𝑇 𝜕 2𝑇
− 𝛼 ( 2 + 2 + 2) = 0
𝜕𝑇 𝜕𝑥 𝜕𝑦 𝜕𝑧
7. IMPLEMENTACION
7.1. ECUACION DE CALOR POR DIFERENCIAS AVANZADAS 1
function w=Ecalor(xl,xr,yb,yt,M,N)
% Ecuación del calor por diferencias avanzadas
% Entrada: [xl,xr], tiempo[yb,yt], pasos M, tiempos N
f=@(x)sin(2*pi*x).^2;
l=@(t)0*t;
r=@(t)0*t;
D=1;
h=(xr-xl)/M; k=(yt-yb)/N; m=M-1; n=N;
sigma=D*k/h/h;
a=diag(1-2*sigma*ones(m,1))+diag(sigma*ones(m-1,1),1);
a=a+diag(sigma*ones(m-1,1),-1);
lside=l(yb+(0:n)*k); rside=r(yb+(0:n)*k);
w(:,1)=f(xl+(1:m)*h)';
for j=1:n
w(:,j+1)=a*w(:,j)+sigma*[lside(j); zeros(m-2,1); rside(j)];
end
w=[lside; w; rside];
x=(0:m+1)*h; t=(0:n)*k;
mesh(x,t,w')
view(60,30);axis([xl xr yb yt -1 1])
end
function w=Ecalor1(xl,xr,yb,yt,M,N)
% Ecuación del calor por diferencias avanzadas
% Entrada: [xl,xr], tiempo[yb,yt], pasos M, tiempos N
f=@(x)sin(2*pi*x).^2;
l=@(t)0*t;
r=@(t)0*t;
D=1;
h=(xr-xl)/M; k=(yt-yb)/N; m=M-1; n=N;
sigma=D*k/h/h;
a=diag(1+2*sigma*ones(m,1))+diag(-sigma*ones(m-1,1),1);
a=a+diag(-sigma*ones(m-1,1),-1);
lside=l(yb+(0:n)*k); rside=r(yb+(0:n)*k);
w(:,1)=f(xl+(1:m)*h)';
for j=1:n
w(:,j+1)=a\(w(:,j)+sigma*[lside(j); zeros(m-2,1); rside(j)]);
end
w=[lside; w; rside];
x=(0:m+1)*h; t=(0:n)*k;
mesh(x,t,w')
view(60,30);axis([xl xr yb yt -1 1])
end
function c1
clear all
clc %global y s lamda
disp('Programa para resolver la transferencia de calor estacionario en
una');
disp('dimensión con condiciones de Dirichlet');
disp('por el método de diferencias finitas');
disp(' '); disp('Datos:');
a=input('Ingrese el inicio de la barra:');
L=input('Ingrese el final de la barra:'); %Es necesario conocer la
%longitud de la barra para el càlculo en una dimensión
k=input('Ingrese el coeficiente de difusividad térmica Kc:');%El
coeficiente
%de conductividad térmica es característico del material;
n=input('Ingrese el numero de puntos en los que desea analizar el
sistema:');
%Se deben incluir los bordes
q=input('Ingrese la funciòn de calor q(x)=','s');%Es la funciòn que
representa
%la temperatura inicial
D=input('Ingrese la condicion inicial para x(a):');%Se aplica la
condición %de frontera de Dirichlet al inicio de la barra
N=input('Ingrese la condicion inicial para x(L):');%Se aplica la
%condición de frontera de Dirichlet al final de la barra
y=linspace(a,L,n) %Crea un vector con incremento s hasta L que
representa %los puntos de análisis del sistema.
s=(y(1,2)-y(1,1)); %diferencial de desplazamiento que depende del
nùmero
%de puntos escogidos para el análisis
lamda=s^2/k; %Ahora se va a formar el arrelgo AU=q %Creación del
vector q, el cual contine las condiciones de Dirichlet
for i=2:n-2
if i==2
x=y(1,i);
b(i,1)=lamda.*eval(q)+D;%Condición de Dirichlet al inicio de
la barra.
else x=y(1,i);
b(i,1)=lamda.*eval(q);
end
end
x=y(1,n-1);
b(n-1,1)=lamda.*eval(q)+N; %Condición de Dirichlet al final de la
barra.
b(1,:)=[];
b %Creaciòn de la matriz A, que contiene los coeficientes de la
variables
%de temperatura en cada punto de análisis.
for i=1:n-2
for j=1:n-2
if i==j A(i,j)=2;
end
end
end
for i=1:n-3
for j=1:n-3
if i==j j=j+1;
A(i,j)=-1;
end
end
end
for i=2:n-2
for j=2:n-2
if i==j j=j-1;
A(i,j)=-1;
end
end
end
function c2
clear all
clc %global y s lamda
disp('Programa para resolver la transferencia de calor estacionario en
una');
disp('dimensión, con condiciones mixtas (Dirichlet y Neumann),');
disp('por el método de diferencias finitas');
disp(' '); disp('Datos:');
a=input('Ingrese el inicio de la barra:');
L=input('Ingrese el final de la barra:'); %Es necesario conocer la
%longitud de la barra para el càlculo en una dimensión
k=input('Ingrese el coeficiente de difusividad térmica Kc:');%El
coeficiente %de difusividad térmica es característico del material;
n=input('Ingrese el numero de puntos en los que desea analizar el
sistema:');
%Se deben incluir los bordes
q=input('Ingrese la funciòn de calor q(x)=','s');
%Es la funciòn que representa
%la temperatura inicial
D=input('Ingrese la condicion inicial para x(0):');
%Se aplica la condición
%de frontera de Dirichlet
N=input('Ingrese la condicion de contorno para dx/dt|x=L:');
%Se aplica la %condición de contorno de Neumann
y=linspace(a,L,n) %Crea un vector con incremento s hasta L que
representa
%los puntos de análisis del sistema.
s=(y(1,2)-y(1,1)); %diferencial de desplazamiento que depende del
nùmero
%de puntos escogidos para el análisis
lamda=s^2/k; %Ahora se va a formar el arrelgo AU=q
%Creación del vector q, el cual contine las condiciones de Dirichlet y
Neumann
for i=2:n-1
if i==2
x=y(1,2);
c(i,1)=lamda.*eval(q)+D;
%Condición de Dirichlet.
else x=y(1,i);
c(i,1)=lamda.*eval(q);
end
end
g=(2*s/k)*N; %Condición de Neumann.
c(1,:)=[]; b=[c;g] % Vector q
%Creaciòn de la matriz A, que contiene los coeficientes de la
variables
%de temperatura en cada punto de análisis.
for i=1:n-2
for j=1:n-2
if i==j
A(i,j)=2;
end
end
end
for i=1:n-2
for j=1:n-2
if i==j j=j+1;
A(i,j)=-1;
end
end
end
for i=2:n-2
for j=2:n-2
if i==j
j=j-1;
A(i,j)=-1;
end
end
end
%Se completa el vector A con los elementos dbajo mostrados en razòn de
que %se utilizó diferencias centrales para representar la derivada de
primer
%grado y al hacer esto se introdujo una nueva variable para la cual se
%debe aplicar la condición de Neumann
A(n-1,n-1)=-1;
A(n-1,n-3)=1;
A
% Vector tridiagonal que contiene los coeficientes de las ecuaciones
de
%temperatura
T=A\b
U=[D;T]
% Vector de resultados de Temperatura en la barra.
plot(y,U)
%Gráfica de la Temperatura vs. el desplazamieno
grid on
xlabel('Longitud de la Barra','FontSize',14);
ylabel('Temperatura','FontSize',14);
title('Flujo de Calor en una Barra','FontSize',16);