Diferencia entre revisiones de «Ecuación del calor LAJS»

De MateWiki
Saltar a: navegación, buscar
(Efecto de cambiar la conductividad)
 
(No se muestran 30 ediciones intermedias de 4 usuarios)
Línea 1: Línea 1:
 +
 +
{{ TrabajoED | Ecuación del calor. Grupo LAJS | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP25/26|2025-26]] | Leire Aparicio Urbiola
 +
 +
Álvaro Silva Blanco
 +
 +
Julia Calado Bonnin
 +
 +
Sofía García Suárez
 +
 +
}}
 +
 +
 +
[[Categoría:EDP]]
 +
[[Categoría:EDP25/26]]
 +
 +
 +
 +
 +
== Póster ==
 +
 +
[[Archivo:Poster_Calor_LAJS.png||900px]]
 +
 +
 +
 
== Introducción ==
 
== Introducción ==
El objetivo de este trabajo será dibujar diferentes soluciones de la ecuación del calor en una dimensión, lo que nos ayudará a tener una idea más gráfica e intuitiva sobre las soluciones de este problema que hemos estudiado en clase.
 
  
== Planteamiento del problema ==
+
El estudio de la ecuación del calor es fundamental a la hora de estudiar cómo la temperatura se distribuye en un cuerpo a lo largo del tiempo mediante procesos de difusión. En este trabajo, nos centramos en el análisis de una varilla metálica unidimensional de longitud $L=1$. El objetivo principal será comprender propiedades clave como la convergencia al estado estacionario, la influencia de las condiciones de contorno (Dirichlet y Neumann) y el comportamiento de la solución ante datos iniciales discontinuos. A través de la resolución por separación de variables y la implementación de códigos en MATLAB, ilustraremos fenómenos como el fenómeno de Gibbs y la velocidad infinita de propagación. Además, analizaremos la sensibilidad del sistema frente a cambios en la conductividad térmica, evaluando cómo este parámetro altera la tasa de decaimiento temporal de las soluciones.
 +
 
 +
== Planteamiento y solución del problema ==
  
 
Comenzamos considerando una varilla metálica que ocupa el intervalo <math>[0, 1]</math> y que se encuentra aislada por su superficie lateral, de forma que la conducción de calor únicamente ocurre en dirección longitudinal. La temperatura inicial de la varilla será de <math>10ºC</math>. En el extremo derecho la temperatura se mantiene en <math>10ºC</math>, mientras que en el izquierdo la temperatura es siempre de <math>1ºC</math>. Por tanto, si consideramos las constantes de conductividad térmica y calor específico iguales a uno, la ecuación que modeliza nuestro problema queda <math>u_t - u_{xx}=0, \quad x \in (0,1), \ t > 0</math>, sujeta a las condiciones de contorno <math>u(0,t) = 1</math> (extremo izquierdo) y <math>u(1,t) = 10</math> (extremo derecho). Por último, la condición inicial será <math>u(x,0) = 10 \quad \forall x \in [0,1]</math>. El sistema de EDPs que modeliza nuestro problema queda:
 
Comenzamos considerando una varilla metálica que ocupa el intervalo <math>[0, 1]</math> y que se encuentra aislada por su superficie lateral, de forma que la conducción de calor únicamente ocurre en dirección longitudinal. La temperatura inicial de la varilla será de <math>10ºC</math>. En el extremo derecho la temperatura se mantiene en <math>10ºC</math>, mientras que en el izquierdo la temperatura es siempre de <math>1ºC</math>. Por tanto, si consideramos las constantes de conductividad térmica y calor específico iguales a uno, la ecuación que modeliza nuestro problema queda <math>u_t - u_{xx}=0, \quad x \in (0,1), \ t > 0</math>, sujeta a las condiciones de contorno <math>u(0,t) = 1</math> (extremo izquierdo) y <math>u(1,t) = 10</math> (extremo derecho). Por último, la condición inicial será <math>u(x,0) = 10 \quad \forall x \in [0,1]</math>. El sistema de EDPs que modeliza nuestro problema queda:
Línea 12: Línea 37:
 
         u(x,0) = 10 & x \in [0,1]
 
         u(x,0) = 10 & x \in [0,1]
 
         \end{cases}</math>
 
         \end{cases}</math>
 +
 +
===== Solución estacionaria =====
  
 
En cuanto a la ecuación del estado estacionario, sabemos que ocurre al suponer <math>t \to \infty </math> y que por tanto la solución ya no varía en tiempo, es decir, cuando <math> u_t \sim 0 </math>. Entonces el problema para la solución estacionaria es  
 
En cuanto a la ecuación del estado estacionario, sabemos que ocurre al suponer <math>t \to \infty </math> y que por tanto la solución ya no varía en tiempo, es decir, cuando <math> u_t \sim 0 </math>. Entonces el problema para la solución estacionaria es  
Línea 23: Línea 50:
 
Lo que nos da una EDO que se resuelve fácilmente y se llega a la solución <math> v(x)=9x+1 </math>. En la siguiente imagen podemos ver la gráfica de esta solución, que representa la temperatura que observaríamos si dejáramos pasar mucho tiempo bajo las condiciones descritas.
 
Lo que nos da una EDO que se resuelve fácilmente y se llega a la solución <math> v(x)=9x+1 </math>. En la siguiente imagen podemos ver la gráfica de esta solución, que representa la temperatura que observaríamos si dejáramos pasar mucho tiempo bajo las condiciones descritas.
  
<gallery>
+
[[Archivo:SolEstacionaria.png|thumb|300px|Visualización de la solución estacionaria]]
SolEstacionaria.png|Visualización de la solución estacionaria
+
</gallery>
+
  
  
== Solución del problema y visualización ==
+
==== Solución del problema y visualización ====
  
 
A continuación hallamos la solución al problema original, que lo haremos por el método de separación de variables. La forma de resolverlo es considerando la solución como la suma del estado estacionario y una solución transitoria <math>w(x,t)</math> que cumple condiciones de contorno, es decir, <math>u(x,t) = v(x) + w(x,t)</math>. La parte <math>w(x,t)</math> se calcula mediante la serie de Fourier <math>w(x,t) = \sum_{n=1}^{\infty} b_n e^{-(n\pi)^2 t} \sin(n\pi x)</math>, donde los coeficientes <math>b_n</math> se calculan a partir de la condición inicial <math>w(x,0) = u(x,0) - v(x) = 10 - (9x + 1) = 9 - 9x</math>. La solución final a nuestro problema es:
 
A continuación hallamos la solución al problema original, que lo haremos por el método de separación de variables. La forma de resolverlo es considerando la solución como la suma del estado estacionario y una solución transitoria <math>w(x,t)</math> que cumple condiciones de contorno, es decir, <math>u(x,t) = v(x) + w(x,t)</math>. La parte <math>w(x,t)</math> se calcula mediante la serie de Fourier <math>w(x,t) = \sum_{n=1}^{\infty} b_n e^{-(n\pi)^2 t} \sin(n\pi x)</math>, donde los coeficientes <math>b_n</math> se calculan a partir de la condición inicial <math>w(x,0) = u(x,0) - v(x) = 10 - (9x + 1) = 9 - 9x</math>. La solución final a nuestro problema es:
Línea 72: Línea 97:
 
}}
 
}}
  
