You are on page 1of 18

FACULTAD DE RECURSOS NATURALES

RENOVABLES - FIIS
DEPARTAMENTO ACADEMICO DE CIENCIAS AMBIENTALES
INGENIERIA AMBIENTAL

TRABAJO ENCARGADO

CUSO : Métodos Numéricos y


Computación– Análisis Numérico

PROFESOR : Lic. Mat. Juan Carlos Curi Gamarra

ALUMNOS : JARA VENANCIO, Gian


HIDALGO MARTIN, Bryan
TINCO CARRASCO, Jherson

CICLO : 2016-II

FECHA : 19 de febrero del 2017

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.

Uno de los métodos tradicionales en la resolución de


problemas definidos por medio de ecuaciones diferenciales es el de diferencias
finitas.
Este informe muestra la aplicación del método de diferencias
finitas generalizadas a la resolución de ecuaciones en derivadas parciales
dependientes del tiempo.
En esta comunicación se obtienen, en primer lugar, las
expresiones explı́citas, utilizando

Figura 1: Estrella en 2D ; Estrella en 3D

diferencias finitas generalizadas, de la ecuación de ondas. En la siguiente sección


se estudia la consistencia y estabilidad, condiciones necesarias y suficientes
para la convergencia de la formulación explícita obtenida en la primera sección.
2. ECUACION DE ONDAS
Como ejemplo de una EDP hiperbólica la ecuación de la onda

Condiciones iniciales

……. (2)

Condiciones de contorno

…… (1)

La ecuación de ondas modela el desplazamiento u (x, t) desde su posición de


equilibrio de una cuerda elástica vibrante cuyos extremos, de coordenadas x =
0, x = L están fijos.

Aquí vamos a usar este problema como prototipo de la situación que se da en


las EDP’s hiperbólicas a través de los métodos en diferencias.
3. CONSTRUCCION DE LA ECUACION EN DIFERENCIAS
Hagamos una partición del rectángulo.

en una malla que consta de n − 1 por m − 1 rectángulos de lados


∆x = h, ∆t = k, como se muestra en la figura.

Empezamos por la fila de abajo donde t = t1 = 0, ya sabemos que la solución es f(xi) = u