<gallery>
+
 
SolGrafica.png|Gráfica de la solución
+
[[Archivo:SolGrafica.png|centro|400px|Gráfica de la solución]]<br />
</gallery>
+
 
  
 
== Estudio del flujo de calor en los extremos ==
 
== Estudio del flujo de calor en los extremos ==
Línea 80: Línea 105:
 
Para analizar el flujo de calor en los extremos de la barra a lo largo del tiempo utilizamos la ley de Fourier, que asegura que el flujo es proporcional al gradiente de temperatura: <math>q = -k u_x</math>. Como en el problema hemos asumido que la conductividad térmica era uno, resulta que el flujo es igual a la derivada espacial evaluada en los bordes de la barra. La derivada respecto de <math>x</math> que obtuvimos antes es:
 
Para analizar el flujo de calor en los extremos de la barra a lo largo del tiempo utilizamos la ley de Fourier, que asegura que el flujo es proporcional al gradiente de temperatura: <math>q = -k u_x</math>. Como en el problema hemos asumido que la conductividad térmica era uno, resulta que el flujo es igual a la derivada espacial evaluada en los bordes de la barra. La derivada respecto de <math>x</math> que obtuvimos antes es:
  
:<math>\frac{\partial u}{\partial x} = 9 + \sum_{n=1}^{\infty} b_n n\pi e^{-(n\pi)^2 t} \cos(n\pi x)</math>
+
:<math>u_x = 9 + \sum_{n=1}^{\infty} b_n n\pi e^{-(n\pi)^2 t} \cos(n\pi x)</math>
 +
 
 +
De nuevo, hemos desarrollado un código en Matlab para dibujar la evolución del flujo entrante y saliente. De la imagen que nos devuelve el código podemos interpretar varias cosas: en primer lugar, vemos que ambos flujos convergen al valor 9, lo que tiene sentido porque antes hemos calculado que la solución estacionaria era <math>v(x)=9x+1</math>. Además en <math>x=0</math> el flujo es muy elevado, y esto se debe a que, como la barra está a <math>10 \circ C</math> en un extremo y a <math>1 \circ C</math> en el otro, hay una salida muy fuerte de energía hacia el exterior por la parte izquierda de la barra. De la misma manera, en el extremo derecho inicialmente el flujo es cercano a cero porque la barra y el borde están a la misma temperatura, y el flujo empieza a variar cuando el enfriamiento de la izquierda llega al lado derecho. Esta gráfica está relacionada con la que hemos visto antes: el flujo es la pendiente de la superficie que hemos dibujado antes.
 +
 
 +
{{matlab|codigo=
 +
% Parámetros
 +
L = 1;
 +
t = linspace(0.01, 1, 100); % Mejor evitar t=0 por la discontinuidad inicial
 +
flujo0 = zeros(size(t));
 +
flujo1 = zeros(size(t));
 +
 
 +
% Cálculo de los flujos usando 10 términos
 +
for i = 1:length(t)
 +
    sum_i = 0;
 +
    sum_d = 0;
 +
    for n = 1:10
 +
        bn = 18 / (n * pi);
 +
        term_base = bn * (n * pi) * exp(-(n*pi)^2 * t(i));
 +
        sum_i = sum_i + term_base * cos(0);          % cos(n*pi*0) = 1
 +
        sum_d = sum_d + term_base * cos(n * pi);    % cos(n*pi) = (-1)^n
 +
    end
 +
    flujo0(i) = 9 + sum_i;
 +
    flujo1(i) = 9 + sum_d;
 +
end
 +
 
 +
% Gráfica
 +
figure;
 +
plot(t, flujo0, 'b', 'LineWidth', 2); hold on;
 +
plot(t, flujo1, 'r', 'LineWidth', 2);
 +
grid on;
 +
legend('Flujo en x=0 ', 'Flujo en x=1');
 +
title('Flujo de calor en los extremos a lo largo del tiempo');
 +
xlabel('Tiempo (t)');
 +
ylabel('Gradiente de Temperatura u_x');
 +
}}
 +
 
 +
[[Archivo:Flujoo1.jpg|centro|300px|Flujo de calor]]<br />
  
De nuevo, hemos desarrollado un código en Matlab para dibujar la evolución del flujo entrante y saliente.
 
  
  
 
==Efecto de cambiar la conductividad ==
 
==Efecto de cambiar la conductividad ==
  
Ahora vamos a cambiar la conductividad térmica de la varilla de <math>\alpha=1</math> a <math>\alpha=1/2</math>. Esto quiere decir que ahora el calor se mueve de manera más lenta a lo largo de la varilla. Entonces tenemos que con este cambio la nueva ecuación del calor es:
+
Ahora vamos a cambiar la conductividad térmica de la varilla de <math>\alpha=1</math> a <math>\alpha=1/2</math>. Esto quiere decir que ahora el calor se mueve de manera más lenta a lo largo de la varilla y que por tanto se tardará más en llegar al estado estacionario. Entonces tenemos que con este cambio la nueva ecuación del calor es:
  
 
:<math>u_t - \frac{1}{2}u_{xx}=0</math>
 
:<math>u_t - \frac{1}{2}u_{xx}=0</math>
Línea 95: Línea 155:
 
:<math>u(x,t) = (9x + 1) + \sum_{n=1}^{\infty} \left( \frac{18}{n\pi} \right) e^{-\frac{(n\pi)^2 t}{2}} \sin(n\pi x)</math>
 
:<math>u(x,t) = (9x + 1) + \sum_{n=1}^{\infty} \left( \frac{18}{n\pi} \right) e^{-\frac{(n\pi)^2 t}{2}} \sin(n\pi x)</math>
  
== Construcción con serie de Fourier real ==
+
Pero ahora la varilla tarda más en calentarse o enfriarse en cada punto, es decir, la solución se aproxima más despacio al estado estacionario.
 +
 
 +
Para compararlas, hemos creado un código en Matlab donde calcularemos las dos soluciones  (<math>\alpha=1</math> y <math>\alpha=1/2</math>) usando los primeros 10 términos de la serie
 +
 
 +
{{matlab|codigo=
 +
L = 1; t_final = 1; Nx = 60; Nt = 60;
 +
x = linspace(0, L, Nx);
 +
t = linspace(0, t_final, Nt);
 +
[X, T] = meshgrid(x, t);
 +
 
 +
% Estado Estacionario
 +
V1 = 9*X + 1;
 +
V2 = 9*0.5 + 1; % Valor en x=0.5
 +
 
 +
% Cálculo de la serie de Fourier para ambos coeficientes
 +
W1 = zeros(size(X));
 +
W2 = zeros(size(X));
 +
 
 +
for n = 1:10
 +
    bn = 18 / (n * pi);
 +
    % Caso alpha = 1
 +
    W1 = W1 + bn * exp(-(n*pi)^2 * T) .* sin(n*pi * X);
 +
    % Caso alpha = 1/2
 +
    W2 = W2 + bn * exp(-0.5 * (n*pi)^2 * T) .* sin(n*pi * X);
 +
end
 +
 
 +
U1 = V1 + W1;
 +
U2 = V1 + W2;
 +
 
 +
% Grafica 1 (superficies 3D)
 +
figure('Units', 'normalized', 'Position', [0.1, 0.2, 0.8, 0.4]);
 +
 
 +
subplot(1,2,1);
 +
surf(X, T, U1); shading interp; colorbar;
 +
title('Solución con \alpha = 1');
 +
xlabel('Posición (x)'); ylabel('Tiempo (t)'); zlabel('Temp (u)');
 +
 
 +
subplot(1,2,2);
 +
surf(X, T, U2); shading interp; colorbar;
 +
title('Solución con \alpha = 1/2');
 +
xlabel('Posición (x)'); ylabel('Tiempo (t)'); zlabel('Temp (u)');
 +
 
 +
% Gráfica de diferencias en el punto medio ---
 +
x_idx = round(Nx/2); % Índice correspondiente a x=0.5
 +
dif1 = U1(:, x_idx) - V2;
 +
dif2 = U2(:, x_idx) - V2;
 +
 
 +
figure;
 +
plot(t, dif1, 'b', 'LineWidth', 2); hold on;
 +
plot(t, dif2, 'r', 'LineWidth', 2);
 +
grid on;
 +
title('Diferencia: u(1/2, t) - v(1/2)');
 +
xlabel('Tiempo (t)'); ylabel('Temperatura (ºC)');
 +
legend('\alpha = 1', '\alpha = 1/2');
 +
}}
 +
 
 +
[[Archivo:ComparaSuperf.jpg|izquierda|650px|Comparación de las conductividades térmicas]]
 +
[[Archivo:ComparaP.jpg|derecha|350px|Comparación entre la solución y el estado estacionario]]
 +
 
 +
== Efecto de un dato inicial discontinuo ==
 +
 
 +
Ahora vamos a estudiar la ecuación del calor cuando cambiamos la temperatura inicial de la varilla. Tenemos que ambos extremos se mantienen a temperatura constante <math>10ºC</math>, y la temperatura inicial viene dado por la función:
 +
 
 +
:<math>u_0(x)=10-10 \,\ \mathbf{1}_{[1/3,2/3]}(x)</math>.
 +
 
 +
Esto significa que la varilla comienza a <math>10ºC</math> excepto en el segmento central <math>[1/3,2/3]</math>, donde la temperatura inicial es <math>0ºC</math>.
 +
 
 +
El sistema de EDPs que modela el comportamiento de la temperatura  <math>u(x,t)</math> es el siguiente:
 +
 
 +
:<math>\begin{cases}
 +
        u_t - u_{xx}=0 & \text{en } (0,1) \times (0, \infty) \\[10pt]
 +
        u(0,t) = 10 & t > 0 \\[5pt]
 +
        u(1,t) = 10 & t > 0 \\[5pt]
 +
        u(x,0) = 10-10 \,\ \mathbf{1}_{[1/3,2/3]}(x) & x \in [0,1]
 +
        \end{cases}</math>
 +
 
 +
====Solución estacionaria====
 +
 
 +
El estado estacionario se obtiene imponiendo que la temperatura no depende del tiempo. Entonces el problema para la solución estacionaria es:
 +
 
 +
:<math>\begin{cases}
 +
        - v_{xx}=0 \\[10pt]
 +
        v(0) = 10  \\[5pt]
 +
        v(1) = 10
 +
        \end{cases}</math>.
 +
 
 +
La solución general es <math>v(x)=Ax+B</math>. Aplicamos las condiciones de contorno y obtenemos que <math>B=10 </math>,  <math>A=0 </math>. Por tanto, la solución es simplemente <math>v(x)=10 </math>, lo cual tiene sentido ya que como ambos extremos están a la misma temperatura, el estado de equilibrio es una temperatura uniforme en toda la varilla.
 +
 
 +
==== Solución del problema y visualización ====
 +
 
 +
Ahora vamos a encontrar la solución al problema original utilizando el método de separación de variables. Se define el cambio variable <math>w(x,t)=u(x)-v(x,t)=u(x,t)-10</math>, que satisface la ecuación de calor con condiciones de contorno homogéneas <math> w(0,t)=w(1,t)=0 </math> y dato inicial  <math>w(x,0) = u(x,0) - v(x) = - 10 \, \mathbf{1}_{[1/3,2/3]}(x)</math>. La solución por separación de variables es:
 +
 
 +
:<math> u(x,t) = 10+  \sum_{n=1}^{\infty} b_n e^{-(n\pi)^2 t} \sin(n\pi x) </math>.
 +
 
 +
Podemos calcular los coeficientes de Fourier de manera analítica, pero en este apartado nos piden aproximar los coeficientes. El siguiente código de Matlab aproxima los coeficientes integrando numéricamente mediante la regla del trapecio y representa la solución <math> u(x,t) </math> como superficie tridimensional:
 +
 
 +
{{matlab|codigo=
 +
x = linspace(0,1,200);
 +
t = linspace(0,1,100);
 +
[X,T] = meshgrid(x,t);
 +
 
 +
u = 10*ones(size(X)); % parte estacionaria
 +
 
 +
for n=1:10
 +
    f = @(x) -10*(x>=1/3 & x<=2/3).*sin(n*pi*x);
 +
    bn = 2*trapz(x,f(x));
 +
   
 +
    u = u + bn*sin(n*pi*X).*exp(-n^2*pi^2*T);
 +
end
 +
 
 +
surf(X,T,u)
 +
shading interp
 +
xlabel('x')
 +
ylabel('t')
 +
zlabel('u(x,t)')
 +
title('Evolución de la temperatura')
 +
}}
 +
 
 +
[[Archivo: Evoluciontemp.jpg|centro|400px|Gráfica de la solución]]<br />
 +
 
 +
En <math>t=0</math> podemos ver que el intervalo <math> [1/3,2/3] </math> está a <math> 0ºC </math> mientras que el resto de la varilla está a <math> 10ºC </math>. A medida que <math> t </math> crece, el calor se va distribuyendo por toda la barra hasta alcanzar la temperatura uniforme <math> v(x)=10 </math>.
 +
 
 +
== Cambiamos condiciones frontera ==
 +
 
 +
Al estar el extremo izquierdo (<math>x=0</math>) aislado térmicamente, el flujo de calor en ese punto es cero, lo que se traduce en una condición de contorno de Neumann (<math>u_x(0,t) = 0</math>). El extremo derecho (<math>x=1</math>) se mantiene a <math>10^\circ C</math>. La condición inicial sigue siendo la del apartado 7.
 +
 
 +
El sistema de la EDP queda así:
 +
 
 +
<math> \begin{cases}
 +
u_t = u_{xx}, \quad x \in (0,1), \ t > 0 \\
 +
u_x(0,t) = 0 \\
 +
u(1,t) = 10 \\
 +
u(x,0) = 10-10 \,\ \mathbf{1}_{[1/3,2/3]}(x) & x \in [0,1]
 +
\end{cases} </math>
 +
 
 +
'''Solución estacionaria'''
 +
 
 +
La solución del estado estacionario <math>v(x)</math> no depende del tiempo, obteniéndose el problema
 +
 
 +
<math> \begin{cases}
 +
-v_{xx}=0\\
 +