(xi, t1). Ahora vamos a usar una ecuación en diferencias para calcular en las filas sucesivas, las
aproximaciones a la solución exacta, que en los puntos de la malla son u (xi, tj). O sea, para
cada j = 2, 3, 4, . . ., calcularemos {ui, j ' u(xi , tj ), i = 1, 2, 3, . .}.
4. CONSTRUCCION DE LA ECUACION EN DIFERENCIAS

La fórmula de diferencias centradas para aproximar Utt(x, t) y Uxx(x, t)

…. (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).

Teniendo esto en cuenta, obtenemos la ecuación en diferencias eliminando los


términos de orden o(k 2 ) y o(h 2 ) de las relaciones [3] y [4], usando la
aproximación ui,j en vez de u(xi , tj ) en dichas relaciones [3] y [4]y sustituyendo
en [1] nos da

… (5)

que es la ecuación en diferencias que usaremos como aproximación a la


ecuación diferencial [1].

Si escribimos [5] asi

y llamando r = ka/ h se tiene


…. (6)

reordenando los términos de [6], podemos determinar las aproximaciones a la


solución en los puntos de la fila (j + 1)- esima de la malla, supuesto que
conocemos las aproximaciones a la solución en los puntos de las filas anteriores
j-´esima y (j − 1)-esima

… (7)

para mayor comprensión didáctica mostramos en la Fig. [10.2] la posición en la


malla de los cuatro valores conocidos que aparecen en el miembro derecho de
la expresión [7], los que se usan para determinar la aproximación ui,j+1.

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

long = input('Introducir la longitud de onda: ');


T = input('Introducir el periodo de la onda: ');
Tiempo= 15*T; % Tiempo que estara oscilando.
phi = input('Introducir fase incial: ');
count = 1; % Esta variable es para usar el getframe para hacer la
animación

% Creamos una retícula.


x=(-10*long):0.5:10*(long);
y=(-10*long):0.5:10*(long);
[X,Y] = meshgrid(x,y);

% Radio de la Onda
r=(X.^2+Y.^2).^0.5;

% Definimos la amplitud de la onda como A = C/sqrt(r), donde C es una


% costante dependiente de la energía aportada por el medio y r es la
% distancia al foco. Por ello para evitar que la amplitud se nos vaya
a
% infinito es necesario tomar un valor de la amplitud para distancias
muy
% cercanas. Yo tome C=1 por lo que cuando la distancia al foco sea
menor
% que 0.8, diremos que la Amplitud es 1.
r0=0.8;
n = length(r);

% 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');

% Mediante este comando logramos igualar los tamaños


% de los ejes.
axis equal;

% Sombra y luz para visualizar mejor la onda.


camlight right;
lighting phong;

% Para crear esta animación en vez de usar el comando movie, uso


% getframe, que automaticamente convierte las imagenes creadas en
% nuestro bucle "for" agrupandolas en una imagen en movimieto.

M(count)=getframe;
count=count+1;

end
5.2. ONDAS EN 2D

%function [U_save,x,y,t_save]= ondas2D(c,t_f,M,tsteps);


%Resuelve utt - c2 (uxx +uyy) = 0 mediante un esquema explicito de
segundo orden
%Tercera aproximación. Contorno nulo.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Parámetros y datos de entrada:
Nframes=180; % % Nº de cuadros de vídeo totales
Nframes=input('Introduzca el Nº de fotogramas (Def.=180): ');
NFramesPorIt=3; % Nº cuadros de vídeo por cada iteración dibujada
c=1; % coeficiente c de la ecuacion (Velocidad de la onda)
c=input('Introduzca el valor de c, velocidad de onda (Def.=1): ');
t_f=4; % Tiempo final hasta el que calculamos la solución
t_f=input('Introduzca el instante final de tiempo (Def.=4): ');
M=36;%%N=length(x) = lenght(y);% Nº de partes para discretizar cada
intervalo [-3*L,3*L]
M=input('Introduzca el Nº de divisiones de la rejilla (Def.=36): ');
ResX=640;
ResY=240;
ResX=input('Introduzca la resolución de vídeo en el eje X (Def.=640):
');
ResY=input('Introduzca la resolución de vídeo en el eje Y (Def.=240):
');
'Inicializando primera aproximación'
L=3; % Semieje de intervalo cuadrado [-3,3]
h=2*L/M; % dx=dy Longitud de paso espacial
tsteps=360;%% Nº de partes iguales en que se descompone [0,t_f]
k=c/(4*h^2);%% Paso espaciald
dt=t_f/tsteps; % Paso temporal
tiempos= 0:dt:t_f; % Mallado espacio-temporal
% Recinto pequeño:
x=-L:h:L;
y=-L:h:L;
[X,Y]=meshgrid(x,y);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%Condiciones iniciales:
U0=exp(-10*(X.^2+Y.^2)); %% u0 % Posición inicial
U1=zeros(size(X)); % Velocidad inicial
%Condiciones iniciales, sin contornos:
U0_red=U0(2:M,2:M); % Posición sin contorno
U1_red=U1(2:M,2:M); % Velocidad sin contorno
%Versiones aplanadas:
u0=reshape(U0_red,(M-1)^2,1);
u1=reshape(U1_red,(M-1)^2,1);
%Utilizamos la matriz U para trabajar cómodamente con el primer índice
%para la coordenada ’x’ y el segundo para la coordenada ’y’
U=zeros(M+1,M+1);
U_save=zeros(M+1,M+1,Nframes);
t_save=zeros(Nframes,1); % Vector de cuadros de animación
cuentaframe=1; %%
marca=floor(tsteps/(Nframes-1)); %% Para saber qué iteración
almacenar
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Condiciones de frontera:
U_save(1,:,:)=zeros(1,M+1,Nframes); % Lado izquierdo
U_save(M+1,:,:)=zeros(1,M+1,Nframes); % Lado derecho
U_save(:,1,:)=zeros(M+1,1,Nframes); % Lado inferior
U_save(:,M+1,:)=zeros(M+1,1,Nframes); % Lado superior
U_save(:,:,1)=U0; % Posición inicial
t_save(1)=0; % Cuadro inicial de animación
% OPERADOR D: Usamos el comando diag(vector,k) para crear la matriz
tridiagonal
% El comando kron se usa para poner unos en los pares de índices:
Tridiag = diag(-4*ones((M-1)^2,1))+...
kron(eye(M-1),diag(ones(M-2,1),1))+...
kron(eye(M-1),diag(ones(M-2,1),-1))+...
kron(diag(ones(M-2,1),1),eye(M-1))+...
kron(diag(ones(M-2,1),-1),eye(M-1));
D=(1/h^2)*Tridiag; % Crear el operador discretizado %
u_ant=u0; % Inicializar paso anterior
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
u = u0 + dt*u1 + 0.5*(dt^2)*(c^2)*D*u0; % Cálculo del paso 2
%u(i,l,j+1)=2*u(i,l,j)-u(i,l,j-1)+(c^2*k^2/h^2)*(u(i+1,l,j)+u(i-
1,l,j)+u(i,l+1,j)+u(i,l-1,j)-4*u(i,l,j));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'Calculando. Espere, por favor...'
% ITERAR para el resto de pasos temporales:
for n=1:tsteps
temp=u;
u = 2*u - u_ant + (dt^2)*(c^2)*D*u;
u_ant=temp;
if mod(n,marca)==0 % Guardamos los valores de u sólo para algunos
tiempos:
indice = 1 + n/marca;
U(2:M,2:M)=reshape(u,M-1,M-1);
U_save(:,:,indice)=U;t_save(indice)=tiempos(n);
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'Cálculo completo. Creando visualización...'
% Representación:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Parámetros de visualización:
camlight(camlight('right'),'right');
%view(0,90); % Angulo de visualización
shading interp;
lighting phong;
colormap copper;
axis off;
zlim([-1 1]);
colorbar;
set(gca,'NextPlot','replacechildren');
set(gcf, 'Renderer', 'ZBuffer');
set(gcf,'MenuBar','none'); % Quitar la barra de menú
set(gcf,'Position',[20 40 ResX ResY]);% Situar la figura a 20*40
píxeles con tamaño
ResX*ResY;
P3=moviein(NFramesPorIt*indice); % Crear película 3
[X,Y]=meshgrid(x,y);
for i=1:indice
surf(U_save(:,:,i))
set (gcf,'red', [1 1 1], 'Number', 'off', 'Name',
sprintf('Onda2D: N=%i, T=%.2fmsec',i-1,t_save(i)*1e3));
for nf=1:NFramesPorIt % Guardar 'NFramesPorIt' cuadros en el
vídeo:
P3((i-1)*NFramesPorIt+nf)=getframe(gcf);
end
%pause(.1);
end
'Animacion completa. Exportando video...'
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
save onda2D_P3.mat P3; % Guardar la animación MATLAB a un archivo
mpgwrite(P3,jet,'onda2D_P3.mpg'); % Convertir la animación en
vídeo MPEG
'Programa completo. Que tenga un buen día :)'
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6. ECUACIÓN DEL CALOR
La ecuación del calor predice que, si un cuerpo a una temperatura T se sumerge
en una caja con agua a menor temperatura, la temperatura del cuerpo disminuirá,
y finalmente (teóricamente después de un tiempo finito, y siempre que no existan
fuentes de calor externas) la temperatura del cuerpo y la del agua serán iguales
(estarán en equilibrio térmico).

La ecuación del calor es una importante ecuación diferencial en derivadas


parciales del tipo parabólica que describe la distribución del calor (o variaciones
de la temperatura) en una región a lo largo del transcurso del tiempo.

Definición

Para el caso de una función de tres variables (𝑥, 𝑦, 𝑧) ∈ 𝑅 3 y de la variable


temporal t, el enunciado clásico es :

𝜕𝑇 𝜕 2𝑇 𝜕 2𝑇 𝜕 2𝑇
− 𝛼 ( 2 + 2 + 2) = 0
𝜕𝑇 𝜕𝑥 𝜕𝑦 𝜕𝑧

donde ∝ es la difusividad térmica, que es una propiedad del material.


En forma general, para utilizar en cualquier sistema de coordenadas, la ecuación
es:
𝜕𝑢
− 𝛼∇2 𝑢 = 0
𝜕𝑡

donde ∝ es una constante positiva, y ∇2 es el operador de Laplace. En el


problema físico de variación de temperatura, FORMULA es la temperatura y
FORMULA es la difusividad térmica. En tratados matemáticos es común
considerar el caso en que ∝= 1.

Considerando la ecuación de estado, de la primera ley de la termodinámica (es


decir, la conservación de la energía), se escribe de la siguiente forma
(asumiendo que no hay transferencia de masa, o fuentes de radiación, pero si
una fuente de energía 𝑄). Esta forma es más general y particularmente útil para
analizar cómo las diversas propiedades (𝑐𝑝 𝑜 𝜌) influyen sobre cada término.
𝜕𝑇
𝜌𝑐𝑝 − ∇. (𝑘∇𝑇) = 𝑄
𝜕𝑡

La ecuación del calor es de una importancia fundamental en numerosos y


diversos campos de la ciencia. En el ámbito de las matemáticas, son las
ecuaciones parabólicas en derivadas parciales por antonomasia. En el campo
de la estadística, la ecuación del calor está vinculada con el estudio del
movimiento browniano a través de la ecuación de Fokker–Planck. La ecuación
de difusión, es una versión más general de la ecuación del calor, y se relaciona
principalmente con el estudio de procesos de difusión química.

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

7.2. ECUACION DE CALOR POR DIFERENCIAS AVANZADAS 2

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

7.3. PROGRAMA QUE PERMITE RESOLVER LA TRANSFERENCIA DE


CALOR EN ESTADO

%Programa que permite resolver la transferencia de calor en estado


%estacionario en una dimensión por el método de diferencias finitas.
% %Para utilizar el programa debe definir el tamaño de una barra, esto
por
%tratarse de una dimensión, tambien se debe establecer el material del
cual
%esta constituido, para lo cual se define el coeficinte de difusividad
%térmica Kc. %
%Como el método que se utiliza es el de diferencias finitas, se debe
%considerar el número de puntos a estudiar o malla a construir.
% %El problema permite estudiar el sistema cuando contiene una fuente
%de calor intrna, que depende de la posición, por lo tanto este
parámetro
%tambien se debe ingresar.
% %Al ser el problema una ecucación diferencial, se definen dos tipos
de
%condiciones de borde, la de Dirichlet para x(a)=alfa y la de Neumann
%Ux=beta,|x=L, donde alfa es el valor inicial en el inicio de la barra
y
%beta es la condición de borde de la derivada en el otro extremo de la
%barra (0 en el caso homogéneo). %
%Al finalizar los cálculos se presenta la grafica de la variación de
%temperatura a lo largo de la barra aplicando las condiciones
ingresadas.
function calorv(tipo) %Menù para escoger los casos solicitados
switch tipo
case 1
c1; %Resuelve las ecuaciones diferenciales y devuelve un
gràfica de X vs. Y
case 2
c2; %Resuelve las ecuaciones diferenciales y devuelve un
gràfica de X,Y y Z vs t
otherwise error('Función no definida');
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

A % Vector tridiagonal que contiene los coeficientes de las ecuaciones


de
%temperatura
T=A\b;
U=[D;T;N]
plot(y,U) %Gráfica de la Temperatura a lo largo de la barra
grid on
xlabel('Longitud de la Barra','FontSize',14);
ylabel('Temperatura','FontSize',14);
title('Flujo de Calor en una Barra','FontSize',16);

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);

You might also like