v(0) = 0 \\
 +
v(1) = 10
 +
\end{cases} </math>
 +
 
 +
Luego, resolviendo el problema con las condiciones iniciales dadas, se obtiene que la solución estacionaria es
 +
 
 +
:<math>v(x) = 10</math>
 +
 
 +
'''Solución para el sistema homogéneo'''
 +
 
 +
Aplicamos separación de variables para el problema homogéneo, donde obtenemos que los autovalores son <math>\lambda_n = \left(\frac{(2n-1)\pi}{2}\right)^2</math> y la nueva base de autofunciones es:
 +
:<math>X_n(x) = \cos\left(\frac{(2n-1)\pi}{2} x\right)</math>
 +
 
 +
'''Comprobación analítica de la ortogonalidad'''
 +
 
 +
El enunciado pide comprobar explícitamente que estas autofunciones son ortogonales en <math>[0,1]</math>. Debemos demostrar que para <math>n \neq m</math>:
 +
:<math>\int_0^1 \cos\left(\frac{(2n-1)\pi}{2} x\right) \cos\left(\frac{(2m-1)\pi}{2} x\right) dx = 0</math>
 +
 
 +
Usamos la identidad trigonométrica <math>\cos(A)\cos(B) = \frac{1}{2}[\cos(A+B) + \cos(A-B)]</math>:
 +
:<math>I = \frac{1}{2} \int_0^1 \left[ \cos\left( \frac{(2n+2m-2)\pi}{2} x \right) + \cos\left( \frac{(2n-2m)\pi}{2} x \right) \right] dx</math>
 +
:<math>I = \frac{1}{2} \int_0^1 \left[ \cos((n+m-1)\pi x) + \cos((n-m)\pi x) \right] dx</math>
 +
 
 +
Al integrar y evaluar entre 0 y 1:
 +
:<math>I = \frac{1}{2} \left[ \frac{\sin((n+m-1)\pi x)}{(n+m-1)\pi} + \frac{\sin((n-m)\pi x)}{(n-m)\pi} \right]_0^1</math>
 +
 
 +
Sustituyendo <math>x=1</math>, el seno de cualquier múltiplo entero de <math>\pi</math> es siempre 0. Al evaluar en <math>x=0</math>, los senos también son 0. Por tanto, <math>I = 0</math>, quedando demostrada analíticamente su ortogonalidad.
 +
 
 +
''' Solución y cálculo de coeficientes'''
 +
 
 +
La solución temporal es <math>T_n(t) = e^{-\left(\frac{(2n-1)\pi}{2}\right)^2 t}</math>. Superponiendo todas las soluciones, recuperamos <math>u(x,t)</math>:
 +
:<math>u(x,t) = 10 + \sum_{n=1}^{\infty} c_n \cos\left(\frac{(2n-1)\pi}{2} x\right) e^{-\left(\frac{(2n-1)\pi}{2}\right)^2 t}</math>
 +
 
 +
 
 +
 
 +
Como realizamos en el apartado anterior, aproximamos los coeficientes de Fourier numéricamente. La integral exacta para nuestra nueva base es:
 +
 
 +
:<math>c_n = 2 \int_0^1 v(x,0) \cos\left(\frac{(2n-1)\pi}{2} x\right) dx</math>
 +
 
 +
Esta integral la aproximaremos utilizando las funciones de cuadratura incluidas en Matlab. Además, igual que en los apartados anteriores representaremos la solución tridimensional utilizando el código que muestra a continuación:
 +
 
 +
<syntaxhighlight lang="matlab">
 +
Nx = 100; % Subintervalos en x
 +
Nt = 100; % Subintervalos en t
 +
x = linspace(0, 1, Nx+1);
 +
t = linspace(0, 1, Nt+1);
 +
 
 +
[X, T] = meshgrid(x, t);
 +
 
 +
% Condición inicial transitoria v(x,0)
 +
v0 = zeros(1, length(x));
 +
v0(x >= 1/3 & x <= 2/3) = -10;
 +
 
 +
% Coeficientes de Fourier
 +
num_terminos = 10;
 +
c = zeros(1, num_terminos);
 +
 
 +
for n = 1:num_terminos
 +
    % Autofunciones
 +
    mu_n = (2*n - 1) * pi / 2;
 +
   
 +
    % Función a integrar
 +
    fx = v0 .* cos(mu_n * x);
 +
   
 +
    % Cuadratura con la regla del trapecio
 +
    c(n) = 2 * trapz(x, fx);
 +
end
 +
 
 +
% Solución
 +
U_transitoria = zeros(size(X));
 +
 
 +
% Sumamos los primeros 10 términos de la serie
 +
for n = 1:num_terminos
 +
    mu_n = (2*n - 1) * pi / 2;
 +
    termino_n = c(n) * cos(mu_n * X) .* exp(-(mu_n^2) * T);
 +
    U_transitoria = U_transitoria + termino_n;
 +
end
 +
 
 +
% La solución total es la suma de la parte transitoria y el estado estacionario
 +
U_total = 10 + U_transitoria;
 +
 
 +
% Representación tridimensional
 +
figure;
 +
surf(X, T, U_total, 'EdgeColor', 'none');
 +
colormap jet;
 +
colorbar;   
 +
xlabel('Posición x');
 +
ylabel('Tiempo t');
 +
zlabel('Temperatura u(x,t)');
 +
title('Evolución de la temperatura u(x,t)');
 +
</syntaxhighlight>
 +
 
 +
[[Archivo:grafica_calor_apartado8.png|centro|400px|Gráfica de la solución]]<br />
  
Para <math>x \in [-1, 1]</math>, definimos la función <math>f_{\sigma}(x)</math> mediante la siguiente expresión:
+
==  Principio del máximo ==
  
:<math>f_{\sigma}(x) = \frac{a_0}{2} + \sum_{n=1}^{N} [a_n \cos(\pi n x) + b_n \sin(\pi n x)]</math>
+
El principio del máximo para la ecuación del calor nos dice que los valores máximos y mínimos de la solución en el dominio se alcanzan en la frontera parabólica, es decir, en las condiciones iniciales o en las de contorno.
  
=== Propiedades de los coeficientes ===
+
En nuestro caso tenemos que las condiciones de contorno son:
Como vimos en el anterior trabajo, podemos elegir los coeficientes de Fourier de forma aleatoria. Los coeficientes <math>a_n</math> y <math>b_n</math> se considerarán variables aleatorias independientes siguiendo una distribución simétrica (con media cero). Los ejemplos para este trabajo, igual que en el anterior serán:
+
  
* Distribución Uniforme: <math>a_n, b_n \sim \mathcal{U}[-c_n, c_n]</math>
+
<math> u(0,t)=u(1,t)=10 </math>,
* Distribución Normal: <math>a_n, b_n \sim \mathcal{N}(0, \sigma_n^2)</math>
+
  
=== Función acotada ===
+
y el dato inicial cumple que:
Para garantizar que la función sea acotada, es decir, que <math>|f_{\sigma}(x)| \leq M</math>, se pueden seguir dos enfoques:
+
  
# Normalización: Elegir coeficientes acotados y aplicar un proceso de normalización.
+
<math> 0 \leq u_0(x) \leq 10</math>.
# Suma de coeficientes pequeños: Aprovechar el hecho de que una suma de senos y cosenos con coeficientes suficientemente pequeños produce funciones acotadas.
+
  
== Ecuación del calor y solución con dato inicial <math>f_{\sigma}</math> ==
+
Por tanto, todos los valores de la solución en la frontera están entre 0 y 10. Aplicando el principio del máximo, tenemos que:
  
Consideramos el problema de Cauchy en <math>\mathbb{R}</math>:
+
<math> 0 \leq u(x,t) \leq 10 \text{ para todo } x\in [0,1], t>0</math>.
  
:<math>\begin{cases} u_t = u_{xx}, \\ u(x,0) = f_{\sigma}(x), \end{cases} x \in \mathbb{R}, t > 0,</math>
+
== Principio de comparación ==
  
con <math>f_{\sigma}</math> de soporte en <math>(-1, 1)</math>. La solución viene dada por la convolución con la solución fundamental de la ecuación del calor:
+
El principio de comparación para la ecuación del calor establece que si tenemos dos soluciones <math>u(x,t)</math> y <math>v(x,t)</math> definidas en un dominio <math>[0,1] \times [0,T]</math>, y se cumple que <math>u \le v</math> en la '''frontera parabólica''' (es decir, en la condición inicial <math>t=0</math> y en los extremos <math>x=0</math> y <math>x=1</math>), entonces <math>u(x,t) \le v(x,t)</math> en todo el dominio para cualquier <math>t > 0</math>.
  
:<math>u(x,t) = \int_{-\infty}^{\infty} G(x - y, t) f_{\sigma}(y) \, dy, \quad G(z,t) = \frac{1}{\sqrt{4\pi t}} e^{-z^2/(4t)}.</math>
+
Para ilustrar este principio, vamos a elegir dos soluciones analíticas sencillas de la ecuación del calor homogénea (<math>u_t = u_{xx}</math> y <math>v_t = v_{xx}</math>) que cumplan estas condiciones.
  
==  Promedio de la temperatura en <math>x = 0</math> a lo largo del tiempo ==
+
'''Elección de las soluciones:'''
 +
* '''Solución 1 (<math>u</math>):''' Elegimos una condición inicial <math>u(x,0) = \sin(\pi x)</math> con extremos fijos a temperatura cero (<math>u(0,t) = u(1,t) = 0</math>). Su solución exacta es un único término de la serie de Fourier:
 +
:: <math>u(x,t) = \sin(\pi x) e^{-\pi^2 t}</math>
  
Calculamos la esperanza matemática de la temperatura, fijando <math> x=0 </math>. Por las propiedades de la esperanza,
+
* '''Solución 2 (<math>v</math>):''' Elegimos una condición inicial que sea el doble de la anterior, <math>v(x,0) = 2\sin(\pi x)</math>, también con extremos a cero (<math>v(0,t) = v(1,t) = 0</math>). Su solución exacta es:
 +
:: <math>v(x,t) = 2\sin(\pi x) e^{-\pi^2 t}</math>
  
:<math>\mathbb{E}[u(0,t)] = \int_{-\infty}^{\infty} G(-y, t) \mathbb{E}[f_{\sigma}(y)] \, dy = 0,</math>
+
'''Comprobación en la frontera parabólica:'''
 +
1. En <math>t = 0</math>: Como <math>x \in [0,1]</math>, el seno siempre es positivo. Por tanto, <math>\sin(\pi x) \le 2\sin(\pi x)</math>, lo que implica <math>u(x,0) \le v(x,0)</math>.
 +
2. En <math>x = 0</math> y <math>x = 1</math>: Se cumple que <math>0 \le 0</math>, por lo que <math>u(0,t) \le v(0,t)</math> y <math>u(1,t) \le v(1,t)</math>.
  
porque <math>\mathbb{E}[f_{\sigma}(y)] = 0</math> (los coeficientes tienen media cero). Por tanto, la temperatura esperada en <math>x = 0</math> es nula para todo <math>t > 0</math>.
+
Dado que <math>u \le v</math> en toda la frontera parabólica, el principio de comparación asegura que la superficie de <math>u(x,t)</math> estará siempre por debajo de la superficie de <math>v(x,t)</math>.

Revisión actual del 09:58 8 abr 2026

Trabajo realizado por estudiantes
Título Ecuación del calor. Grupo LAJS
Asignatura EDP
Curso 2025-26
Autores Leire Aparicio Urbiola

Álvaro Silva Blanco

Julia Calado Bonnin

Sofía García Suárez


Este artículo ha sido escrito por estudiantes como parte de su evaluación en la asignatura



1 Póster

Poster Calor LAJS.png


2 Introducción

El estudio de la ecuación del calor es fundamental a la hora de estudiar cómo la temperatura se distribuye en un cuerpo a lo largo del tiempo mediante procesos de difusión. En este trabajo, nos centramos en el análisis de una varilla metálica unidimensional de longitud $L=1$. El objetivo principal será comprender propiedades clave como la convergencia al estado estacionario, la influencia de las condiciones de contorno (Dirichlet y Neumann) y el comportamiento de la solución ante datos iniciales discontinuos. A través de la resolución por separación de variables y la implementación de códigos en MATLAB, ilustraremos fenómenos como el fenómeno de Gibbs y la velocidad infinita de propagación. Además, analizaremos la sensibilidad del sistema frente a cambios en la conductividad térmica, evaluando cómo este parámetro altera la tasa de decaimiento temporal de las soluciones.

3 Planteamiento y solución del problema

Comenzamos considerando una varilla metálica que ocupa el intervalo [math][0, 1][/math] y que se encuentra aislada por su superficie lateral, de forma que la conducción de calor únicamente ocurre en dirección longitudinal. La temperatura inicial de la varilla será de [math]10ºC[/math]. En el extremo derecho la temperatura se mantiene en [math]10ºC[/math], mientras que en el izquierdo la temperatura es siempre de [math]1ºC[/math]. Por tanto, si consideramos las constantes de conductividad térmica y calor específico iguales a uno, la ecuación que modeliza nuestro problema queda [math]u_t - u_{xx}=0, \quad x \in (0,1), \ t \gt 0[/math], sujeta a las condiciones de contorno [math]u(0,t) = 1[/math] (extremo izquierdo) y [math]u(1,t) = 10[/math] (extremo derecho). Por último, la condición inicial será [math]u(x,0) = 10 \quad \forall x \in [0,1][/math]. El sistema de EDPs que modeliza nuestro problema queda:

[math]\begin{cases} u_t - u_{xx}=0 & \text{en } (0,1) \times (0, \infty) \\[10pt] u(0,t) = 1 & t \gt 0 \\[5pt] u(1,t) = 10 & t \gt 0 \\[5pt] u(x,0) = 10 & x \in [0,1] \end{cases}[/math]
3.1 Solución estacionaria

En cuanto a la ecuación del estado estacionario, sabemos que ocurre al suponer [math]t \to \infty [/math] y que por tanto la solución ya no varía en tiempo, es decir, cuando [math] u_t \sim 0 [/math]. Entonces el problema para la solución estacionaria es

[math]\begin{cases} - v_{xx}=0 & \text{en } (0,1) \\[10pt] v(0) = 1 \\[5pt] v(1) = 10 \end{cases}[/math]

Lo que nos da una EDO que se resuelve fácilmente y se llega a la solución [math] v(x)=9x+1 [/math]. En la siguiente imagen podemos ver la gráfica de esta solución, que representa la temperatura que observaríamos si dejáramos pasar mucho tiempo bajo las condiciones descritas.

Visualización de la solución estacionaria


3.2 Solución del problema y visualización

A continuación hallamos la solución al problema original, que lo haremos por el método de separación de variables. La forma de resolverlo es considerando la solución como la suma del estado estacionario y una solución transitoria [math]w(x,t)[/math] que cumple condiciones de contorno, es decir, [math]u(x,t) = v(x) + w(x,t)[/math]. La parte [math]w(x,t)[/math] se calcula mediante la serie de Fourier [math]w(x,t) = \sum_{n=1}^{\infty} b_n e^{-(n\pi)^2 t} \sin(n\pi x)[/math], donde los coeficientes [math]b_n[/math] se calculan a partir de la condición inicial [math]w(x,0) = u(x,0) - v(x) = 10 - (9x + 1) = 9 - 9x[/math]. La solución final a nuestro problema es:

[math]u(x,t) = (9x + 1) + \sum_{n=1}^{\infty} \left( \frac{18}{n\pi} \right) e^{-(n\pi)^2 t} \sin(n\pi x)[/math]

Para la visualización de esta solución hemos creado un código en Matlab que nos da una gráfica tridimensional, que utiliza los primeros 10 términos de la serie de Fourier en el intervalo de tiempo [0, 1]. En la imagen que genera el código podemos observar que el extremo derecho de la varilla comienza en una temperatura de [math]10^{\circ}C[/math], y sin embargo, en el extremo izquierdo la temperatura cae hasta [math]1^{\circ}C[/math]. Además se observa el fenómeno de Gibbs en la gráfica: las oscilaciones que se ven cerca de [math]t=0[/math] y [math]x=0[/math] son una consecuencia de usar solo 10 términos de la serie de Fourier. Al intentar aproximar una discontinuidad (el salto de [math]10^{\circ}C[/math] a [math]1^{\circ}C[/math]), aparecen estas oscilaciones que desaparecen a medida que el tiempo avanza y la solución se suaviza. Se aprecia que cerca de [math]t=1[/math], la superficie es prácticamente una superficie plana inclinada, lo que indica que el sistema ha alcanzado o está muy cerca de su estado estacionario.

% Parámetros iniciales
L = 1;  
t_final = 1;
Nx = 50;            
Nt = 50;            

x = linspace(0, L, Nx);
t = linspace(0, t_final, Nt);
[X, T] = meshgrid(x, t);

% Solución estacionaria: v = 9x + 1 
V = 9*X + 1;

% Parte transitoria: suma de los primeros 10 términos de Fourier 
W = zeros(size(X));
for n = 1:10
    bn = 18 / (n * pi);
    W = W + bn * exp(-(n*pi)^2 * T) .* sin(n*pi * X);
end

% Solución final: u(x,t) = v(x) + w(x,t) 
U = V + W;

% Gráfica
figure;
surf(X, T, U);
shading interp; % Suaviza los colores
colorbar;
title('Evolución de la Temperatura (Primeros 10 términos)');
xlabel('Posición (x)');
ylabel('Tiempo (t)');
zlabel('Temperatura (u)');
grid on;


Gráfica de la solución


4 Estudio del flujo de calor en los extremos

Para analizar el flujo de calor en los extremos de la barra a lo largo del tiempo utilizamos la ley de Fourier, que asegura que el flujo es proporcional al gradiente de temperatura: [math]q = -k u_x[/math]. Como en el problema hemos asumido que la conductividad térmica era uno, resulta que el flujo es igual a la derivada espacial evaluada en los bordes de la barra. La derivada respecto de [math]x[/math] que obtuvimos antes es:

[math]u_x = 9 + \sum_{n=1}^{\infty} b_n n\pi e^{-(n\pi)^2 t} \cos(n\pi x)[/math]

De nuevo, hemos desarrollado un código en Matlab para dibujar la evolución del flujo entrante y saliente. De la imagen que nos devuelve el código podemos interpretar varias cosas: en primer lugar, vemos que ambos flujos convergen al valor 9, lo que tiene sentido porque antes hemos calculado que la solución estacionaria era [math]v(x)=9x+1[/math]. Además en [math]x=0[/math] el flujo es muy elevado, y esto se debe a que, como la barra está a [math]10 \circ C[/math] en un extremo y a [math]1 \circ C[/math] en el otro, hay una salida muy fuerte de energía hacia el exterior por la parte izquierda de la barra. De la misma manera, en el extremo derecho inicialmente el flujo es cercano a cero porque la barra y el borde están a la misma temperatura, y el flujo empieza a variar cuando el enfriamiento de la izquierda llega al lado derecho. Esta gráfica está relacionada con la que hemos visto antes: el flujo es la pendiente de la superficie que hemos dibujado antes.

% Parámetros
L = 1;
t = linspace(0.01, 1, 100); % Mejor evitar t=0 por la discontinuidad inicial
flujo0 = zeros(size(t));
flujo1 = zeros(size(t));

% Cálculo de los flujos usando 10 términos
for i = 1:length(t)
    sum_i = 0;
    sum_d = 0;
    for n = 1:10
        bn = 18 / (n * pi);
        term_base = bn * (n * pi) * exp(-(n*pi)^2 * t(i));
        sum_i = sum_i + term_base * cos(0);          % cos(n*pi*0) = 1
        sum_d = sum_d + term_base * cos(n * pi);     % cos(n*pi) = (-1)^n
    end
    flujo0(i) = 9 + sum_i;
    flujo1(i) = 9 + sum_d;
end

% Gráfica
figure;
plot(t, flujo0, 'b', 'LineWidth', 2); hold on;
plot(t, flujo1, 'r', 'LineWidth', 2);
grid on;
legend('Flujo en x=0 ', 'Flujo en x=1');
title('Flujo de calor en los extremos a lo largo del tiempo');
xlabel('Tiempo (t)');
ylabel('Gradiente de Temperatura u_x');


Flujo de calor


5 Efecto de cambiar la conductividad

Ahora vamos a cambiar la conductividad térmica de la varilla de [math]\alpha=1[/math] a [math]\alpha=1/2[/math]. Esto quiere decir que ahora el calor se mueve de manera más lenta a lo largo de la varilla y que por tanto se tardará más en llegar al estado estacionario. Entonces tenemos que con este cambio la nueva ecuación del calor es:

[math]u_t - \frac{1}{2}u_{xx}=0[/math]

La nueva solución es muy parecida a la de antes:

[math]u(x,t) = (9x + 1) + \sum_{n=1}^{\infty} \left( \frac{18}{n\pi} \right) e^{-\frac{(n\pi)^2 t}{2}} \sin(n\pi x)[/math]

Pero ahora la varilla tarda más en calentarse o enfriarse en cada punto, es decir, la solución se aproxima más despacio al estado estacionario.

Para compararlas, hemos creado un código en Matlab donde calcularemos las dos soluciones ([math]\alpha=1[/math] y [math]\alpha=1/2[/math]) usando los primeros 10 términos de la serie

L = 1; t_final = 1; Nx = 60; Nt = 60;
x = linspace(0, L, Nx);
t = linspace(0, t_final, Nt);
[X, T] = meshgrid(x, t);

% Estado Estacionario 
V1 = 9*X + 1; 
V2 = 9*0.5 + 1; % Valor en x=0.5

% Cálculo de la serie de Fourier para ambos coeficientes
W1 = zeros(size(X)); 
W2 = zeros(size(X)); 

for n = 1:10
    bn = 18 / (n * pi);
    % Caso alpha = 1
    W1 = W1 + bn * exp(-(n*pi)^2 * T) .* sin(n*pi * X);
    % Caso alpha = 1/2
    W2 = W2 + bn * exp(-0.5 * (n*pi)^2 * T) .* sin(n*pi * X);
end

U1 = V1 + W1;
U2 = V1 + W2;

% Grafica 1 (superficies 3D)
figure('Units', 'normalized', 'Position', [0.1, 0.2, 0.8, 0.4]);

subplot(1,2,1);
surf(X, T, U1); shading interp; colorbar;
title('Solución con \alpha = 1');
xlabel('Posición (x)'); ylabel('Tiempo (t)'); zlabel('Temp (u)');

subplot(1,2,2);
surf(X, T, U2); shading interp; colorbar;
title('Solución con \alpha = 1/2');
xlabel('Posición (x)'); ylabel('Tiempo (t)'); zlabel('Temp (u)');

% Gráfica de diferencias en el punto medio ---
x_idx = round(Nx/2); % Índice correspondiente a x=0.5
dif1 = U1(:, x_idx) - V2;
dif2 = U2(:, x_idx) - V2;

figure;
plot(t, dif1, 'b', 'LineWidth', 2); hold on;
plot(t, dif2, 'r', 'LineWidth', 2);
grid on;
title('Diferencia: u(1/2, t) - v(1/2)');
xlabel('Tiempo (t)'); ylabel('Temperatura (ºC)');
legend('\alpha = 1', '\alpha = 1/2');


Comparación de las conductividades térmicas Comparación entre la solución y el estado estacionario

6 Efecto de un dato inicial discontinuo

Ahora vamos a estudiar la ecuación del calor cuando cambiamos la temperatura inicial de la varilla. Tenemos que ambos extremos se mantienen a temperatura constante [math]10ºC[/math], y la temperatura inicial viene dado por la función:

[math]u_0(x)=10-10 \,\ \mathbf{1}_{[1/3,2/3]}(x)[/math].

Esto significa que la varilla comienza a [math]10ºC[/math] excepto en el segmento central [math][1/3,2/3][/math], donde la temperatura inicial es [math]0ºC[/math].

El sistema de EDPs que modela el comportamiento de la temperatura [math]u(x,t)[/math] es el siguiente:

[math]\begin{cases} u_t - u_{xx}=0 & \text{en } (0,1) \times (0, \infty) \\[10pt] u(0,t) = 10 & t \gt 0 \\[5pt] u(1,t) = 10 & t \gt 0 \\[5pt] u(x,0) = 10-10 \,\ \mathbf{1}_{[1/3,2/3]}(x) & x \in [0,1] \end{cases}[/math]

6.1 Solución estacionaria

El estado estacionario se obtiene imponiendo que la temperatura no depende del tiempo. Entonces el problema para la solución estacionaria es:

[math]\begin{cases} - v_{xx}=0 \\[10pt] v(0) = 10 \\[5pt] v(1) = 10 \end{cases}[/math].

La solución general es [math]v(x)=Ax+B[/math]. Aplicamos las condiciones de contorno y obtenemos que [math]B=10 [/math], [math]A=0 [/math]. Por tanto, la solución es simplemente [math]v(x)=10 [/math], lo cual tiene sentido ya que como ambos extremos están a la misma temperatura, el estado de equilibrio es una temperatura uniforme en toda la varilla.

6.2 Solución del problema y visualización

Ahora vamos a encontrar la solución al problema original utilizando el método de separación de variables. Se define el cambio variable [math]w(x,t)=u(x)-v(x,t)=u(x,t)-10[/math], que satisface la ecuación de calor con condiciones de contorno homogéneas [math] w(0,t)=w(1,t)=0 [/math] y dato inicial [math]w(x,0) = u(x,0) - v(x) = - 10 \, \mathbf{1}_{[1/3,2/3]}(x)[/math]. La solución por separación de variables es:

[math] u(x,t) = 10+ \sum_{n=1}^{\infty} b_n e^{-(n\pi)^2 t} \sin(n\pi x) [/math].

Podemos calcular los coeficientes de Fourier de manera analítica, pero en este apartado nos piden aproximar los coeficientes. El siguiente código de Matlab aproxima los coeficientes integrando numéricamente mediante la regla del trapecio y representa la solución [math] u(x,t) [/math] como superficie tridimensional:

x = linspace(0,1,200);
t = linspace(0,1,100);
[X,T] = meshgrid(x,t);

u = 10*ones(size(X)); % parte estacionaria

for n=1:10
    f = @(x) -10*(x>=1/3 & x<=2/3).*sin(n*pi*x);
    bn = 2*trapz(x,f(x));
    
    u = u + bn*sin(n*pi*X).*exp(-n^2*pi^2*T);
end

surf(X,T,u)
shading interp
xlabel('x')
ylabel('t')
zlabel('u(x,t)')
title('Evolución de la temperatura')


Gráfica de la solución

En [math]t=0[/math] podemos ver que el intervalo [math] [1/3,2/3] [/math] está a [math] 0ºC [/math] mientras que el resto de la varilla está a [math] 10ºC [/math]. A medida que [math] t [/math] crece, el calor se va distribuyendo por toda la barra hasta alcanzar la temperatura uniforme [math] v(x)=10 [/math].

7 Cambiamos condiciones frontera

Al estar el extremo izquierdo ([math]x=0[/math]) aislado térmicamente, el flujo de calor en ese punto es cero, lo que se traduce en una condición de contorno de Neumann ([math]u_x(0,t) = 0[/math]). El extremo derecho ([math]x=1[/math]) se mantiene a [math]10^\circ C[/math]. La condición inicial sigue siendo la del apartado 7.

El sistema de la EDP queda así:

[math] \begin{cases} u_t = u_{xx}, \quad x \in (0,1), \ t \gt 0 \\ u_x(0,t) = 0 \\ u(1,t) = 10 \\ u(x,0) = 10-10 \,\ \mathbf{1}_{[1/3,2/3]}(x) & x \in [0,1] \end{cases} [/math]

Solución estacionaria

La solución del estado estacionario [math]v(x)[/math] no depende del tiempo, obteniéndose el problema

[math] \begin{cases} -v_{xx}=0\\ v(0) = 0 \\ v(1) = 10 \end{cases} [/math]

Luego, resolviendo el problema con las condiciones iniciales dadas, se obtiene que la solución estacionaria es

[math]v(x) = 10[/math]

Solución para el sistema homogéneo

Aplicamos separación de variables para el problema homogéneo, donde obtenemos que los autovalores son [math]\lambda_n = \left(\frac{(2n-1)\pi}{2}\right)^2[/math] y la nueva base de autofunciones es:

[math]X_n(x) = \cos\left(\frac{(2n-1)\pi}{2} x\right)[/math]

Comprobación analítica de la ortogonalidad

El enunciado pide comprobar explícitamente que estas autofunciones son ortogonales en [math][0,1][/math]. Debemos demostrar que para [math]n \neq m[/math]:

[math]\int_0^1 \cos\left(\frac{(2n-1)\pi}{2} x\right) \cos\left(\frac{(2m-1)\pi}{2} x\right) dx = 0[/math]

Usamos la identidad trigonométrica [math]\cos(A)\cos(B) = \frac{1}{2}[\cos(A+B) + \cos(A-B)][/math]:

[math]I = \frac{1}{2} \int_0^1 \left[ \cos\left( \frac{(2n+2m-2)\pi}{2} x \right) + \cos\left( \frac{(2n-2m)\pi}{2} x \right) \right] dx[/math]
[math]I = \frac{1}{2} \int_0^1 \left[ \cos((n+m-1)\pi x) + \cos((n-m)\pi x) \right] dx[/math]

Al integrar y evaluar entre 0 y 1:

[math]I = \frac{1}{2} \left[ \frac{\sin((n+m-1)\pi x)}{(n+m-1)\pi} + \frac{\sin((n-m)\pi x)}{(n-m)\pi} \right]_0^1[/math]

Sustituyendo [math]x=1[/math], el seno de cualquier múltiplo entero de [math]\pi[/math] es siempre 0. Al evaluar en [math]x=0[/math], los senos también son 0. Por tanto, [math]I = 0[/math], quedando demostrada analíticamente su ortogonalidad.

Solución y cálculo de coeficientes

La solución temporal es [math]T_n(t) = e^{-\left(\frac{(2n-1)\pi}{2}\right)^2 t}[/math]. Superponiendo todas las soluciones, recuperamos [math]u(x,t)[/math]:

[math]u(x,t) = 10 + \sum_{n=1}^{\infty} c_n \cos\left(\frac{(2n-1)\pi}{2} x\right) e^{-\left(\frac{(2n-1)\pi}{2}\right)^2 t}[/math]


Como realizamos en el apartado anterior, aproximamos los coeficientes de Fourier numéricamente. La integral exacta para nuestra nueva base es:

[math]c_n = 2 \int_0^1 v(x,0) \cos\left(\frac{(2n-1)\pi}{2} x\right) dx[/math]

Esta integral la aproximaremos utilizando las funciones de cuadratura incluidas en Matlab. Además, igual que en los apartados anteriores representaremos la solución tridimensional utilizando el código que muestra a continuación:

Nx = 100; % Subintervalos en x
Nt = 100; % Subintervalos en t
x = linspace(0, 1, Nx+1);
t = linspace(0, 1, Nt+1);

[X, T] = meshgrid(x, t); 

% Condición inicial transitoria v(x,0)
v0 = zeros(1, length(x));
v0(x >= 1/3 & x <= 2/3) = -10; 

% Coeficientes de Fourier 
num_terminos = 10;
c = zeros(1, num_terminos);

for n = 1:num_terminos
    % Autofunciones
    mu_n = (2*n - 1) * pi / 2;
    
    % Función a integrar
    fx = v0 .* cos(mu_n * x);
    
    % Cuadratura con la regla del trapecio
    c(n) = 2 * trapz(x, fx);
end

% Solución
U_transitoria = zeros(size(X));

% Sumamos los primeros 10 términos de la serie
for n = 1:num_terminos
    mu_n = (2*n - 1) * pi / 2;
    termino_n = c(n) * cos(mu_n * X) .* exp(-(mu_n^2) * T);
    U_transitoria = U_transitoria + termino_n;
end

% La solución total es la suma de la parte transitoria y el estado estacionario
U_total = 10 + U_transitoria;

% Representación tridimensional
figure;
surf(X, T, U_total, 'EdgeColor', 'none');
colormap jet; 
colorbar;    
xlabel('Posición x');
ylabel('Tiempo t');
zlabel('Temperatura u(x,t)');
title('Evolución de la temperatura u(x,t)');

Gráfica de la solución

8 Principio del máximo

El principio del máximo para la ecuación del calor nos dice que los valores máximos y mínimos de la solución en el dominio se alcanzan en la frontera parabólica, es decir, en las condiciones iniciales o en las de contorno.

En nuestro caso tenemos que las condiciones de contorno son:

[math] u(0,t)=u(1,t)=10 [/math],

y el dato inicial cumple que:

[math] 0 \leq u_0(x) \leq 10[/math].

Por tanto, todos los valores de la solución en la frontera están entre 0 y 10. Aplicando el principio del máximo, tenemos que:

[math] 0 \leq u(x,t) \leq 10 \text{ para todo } x\in [0,1], t\gt0[/math].

9 Principio de comparación

El principio de comparación para la ecuación del calor establece que si tenemos dos soluciones [math]u(x,t)[/math] y [math]v(x,t)[/math] definidas en un dominio [math][0,1] \times [0,T][/math], y se cumple que [math]u \le v[/math] en la frontera parabólica (es decir, en la condición inicial [math]t=0[/math] y en los extremos [math]x=0[/math] y [math]x=1[/math]), entonces [math]u(x,t) \le v(x,t)[/math] en todo el dominio para cualquier [math]t \gt 0[/math].

Para ilustrar este principio, vamos a elegir dos soluciones analíticas sencillas de la ecuación del calor homogénea ([math]u_t = u_{xx}[/math] y [math]v_t = v_{xx}[/math]) que cumplan estas condiciones.

Elección de las soluciones:

  • Solución 1 ([math]u[/math]): Elegimos una condición inicial [math]u(x,0) = \sin(\pi x)[/math] con extremos fijos a temperatura cero ([math]u(0,t) = u(1,t) = 0[/math]). Su solución exacta es un único término de la serie de Fourier:
[math]u(x,t) = \sin(\pi x) e^{-\pi^2 t}[/math]
  • Solución 2 ([math]v[/math]): Elegimos una condición inicial que sea el doble de la anterior, [math]v(x,0) = 2\sin(\pi x)[/math], también con extremos a cero ([math]v(0,t) = v(1,t) = 0[/math]). Su solución exacta es:
[math]v(x,t) = 2\sin(\pi x) e^{-\pi^2 t}[/math]

Comprobación en la frontera parabólica: 1. En [math]t = 0[/math]: Como [math]x \in [0,1][/math], el seno siempre es positivo. Por tanto, [math]\sin(\pi x) \le 2\sin(\pi x)[/math], lo que implica [math]u(x,0) \le v(x,0)[/math]. 2. En [math]x = 0[/math] y [math]x = 1[/math]: Se cumple que [math]0 \le 0[/math], por lo que [math]u(0,t) \le v(0,t)[/math] y [math]u(1,t) \le v(1,t)[/math].

Dado que [math]u \le v[/math] en toda la frontera parabólica, el principio de comparación asegura que la superficie de [math]u(x,t)[/math] estará siempre por debajo de la superficie de [math]v(x,t)[/math].