<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>https://mat.caminos.upm.es/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Violetalb</id>
		<title>MateWiki - Contribuciones del usuario [es]</title>
		<link rel="self" type="application/atom+xml" href="https://mat.caminos.upm.es/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Violetalb"/>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/wiki/Especial:Contribuciones/Violetalb"/>
		<updated>2026-04-29T12:08:02Z</updated>
		<subtitle>Contribuciones del usuario</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_(Grupo_ACIRV)&amp;diff=85040</id>
		<title>Ecuación del calor (Grupo ACIRV)</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Ecuaci%C3%B3n_del_calor_(Grupo_ACIRV)&amp;diff=85040"/>
				<updated>2025-03-19T12:40:17Z</updated>
		
		<summary type="html">&lt;p&gt;Violetalb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Ecuación del calor (Grupo ACIRV). | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP24/25|2024-25]] | Ángela Sotelo Fernández, Carmen Doñoro Molina, Inés Torres Gómez, Rubén Gutiérrez Hernández, Violeta Luján Barrios.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
En esta página ilustraremos el uso del método de diferencias finitas para resolver la ecuación del calor en una dimensión.&lt;br /&gt;
&lt;br /&gt;
Dicho método sirve para resolver de manera aproximada ecuaciones diferenciales parciales y ordinarias de manera numérica. Funciona sustituyendo las derivadas por cocientes de diferencias que vienen dados por valores de la función en puntos discretos de una malla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Modelización de la ecuación del calor con una dimensión=&lt;br /&gt;
&lt;br /&gt;
La ecuación a resolver es&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
u_t = \alpha u_{xx}, \quad x \in [0,1], \ t &amp;gt; 0,\ \alpha = 1.&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde \(u(x,t)\) representa la temperatura en el punto \(x\) y en el instante \(t\), y \(\alpha\) es una constante que viene dada por la conductividad térmica del material.&lt;br /&gt;
&lt;br /&gt;
Se considera una varilla metálica en el intervalo \([0,1]\) y aislada en su superficie lateral tal que la conducción de calor solo se produce en la dirección longitudinal. La temperatura inicial de la varilla es \(10^{\circ}C\). En los extremos derecho e izquierdo la temperatura se mantiene a \(10^{\circ}C\)  y \(1^{\circ}C\) respectivamente.&lt;br /&gt;
&lt;br /&gt;
El sistema que modeliza el comportamiento de la temperatura, representada por la función \(u(x,t)\), es el siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\left \{&lt;br /&gt;
\begin{array}{llll}&lt;br /&gt;
u_t - u_{xx} &amp;amp; = 0 &amp;amp; x \in [0,1], &amp;amp; t&amp;gt;0 \\&lt;br /&gt;
u(0,t)&amp;amp; = 1 &amp;amp; t&amp;gt;0\\&lt;br /&gt;
u(1,t) &amp;amp; = 10 &amp;amp; t&amp;gt;0\\&lt;br /&gt;
u(x,0) &amp;amp;= 10 &amp;amp; x \in [0,1]&lt;br /&gt;
\end{array}&lt;br /&gt;
\right .&lt;br /&gt;
\tag{1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Resolución analítica del problema=&lt;br /&gt;
&lt;br /&gt;
Primeramente, resolveremos el problema analíticamente para después comparar su solución con la obtenida numéricamente.&lt;br /&gt;
&lt;br /&gt;
Puesto que el sistema obtenido \((1)\) no es homogéneo, debemos encontrar primero la solución estacionaria. Es decir, suponemos que \(t \rightarrow \infty\) (la solución ya no varía en el tiempo).&lt;br /&gt;
&lt;br /&gt;
La solución estacionaria obtenida es \(v(x) = 9x +1\) . Al representarla gráficamente en 3D obtenemos:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Sol estacionaria.png|600px|thumb|right|Solución estacionaria]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=%Creamos una matriz que representa una malla de puntos (tiempo,&lt;br /&gt;
% espacio) y en cada una de las columnas introducimos el valor de 9x+1 para todos los tiempos.&lt;br /&gt;
&lt;br /&gt;
% Matriz&lt;br /&gt;
evaluaciones = zeros(100,100);&lt;br /&gt;
&lt;br /&gt;
% Límite temporal y vectores &lt;br /&gt;
T = 1;&lt;br /&gt;
t = linspace(0,T,100);&lt;br /&gt;
x = linspace(0,1,100);&lt;br /&gt;
&lt;br /&gt;
% Rellenamos la matriz &lt;br /&gt;
for j = 1:100&lt;br /&gt;
    evaluaciones(:,j) = (9*x(j) + 1) * ones(100,1);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Representación gráfica&lt;br /&gt;
surf(t,x,evaluaciones')&lt;br /&gt;
title('Solución estacionaria: v(x) = 9x + 1')&lt;br /&gt;
xlabel('Tiempo')&lt;br /&gt;
ylabel('Espacio')&lt;br /&gt;
zlabel('Temperatura (°C)')&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Una vez calculada la solución estacionaria, homogeneizamos el sistema definiendo la ecuación \(w(x,t) = u(x,t) - v(x)\).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\left \{&lt;br /&gt;
\begin{array}{llll}&lt;br /&gt;
w_t - w_{xx} &amp;amp; = 0 &amp;amp; x \in [0,1], &amp;amp; t&amp;gt;0 \\&lt;br /&gt;
w(0,t)&amp;amp; = 0 &amp;amp; t&amp;gt;0\\&lt;br /&gt;
w(1,t) &amp;amp; = 0 &amp;amp; t&amp;gt;0\\&lt;br /&gt;
w(x,0) &amp;amp;= 9(1-x) &amp;amp; x \in [0,1]&lt;br /&gt;
\end{array}&lt;br /&gt;
\right .&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resolviendo mediante el método de separación de variables y por superposición de soluciones, obtenemos la siguiente solución:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
w(x,t) = \sum^{\infty}_{k=1} \frac{18}{k\pi}sen(k\pi x)e^{-k^2 \pi^2 t} .&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Véase la evolución de la temperatura en función del tiempo en cada punto de la barra:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Heat equation analitico.gif|600px|thumb|right|Solución analítica]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
% Resolución de la ecuación del calor 1D por diferencias finitas y comparación con solución analítica&lt;br /&gt;
clear all; close all;&lt;br /&gt;
% Parámetros&lt;br /&gt;
L = 1;        % Longitud de la varilla&lt;br /&gt;
Nx = 20;      % Número de puntos en el espacio&lt;br /&gt;
dx = L / (Nx-1);&lt;br /&gt;
alpha = 1; % Difusividad térmica&lt;br /&gt;
dt = 0.0005;  % Paso de tiempo&lt;br /&gt;
Nt = 1000;     % Número de pasos de tiempo&lt;br /&gt;
&lt;br /&gt;
% Discretización espacial&lt;br /&gt;
x = linspace(0, L, Nx);&lt;br /&gt;
&lt;br /&gt;
% Condiciones iniciales&lt;br /&gt;
u = 10 * ones(Nx, 1); &lt;br /&gt;
&lt;br /&gt;
% Condiciones de frontera&lt;br /&gt;
u(1) = 1;   % Extremo izquierdo&lt;br /&gt;
u(end) = 10; % Extremo derecho&lt;br /&gt;
&lt;br /&gt;
% Definimos la solucón estacionaria&lt;br /&gt;
&lt;br /&gt;
estacionaria = @(x)9*x +1;&lt;br /&gt;
&lt;br /&gt;
% Coeficiente del método&lt;br /&gt;
r = alpha * dt / dx^2;&lt;br /&gt;
if r &amp;gt; 0.5&lt;br /&gt;
    error('El método no es estable, reduce dt o aumenta dx.');&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Preparar la grabación de un GIF&lt;br /&gt;
filename = 'heat_equation_analitico.gif';&lt;br /&gt;
frame_delay = 0.1;&lt;br /&gt;
&lt;br /&gt;
% Evolución temporal&lt;br /&gt;
for n = 1:Nt&lt;br /&gt;
    % Solución analítica&lt;br /&gt;
    t = n * dt;&lt;br /&gt;
    w = zeros(size(x));&lt;br /&gt;
    for k = 1:100 % Consideramos los primeros 100 términos&lt;br /&gt;
%         w = w + (18 / (k * pi)) * sin(k * pi * x) * exp(-k^2 * pi^2 * t);&lt;br /&gt;
        w = w + (-(18*(sin(pi*k) - pi*k))/(k^2*pi^2))*sin(k * pi * x) * exp(-k^2 * pi^2 * t);&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Guardar frames en el GIF&lt;br /&gt;
    if mod(n, 10) == 0&lt;br /&gt;
        plot(x, estacionaria(x), 'g-', 'LineWidth', 2);&lt;br /&gt;
        hold on;&lt;br /&gt;
        plot(x, w + 9*x+ 1, 'r--', 'LineWidth', 2); % +1 para respetar la condición de frontera izquierda&lt;br /&gt;
        hold off;&lt;br /&gt;
        xlabel('Posición'); ylabel('Temperatura');&lt;br /&gt;
        title(sprintf('Tiempo: %.3f s', n*dt));&lt;br /&gt;
        legend('Solución estacionaria','Solución Analítica');&lt;br /&gt;
        drawnow;&lt;br /&gt;
        frame = getframe(gcf);&lt;br /&gt;
        img = frame2im(frame);&lt;br /&gt;
        [A, map] = rgb2ind(img, 256);&lt;br /&gt;
        if n == 10&lt;br /&gt;
            imwrite(A, map, filename, 'gif', 'LoopCount', inf, 'DelayTime', frame_delay);&lt;br /&gt;
        else&lt;br /&gt;
            imwrite(A, map, filename, 'gif', 'WriteMode', 'append', 'DelayTime', frame_delay);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Gráfica final&lt;br /&gt;
figure;&lt;br /&gt;
plot(x, estacionaria(x), 'g-', 'LineWidth', 2);&lt;br /&gt;
hold on;&lt;br /&gt;
plot(x, w + 9*x + 1, 'r--', 'LineWidth', 2);&lt;br /&gt;
hold off;&lt;br /&gt;
xlabel('Posición'); ylabel('Temperatura');&lt;br /&gt;
title('Comparación final de temperatura en la varilla');&lt;br /&gt;
legend('Solución estacionaria', 'Solución Analítica');&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Resolución numérica de la ecuación del calor=&lt;br /&gt;
&lt;br /&gt;
Falta obtener la resolución numérica del sistema planteado anteriormente \((1)\).&lt;br /&gt;
&lt;br /&gt;
Así, discretizaremos el espacio en una malla de puntos espaciales \( x_i \) y tiempos \( t_n \). Estos deben cumplir \(x_0 = 0, \ x_N = 1\) de acuerdo con los intervalos de definición de la EDP. Definimos \(\Delta t = t_{n+1} - t_n\) y \(\Delta x = x_{i+1} - x_i\).&lt;br /&gt;
&lt;br /&gt;
Pasamos a discretizar la ecuación según el método de diferencias finitas explícito. De \(u_t = \alpha u_{xx}\), pasamos a &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{u_{i}^{n+1} - u_{i}^{n}}{\Delta t} = \alpha \frac{u_{i+1}^{n} - 2u_{i}^{n} + u_{i-1}^{n}}{\Delta x^2}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Despejando \( u_{i}^{n+1} \), obtenemos la ecuación de actualización&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
u_{i}^{n+1} = u_{i}^{n} + r \left( u_{i+1}^{n} - 2 u_{i}^{n} + u_{i-1}^{n}\right) .&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Definimos el número de Fourier&lt;br /&gt;
\(r = \frac{\alpha \Delta t}{\Delta x^2}&lt;br /&gt;
\), que mide la relación entre la difusión térmica, el paso de tiempo y el desplazamiento. En nuestro caso tenemos \(\alpha = 1\). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Por último, inicializamos el problema para las condiciones de contorno. Definimos \( u_0^n = 1 , u_N^n = 10 \). Y las condiciones iniciales \(u_i^0 = 10, \ \forall i = 1,...,N.\)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Análisis de estabilidad=&lt;br /&gt;
&lt;br /&gt;
Es importante asegurarse de que el método es estable. Aplicamos el análisis de von Neumann, en el que asumimos soluciones de la forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
u_{i}^{n} = G^n e^{ikx_i} ,&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde \( G \) es el factor de amplificación. Reemplazando esta forma en la ecuación de actualización y tras un análisis algebraico, se obtiene:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
G = 1 - 4r \sin^2 \left( \frac{k \Delta x}{2} \right) .&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para que el método sea estable, es necesario que \( |G| \leq 1 \). Como el término \( \sin^2 (\cdot) \) está acotado entre 0 y 1, se deduce la condición de estabilidad:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
1 - 4r \leq 1 \Rightarrow r \leq \frac{1}{2} .&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si \( r &amp;gt; \frac{1}{2} \), entonces \( |G| &amp;gt; 1 \), haciendo que la solución sea inestable.&lt;br /&gt;
&lt;br /&gt;
=Comparación de resultados y análisis de errores=&lt;br /&gt;
&lt;br /&gt;
Vamos a representar las soluciones obtenidas. Comenzamos con la analítica, calculada anteriormente. Representamos la temperatura respecto de la posición, variando el tiempo hasta \(t = 0.5 s\). Podemos representarla para diferentes términos, veamos que utilizando 100 se aproxima suficiente a tomar infinitos términos.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Heat equation analitico 3.gif|600px|thumb|right|Solución analítica 2 términos]]&lt;br /&gt;
[[Archivo:Heat equation analitico 2.gif|600px|thumb|right|Solución analítica 10 términos]]&lt;br /&gt;
[[Archivo:Heat equation analitico.gif|600px|thumb|right|Solución analítica 100 términos]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
% Resolución de la ecuación del calor 1D por diferencias finitas y comparación con solución analítica&lt;br /&gt;
clear all; close all;&lt;br /&gt;
% Parámetros&lt;br /&gt;
L = 1;        % Longitud de la varilla&lt;br /&gt;
Nx = 20;      % Número de puntos en el espacio&lt;br /&gt;
dx = L / (Nx-1);&lt;br /&gt;
alpha = 1; % Difusividad térmica&lt;br /&gt;
dt = 0.0005;  % Paso de tiempo&lt;br /&gt;
Nt = 1000;     % Número de pasos de tiempo&lt;br /&gt;
&lt;br /&gt;
% Discretización espacial&lt;br /&gt;
x = linspace(0, L, Nx);&lt;br /&gt;
&lt;br /&gt;
% Condiciones iniciales&lt;br /&gt;
u = 10 * ones(Nx, 1); &lt;br /&gt;
&lt;br /&gt;
% Condiciones de frontera&lt;br /&gt;
u(1) = 1;   % Extremo izquierdo&lt;br /&gt;
u(end) = 10; % Extremo derecho&lt;br /&gt;
&lt;br /&gt;
% Definimos la solucón estacionaria&lt;br /&gt;
&lt;br /&gt;
estacionaria = @(x)9*x +1;&lt;br /&gt;
&lt;br /&gt;
% Coeficiente del método&lt;br /&gt;
r = alpha * dt / dx^2;&lt;br /&gt;
if r &amp;gt; 0.5&lt;br /&gt;
    error('El método no es estable, reduce dt o aumenta dx.');&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Preparar la grabación de un GIF&lt;br /&gt;
filename = 'heat_equation_analitico.gif';&lt;br /&gt;
frame_delay = 0.1;&lt;br /&gt;
&lt;br /&gt;
% Evolución temporal&lt;br /&gt;
for n = 1:Nt&lt;br /&gt;
    % Solución analítica&lt;br /&gt;
    t = n * dt;&lt;br /&gt;
    w = zeros(size(x));&lt;br /&gt;
    for k = 1:100 % Consideramos los primeros 100 términos&lt;br /&gt;
%         w = w + (18 / (k * pi)) * sin(k * pi * x) * exp(-k^2 * pi^2 * t);&lt;br /&gt;
        w = w + (-(18*(sin(pi*k) - pi*k))/(k^2*pi^2))*sin(k * pi * x) * exp(-k^2 * pi^2 * t);&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Guardar frames en el GIF&lt;br /&gt;
    if mod(n, 10) == 0&lt;br /&gt;
        plot(x, estacionaria(x), 'g-', 'LineWidth', 2);&lt;br /&gt;
        hold on;&lt;br /&gt;
        plot(x, w + 9*x+ 1, 'r--', 'LineWidth', 2); % +1 para respetar la condición de frontera izquierda&lt;br /&gt;
        hold off;&lt;br /&gt;
        xlabel('Posición'); ylabel('Temperatura');&lt;br /&gt;
        title(sprintf('Tiempo: %.3f s', n*dt));&lt;br /&gt;
        legend('Solución estacionaria','Solución Analítica');&lt;br /&gt;
        drawnow;&lt;br /&gt;
        frame = getframe(gcf);&lt;br /&gt;
        img = frame2im(frame);&lt;br /&gt;
        [A, map] = rgb2ind(img, 256);&lt;br /&gt;
        if n == 10&lt;br /&gt;
            imwrite(A, map, filename, 'gif', 'LoopCount', inf, 'DelayTime', frame_delay);&lt;br /&gt;
        else&lt;br /&gt;
            imwrite(A, map, filename, 'gif', 'WriteMode', 'append', 'DelayTime', frame_delay);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Gráfica final&lt;br /&gt;
figure;&lt;br /&gt;
plot(x, estacionaria(x), 'g-', 'LineWidth', 2);&lt;br /&gt;
hold on;&lt;br /&gt;
plot(x, w + 9*x + 1, 'r--', 'LineWidth', 2);&lt;br /&gt;
hold off;&lt;br /&gt;
xlabel('Posición'); ylabel('Temperatura');&lt;br /&gt;
title('Comparación final de temperatura en la varilla');&lt;br /&gt;
legend('Solución estacionaria', 'Solución Analítica');&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Vemos que según aumenta el tiempo, se ajusta a la solución estacionaria.&lt;br /&gt;
&lt;br /&gt;
A continuación, utilizamos también MATLAB para representar la solución numérica análogamente a la analítica. Podemos comparar ambas. Comenzamos con un mallado de 4 puntos en la posición ( \(N = 3 \) ). Para el temporal utilizamos \(1000 \) puntos y \(\Delta t = 0.0005 \), para que no introduzca error.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Heat equation comparacion 2.gif|600px|thumb|right|Comparación solución analítica y numérica para 4 puntos]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
% Resolución de la ecuación del calor 1D por diferencias finitas y comparación con solución analítica&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
L = 1;        % Longitud de la varilla&lt;br /&gt;
Nx = 4;      % Número de puntos en el espacio&lt;br /&gt;
dx = L / (Nx-1);&lt;br /&gt;
alpha = 1; % Difusividad térmica&lt;br /&gt;
dt = 0.0005;  % Paso de tiempo&lt;br /&gt;
Nt = 1000;     % Número de pasos de tiempo&lt;br /&gt;
&lt;br /&gt;
% Discretización espacial&lt;br /&gt;
x = linspace(0, L, Nx); %Discretización para hacer los cálculos con la numérica&lt;br /&gt;
xx = linspace(0,L,50); %Discretización para pintar la analítica&lt;br /&gt;
&lt;br /&gt;
% Condiciones iniciales&lt;br /&gt;
u = 10 * ones(Nx, 1); &lt;br /&gt;
&lt;br /&gt;
% Definimos la solucón estacionaria&lt;br /&gt;
&lt;br /&gt;
estacionaria = @(x)9*x +1;&lt;br /&gt;
&lt;br /&gt;
% Condiciones de frontera&lt;br /&gt;
u(1) = 1;   % Extremo izquierdo&lt;br /&gt;
u(end) = 10; % Extremo derecho&lt;br /&gt;
&lt;br /&gt;
% Coeficiente del método&lt;br /&gt;
r = alpha * dt / dx^2;&lt;br /&gt;
if r &amp;gt; 0.5&lt;br /&gt;
    error('El método no es estable, reduce dt o aumenta dx.');&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Preparar la grabación de un GIF&lt;br /&gt;
filename = 'heat_equation_comparacion_2.gif';&lt;br /&gt;
frame_delay = 0.1;&lt;br /&gt;
&lt;br /&gt;
% Evolución temporal&lt;br /&gt;
for n = 1:Nt&lt;br /&gt;
    u_new = u; % Copia de la solución actual&lt;br /&gt;
    for i = 2:Nx-1&lt;br /&gt;
        u_new(i) = u(i) + r * (u(i+1) - 2*u(i) + u(i-1));&lt;br /&gt;
    end&lt;br /&gt;
    u = u_new;&lt;br /&gt;
    &lt;br /&gt;
    % Solución analítica&lt;br /&gt;
    t = n * dt;&lt;br /&gt;
    w = zeros(size(xx));&lt;br /&gt;
    for k = 1:100 % Consideramos los primeros 100 términos&lt;br /&gt;
        w = w + (18 / (k * pi)) * sin(k * pi * xx) * exp(-k^2 * pi^2 * t);&lt;br /&gt;
%         w = w + (-(18*(sin(pi*k) - pi*k))/(k^2*pi^2))*sin(k * pi * x) * exp(-k^2 * pi^2 * t);&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Guardar frames en el GIF&lt;br /&gt;
    if mod(n, 10) == 0&lt;br /&gt;
        plot(x, u, 'b-', 'LineWidth', 2);&lt;br /&gt;
        hold on;&lt;br /&gt;
        plot(xx, w + 9*xx + 1, 'r--', 'LineWidth', 2); % +1 para respetar la condición de frontera izquierda&lt;br /&gt;
        plot(xx, estacionaria(xx), 'g-', 'LineWidth', 2); % Solución estacionaria&lt;br /&gt;
        hold off;&lt;br /&gt;
        xlabel('Posición'); ylabel('Temperatura');&lt;br /&gt;
        title(sprintf('Tiempo: %.3f s', n*dt));&lt;br /&gt;
        legend('Diferencias Finitas', 'Solución Analítica', 'Solución estacionaria');&lt;br /&gt;
        drawnow;&lt;br /&gt;
        frame = getframe(gcf);&lt;br /&gt;
        img = frame2im(frame);&lt;br /&gt;
        [A, map] = rgb2ind(img, 256);&lt;br /&gt;
        if n == 10&lt;br /&gt;
            imwrite(A, map, filename, 'gif', 'LoopCount', inf, 'DelayTime', frame_delay);&lt;br /&gt;
        else&lt;br /&gt;
            imwrite(A, map, filename, 'gif', 'WriteMode', 'append', 'DelayTime', frame_delay);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Gráfica final&lt;br /&gt;
figure;&lt;br /&gt;
plot(x, u, 'b-', 'LineWidth', 2);&lt;br /&gt;
hold on;&lt;br /&gt;
plot(xx, w + 9*xx+ 1, 'r--', 'LineWidth', 2);&lt;br /&gt;
plot(xx, estacionaria(xx), 'g-', 'LineWidth', 2);&lt;br /&gt;
hold off;&lt;br /&gt;
xlabel('Posición'); ylabel('Temperatura');&lt;br /&gt;
title('Comparación final de temperatura en la varilla');&lt;br /&gt;
legend('Diferencias Finitas', 'Solución Analítica', 'Solución estacionaria');&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Observamos que aproxima mejor según se acerque a la estacionaria. Representamos los errores utilizando \( ||\cdot||_\infty \).&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Errores Nx4.png|600px|thumb|right|Error absoluto]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
% Resolución de la ecuación del calor 1D por diferencias finitas y comparación con solución analítica&lt;br /&gt;
clear all; close all&lt;br /&gt;
% Parámetros&lt;br /&gt;
L = 1;        % Longitud de la varilla&lt;br /&gt;
Nx = 4;      % Número de puntos en el espacio&lt;br /&gt;
dx = L / (Nx-1);&lt;br /&gt;
alpha = 1; % Difusividad térmica&lt;br /&gt;
dt = 0.0005;  % Paso de tiempo&lt;br /&gt;
Nt = 1000;     % Número de pasos de tiempo&lt;br /&gt;
err = zeros(length(Nt));&lt;br /&gt;
&lt;br /&gt;
% Discretización espacial&lt;br /&gt;
x = linspace(0, L, Nx); % Discretización para la numérica&lt;br /&gt;
xx = linspace(0, L, Nx); % Usamos la misma malla para comparación&lt;br /&gt;
tt = linspace(0,Nt*dt,Nt);&lt;br /&gt;
&lt;br /&gt;
% Condiciones iniciales&lt;br /&gt;
u = 10 * ones(Nx, 1); &lt;br /&gt;
&lt;br /&gt;
% Definimos la solución estacionaria&lt;br /&gt;
estacionaria = @(x) 9*x + 1;&lt;br /&gt;
&lt;br /&gt;
% Condiciones de frontera&lt;br /&gt;
u(1) = 1;   % Extremo izquierdo&lt;br /&gt;
u(end) = 10; % Extremo derecho&lt;br /&gt;
&lt;br /&gt;
% Coeficiente del método&lt;br /&gt;
r = alpha * dt / dx^2;&lt;br /&gt;
if r &amp;gt; 0.5&lt;br /&gt;
    error('El método no es estable, reduce dt o aumenta dx.');&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Evolución temporal&lt;br /&gt;
for n = 1:Nt&lt;br /&gt;
    u_new = u;&lt;br /&gt;
    for i = 2:Nx-1&lt;br /&gt;
        u_new(i) = u(i) + r * (u(i+1) - 2*u(i) + u(i-1));&lt;br /&gt;
    end&lt;br /&gt;
    u = u_new;&lt;br /&gt;
    w = zeros(size(xx));&lt;br /&gt;
    t = n * dt;&lt;br /&gt;
    for k = 1:100 % 100 términos en la serie&lt;br /&gt;
        w = w + (18 / (k * pi)) * sin(k * pi * xx) * exp(-k^2 * pi^2 * t);&lt;br /&gt;
    end&lt;br /&gt;
    sol_analitica = w + 9*xx + 1;&lt;br /&gt;
    err(n) = max(abs(sol_analitica-u'));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo de la solución analítica en el último tiempo&lt;br /&gt;
w = zeros(size(xx));&lt;br /&gt;
t = Nt * dt;&lt;br /&gt;
for k = 1:100 % 100 términos en la serie&lt;br /&gt;
    w = w + (18 / (k * pi)) * sin(k * pi * xx) * exp(-k^2 * pi^2 * t);&lt;br /&gt;
end&lt;br /&gt;
sol_analitica = w + 9*xx + 1;&lt;br /&gt;
&lt;br /&gt;
% Cálculo del error&lt;br /&gt;
error_abs = abs(u - sol_analitica');&lt;br /&gt;
error_rel = error_abs ./ abs(sol_analitica');&lt;br /&gt;
&lt;br /&gt;
% Gráficas&lt;br /&gt;
figure;&lt;br /&gt;
% subplot(2,1,1);&lt;br /&gt;
% plot(x, u, 'b-', 'LineWidth', 2);&lt;br /&gt;
% hold on;&lt;br /&gt;
% plot(xx, sol_analitica, 'r--', 'LineWidth', 2);&lt;br /&gt;
% plot(xx, estacionaria(xx), 'g-', 'LineWidth', 2);&lt;br /&gt;
% hold off;&lt;br /&gt;
% xlabel('Posición'); ylabel('Temperatura');&lt;br /&gt;
% title('Comparación final de temperatura en la varilla');&lt;br /&gt;
% legend('Diferencias Finitas', 'Solución Analítica', 'Solución estacionaria');&lt;br /&gt;
% &lt;br /&gt;
% % Gráfica del error&lt;br /&gt;
% subplot(2,1,2);&lt;br /&gt;
plot(tt, err, 'bl-', 'LineWidth', 2);&lt;br /&gt;
xlabel('Posición'); ylabel('Error absoluto');&lt;br /&gt;
plot(tt, log10(err), 'bl-', 'LineWidth', 2);&lt;br /&gt;
xlabel('Posición'); ylabel('Error absoluto logaritmico');&lt;br /&gt;
&lt;br /&gt;
title(sprintf('Error absoluto entre solución numérica y analítica para N=%d', Nx-1));&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Por último, mejoramos la malla espacial hasta \(N = 19 \) (20 puntos).&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Heat equation comparacion1.gif|600px|thumb|right|Comparación solución analítica y numérica para 20 puntos]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
% Resolución de la ecuación del calor 1D por diferencias finitas y comparación con solución analítica&lt;br /&gt;
&lt;br /&gt;
% Parámetros&lt;br /&gt;
L = 1;        % Longitud de la varilla&lt;br /&gt;
Nx = 20;      % Número de puntos en el espacio&lt;br /&gt;
dx = L / (Nx-1);&lt;br /&gt;
alpha = 1; % Difusividad térmica&lt;br /&gt;
dt = 0.0005;  % Paso de tiempo&lt;br /&gt;
Nt = 1000;     % Número de pasos de tiempo&lt;br /&gt;
&lt;br /&gt;
% Discretización espacial&lt;br /&gt;
x = linspace(0, L, Nx); %Discretización para hacer los cálculos con la numérica&lt;br /&gt;
xx = linspace(0,L,50); %Discretización para pintar la analítica&lt;br /&gt;
&lt;br /&gt;
% Condiciones iniciales&lt;br /&gt;
u = 10 * ones(Nx, 1); &lt;br /&gt;
&lt;br /&gt;
% Definimos la solucón estacionaria&lt;br /&gt;
&lt;br /&gt;
estacionaria = @(x)9*x +1;&lt;br /&gt;
&lt;br /&gt;
% Condiciones de frontera&lt;br /&gt;
u(1) = 1;   % Extremo izquierdo&lt;br /&gt;
u(end) = 10; % Extremo derecho&lt;br /&gt;
&lt;br /&gt;
% Coeficiente del método&lt;br /&gt;
r = alpha * dt / dx^2;&lt;br /&gt;
if r &amp;gt; 0.5&lt;br /&gt;
    error('El método no es estable, reduce dt o aumenta dx.');&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Preparar la grabación de un GIF&lt;br /&gt;
filename = 'heat_equation_comparacion1.gif';&lt;br /&gt;
frame_delay = 0.1;&lt;br /&gt;
&lt;br /&gt;
% Evolución temporal&lt;br /&gt;
for n = 1:Nt&lt;br /&gt;
    u_new = u; % Copia de la solución actual&lt;br /&gt;
    for i = 2:Nx-1&lt;br /&gt;
        u_new(i) = u(i) + r * (u(i+1) - 2*u(i) + u(i-1));&lt;br /&gt;
    end&lt;br /&gt;
    u = u_new;&lt;br /&gt;
    &lt;br /&gt;
    % Solución analítica&lt;br /&gt;
    t = n * dt;&lt;br /&gt;
    w = zeros(size(xx));&lt;br /&gt;
    for k = 1:100 % Consideramos los primeros 100 términos&lt;br /&gt;
        w = w + (18 / (k * pi)) * sin(k * pi * xx) * exp(-k^2 * pi^2 * t);&lt;br /&gt;
%         w = w + (-(18*(sin(pi*k) - pi*k))/(k^2*pi^2))*sin(k * pi * x) * exp(-k^2 * pi^2 * t);&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    % Guardar frames en el GIF&lt;br /&gt;
    if mod(n, 10) == 0&lt;br /&gt;
        plot(x, u, 'b-', 'LineWidth', 2);&lt;br /&gt;
        hold on;&lt;br /&gt;
        plot(xx, w + 9*xx + 1, 'r--', 'LineWidth', 2); % +1 para respetar la condición de frontera izquierda&lt;br /&gt;
        plot(xx, estacionaria(xx), 'g-', 'LineWidth', 2); % Solución estacionaria&lt;br /&gt;
        hold off;&lt;br /&gt;
        xlabel('Posición'); ylabel('Temperatura');&lt;br /&gt;
        title(sprintf('Tiempo: %.3f s', n*dt));&lt;br /&gt;
        legend('Diferencias Finitas', 'Solución Analítica', 'Solución estacionaria');&lt;br /&gt;
        drawnow;&lt;br /&gt;
        frame = getframe(gcf);&lt;br /&gt;
        img = frame2im(frame);&lt;br /&gt;
        [A, map] = rgb2ind(img, 256);&lt;br /&gt;
        if n == 10&lt;br /&gt;
            imwrite(A, map, filename, 'gif', 'LoopCount', inf, 'DelayTime', frame_delay);&lt;br /&gt;
        else&lt;br /&gt;
            imwrite(A, map, filename, 'gif', 'WriteMode', 'append', 'DelayTime', frame_delay);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Gráfica final&lt;br /&gt;
figure;&lt;br /&gt;
plot(x, u, 'b-', 'LineWidth', 2);&lt;br /&gt;
hold on;&lt;br /&gt;
plot(xx, w + 9*xx+ 1, 'r--', 'LineWidth', 2);&lt;br /&gt;
plot(xx, estacionaria(xx), 'g-', 'LineWidth', 2);&lt;br /&gt;
hold off;&lt;br /&gt;
xlabel('Posición'); ylabel('Temperatura');&lt;br /&gt;
title('Comparación final de temperatura en la varilla');&lt;br /&gt;
legend('Diferencias Finitas', 'Solución Analítica', 'Solución estacionaria');&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Se puede ver que ajusta en gran medida a la solución analítica. Observamos los errores, que en este caso precisan de una transformación logarítmica debido a la escala. Mantenemos la escala original en una imagen para comparar con el anterior.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Errores Nx20.png|600px|thumb|right|Error absoluto]]&lt;br /&gt;
[[Archivo:Error Nx20 log.png|600px|thumb|right|Error absoluto logarítmico]]&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
% Resolución de la ecuación del calor 1D por diferencias finitas y comparación con solución analítica&lt;br /&gt;
clear all; close all&lt;br /&gt;
% Parámetros&lt;br /&gt;
L = 1;        % Longitud de la varilla&lt;br /&gt;
Nx = 20;      % Número de puntos en el espacio&lt;br /&gt;
dx = L / (Nx-1);&lt;br /&gt;
alpha = 1; % Difusividad térmica&lt;br /&gt;
dt = 0.0005;  % Paso de tiempo&lt;br /&gt;
Nt = 1000;     % Número de pasos de tiempo&lt;br /&gt;
err = zeros(length(Nt));&lt;br /&gt;
&lt;br /&gt;
% Discretización espacial&lt;br /&gt;
x = linspace(0, L, Nx); % Discretización para la numérica&lt;br /&gt;
xx = linspace(0, L, Nx); % Usamos la misma malla para comparación&lt;br /&gt;
tt = linspace(0,Nt*dt,Nt);&lt;br /&gt;
&lt;br /&gt;
% Condiciones iniciales&lt;br /&gt;
u = 10 * ones(Nx, 1); &lt;br /&gt;
&lt;br /&gt;
% Definimos la solución estacionaria&lt;br /&gt;
estacionaria = @(x) 9*x + 1;&lt;br /&gt;
&lt;br /&gt;
% Condiciones de frontera&lt;br /&gt;
u(1) = 1;   % Extremo izquierdo&lt;br /&gt;
u(end) = 10; % Extremo derecho&lt;br /&gt;
&lt;br /&gt;
% Coeficiente del método&lt;br /&gt;
r = alpha * dt / dx^2;&lt;br /&gt;
if r &amp;gt; 0.5&lt;br /&gt;
    error('El método no es estable, reduce dt o aumenta dx.');&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Evolución temporal&lt;br /&gt;
for n = 1:Nt&lt;br /&gt;
    u_new = u;&lt;br /&gt;
    for i = 2:Nx-1&lt;br /&gt;
        u_new(i) = u(i) + r * (u(i+1) - 2*u(i) + u(i-1));&lt;br /&gt;
    end&lt;br /&gt;
    u = u_new;&lt;br /&gt;
    w = zeros(size(xx));&lt;br /&gt;
    t = n * dt;&lt;br /&gt;
    for k = 1:100 % 100 términos en la serie&lt;br /&gt;
        w = w + (18 / (k * pi)) * sin(k * pi * xx) * exp(-k^2 * pi^2 * t);&lt;br /&gt;
    end&lt;br /&gt;
    sol_analitica = w + 9*xx + 1;&lt;br /&gt;
    err(n) = max(abs(sol_analitica-u'));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Cálculo de la solución analítica en el último tiempo&lt;br /&gt;
w = zeros(size(xx));&lt;br /&gt;
t = Nt * dt;&lt;br /&gt;
for k = 1:100 % 100 términos en la serie&lt;br /&gt;
    w = w + (18 / (k * pi)) * sin(k * pi * xx) * exp(-k^2 * pi^2 * t);&lt;br /&gt;
end&lt;br /&gt;
sol_analitica = w + 9*xx + 1;&lt;br /&gt;
&lt;br /&gt;
% Cálculo del error&lt;br /&gt;
error_abs = abs(u - sol_analitica');&lt;br /&gt;
error_rel = error_abs ./ abs(sol_analitica');&lt;br /&gt;
&lt;br /&gt;
% Gráficas&lt;br /&gt;
figure;&lt;br /&gt;
% subplot(2,1,1);&lt;br /&gt;
% plot(x, u, 'b-', 'LineWidth', 2);&lt;br /&gt;
% hold on;&lt;br /&gt;
% plot(xx, sol_analitica, 'r--', 'LineWidth', 2);&lt;br /&gt;
% plot(xx, estacionaria(xx), 'g-', 'LineWidth', 2);&lt;br /&gt;
% hold off;&lt;br /&gt;
% xlabel('Posición'); ylabel('Temperatura');&lt;br /&gt;
% title('Comparación final de temperatura en la varilla');&lt;br /&gt;
% legend('Diferencias Finitas', 'Solución Analítica', 'Solución estacionaria');&lt;br /&gt;
% &lt;br /&gt;
% % Gráfica del error&lt;br /&gt;
% subplot(2,1,2);&lt;br /&gt;
plot(tt, err, 'bl-', 'LineWidth', 2);&lt;br /&gt;
xlabel('Posición'); ylabel('Error absoluto');&lt;br /&gt;
plot(tt, log10(err), 'bl-', 'LineWidth', 2);&lt;br /&gt;
xlabel('Posición'); ylabel('Error absoluto logaritmico');&lt;br /&gt;
&lt;br /&gt;
title(sprintf('Error absoluto entre solución numérica y analítica para N=%d', Nx-1));&lt;br /&gt;
grid on;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP24/25]]&lt;/div&gt;</summary>
		<author><name>Violetalb</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Series_de_Fourier_(Grupo_ACIRV)&amp;diff=84154</id>
		<title>Series de Fourier (Grupo ACIRV)</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Series_de_Fourier_(Grupo_ACIRV)&amp;diff=84154"/>
				<updated>2025-02-15T12:59:13Z</updated>
		
		<summary type="html">&lt;p&gt;Violetalb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Series de Fourier (Grupo ACIRV). | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP24/25|2024-25]] | Ángela Sotelo Fernández, Carmen Doñoro Molina, Inés Torres Gómez, Rubén Gutiérrez Hernández, Violeta Luján Barrios.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Las series de Fourier constituyen una herramienta fundamental en el análisis matemático. Estas series, introducidas por Joseph Fourier en el siglo XIX, nos permiten representar funciones periódicas mediante una base de funciones trigonométricas.&lt;br /&gt;
&lt;br /&gt;
La idea es que cualquier función \( f(x) \) periódica con \( f\in L^2(-\pi,\pi) \) puede expresarse como:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f(x) = d_0 + \sum_{n=1}^{\infty} \left[ d_n \cos\left(\frac{2\pi n x}{T}\right) + c_n \sin\left(\frac{2\pi n x}{T}\right) \right] &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde los coeficientes \( d_n \) y \( c_n \) se obtienen mediante integrales que dependen de la función dada.&lt;br /&gt;
&lt;br /&gt;
=Base trigonométrica compleja=&lt;br /&gt;
La &amp;lt;b&amp;gt;base trigonométrica&amp;lt;/b&amp;gt; es una base del espacio &amp;lt;math&amp;gt;L^2([-\pi,\pi])&amp;lt;/math&amp;gt;, por lo que las funciones pertenecientes a este espacio pueden escribirse como una combinación lineal de los elementos de la base. A estas expresiones se les llama &amp;lt;b&amp;gt;series de Fourier&amp;lt;/b&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
Dado que es una base ortonormal, sus coeficientes pueden calcularse mediante integración, obteniendo las siguientes fórmulas:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;d_0 = \int_{-\pi}^{\pi} f(x) \frac{1}{2} \, dx , \hspace{30px} d_n = \int_{-\pi}^{\pi} f(x) \cos(n\pi x) \, dx , \hspace{30px} c_n = \int_{-\pi}^{\pi} f(x) \sin(n\pi x) \, dx . &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Utilizando el siguiente código en MATLAB, se pueden representar los 10 primeros elementos de la base en una gráfica:&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo= &lt;br /&gt;
% Definimos la malla para pintar funciones del [-1,1]&lt;br /&gt;
x = linspace(-1, 1, 1000);  &lt;br /&gt;
n_max = 5;                  % Número de funciones a pintar para seno y coseno&lt;br /&gt;
&lt;br /&gt;
% Pintamos la gráfica de f = 1/2&lt;br /&gt;
figure;&lt;br /&gt;
plot(x, 1/2 * ones(size(x)), 'k', 'LineWidth', 1, 'DisplayName', '1/2');&lt;br /&gt;
hold on;&lt;br /&gt;
&lt;br /&gt;
% Pintamos cos(n*pi*x) y sin(n*pi*x) para n = 1 hasta n_max&lt;br /&gt;
for n = 1:n_max&lt;br /&gt;
    % Definimos las funciones&lt;br /&gt;
    f_cos = cos(n * pi * x);&lt;br /&gt;
    f_sin = sin(n * pi * x);&lt;br /&gt;
    &lt;br /&gt;
    plot(x, f_cos, 'LineWidth', 1, 'DisplayName', sprintf('cos(%d\\pi x)', n));&lt;br /&gt;
    &lt;br /&gt;
    plot(x, f_sin,'--', 'LineWidth', 1, 'DisplayName', sprintf('sin(%d\\pi x)', n));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Ponemos leyenda en la gráfica&lt;br /&gt;
title(sprintf('Base \\{1/2, cos(n\\pi x), sin(n\\pi x)\\} para n = 1 ... %d', n_max));&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('Valor de la función');&lt;br /&gt;
legend('show', 'Location', 'BestOutside'); &lt;br /&gt;
grid on;&lt;br /&gt;
axis([-1 1 -1.5 1.5]);&lt;br /&gt;
&lt;br /&gt;
hold off;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center; margin-top: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;display: inline-block; margin-right: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
    [[Archivo:EJ1_SENO_ACIRV.png|400px|none|Seno]]&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
    [[Archivo:EJ1_COSENO_ACIRV.png|400px|none|Coseno]]&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
    [[Archivo:EJ1_1_2_ACIRV.jpeg|400px|none|Coseno]]&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Aproximación de una función continua=&lt;br /&gt;
Vamos a aproximar la función \( f(x) = 1 - 2 \left| \frac{1}{2} - x \right| \). &lt;br /&gt;
&lt;br /&gt;
En primer lugar, extendemos de forma impar la función al intervalo simétrico \([-1,1]\). Obtenemos entonces \( f_{\text{ext}}(x) = \operatorname{sign}(x) \cdot \left(1 - 2 \left| \frac{1}{2} - |x| \right| \right).  \) Es decir,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
f_{\text{ext}}(x) =&lt;br /&gt;
\begin{cases} &lt;br /&gt;
-(1 - 2 | \frac{1}{2} - |x| |), &amp;amp; \text{si } x \in [-1,0) \\ &lt;br /&gt;
1 - 2 \left| \frac{1}{2} - x \right|, &amp;amp; \text{si } x \in [0,1].&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora debemos comprobar que la función es continua. En el dominio \( [-1,0) \cup (0,1] \), es continua por estar definida como una función continua.  &lt;br /&gt;
Falta por ver que es continua en \( x = 0 \): \( f_{\text{ext}}(0) = 0. \)&lt;br /&gt;
&lt;br /&gt;
Calculamos los límites laterales: &amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \lim_{x \to 0^-} f_{\text{ext}}(x) = -1 + 1 = 0, \hspace{30px} \lim_{x \to 0^+} f_{\text{ext}}(x) = 1 - 1 = 0. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dado que los límites laterales coinciden con \( f_{\text{ext}}(0) \), concluimos que la función es continua en todos los puntos.  &lt;br /&gt;
&lt;br /&gt;
Ahora para la representación, con las fórmulas que hemos calculado arriba, calculamos los coeficientes de Fourier:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; d_0 = \int_{-1}^{1} f_{\text{ext}}(x) \frac{1}{2} \, dx , \hspace{30px} d_n = \int_{-1}^{1} f_{\text{ext}}(x) \cos(n\pi x) \, dx , \hspace{30px} c_n = \int_{-1}^{1} f_{\text{ext}}(x) \sin(n\pi x) \, dx . &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Como los coeficientes \( d_0 \) y \( d_n \) son integrales de una función impar sobre un intervalo simétrico, sabemos que se anulan. Por tanto, la función nos va a quedar como una combinación lineal de los coeficientes \( c_n \), es decir:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f_{\text{ext}}(x) \approx \sum_{n=1}^{\infty} c_n \sin(n\pi x). &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Definimos \( f_n(x) \) como la suma de los primeros \( n \) términos de la serie de Fourier:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f_{\text{ext}}(x) = \sum_{n=1}^{n} b_n \sin(n\pi x), \hspace{2mm} \text{con} \hspace{2mm} b_k = 2\int_{0}^{1} f(x)\sin{(k\pi x)} \,dx . &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A continuación, representamos gráficamente \( f(x) \) y \( f_n(x) \) para \( n=1,5,10 \).  &lt;br /&gt;
Nótese que aumentar el número de términos de la serie de Fourier permite aproximar mejor la función original. &lt;br /&gt;
Los coeficientes de Fourier se obtienen numéricamente resolviendo las integrales usando la fórmula del trapecio con una división bastante fina \( (10^{-3}) \) con la función \( trapz \) que proporciona MatLab.  &lt;br /&gt;
&lt;br /&gt;
[[Archivo:Untitled.png|450px|thumb|right]]&lt;br /&gt;
{{matlab|codigo= &lt;br /&gt;
%Escribimos la función original definida en el intervalo [0,1]:&lt;br /&gt;
f=@(x)1-2*abs(1/2-x);&lt;br /&gt;
%Modificamos la función para que sea impar en el intervalo [-1,1]&lt;br /&gt;
f_ext=@(x)sign(x).*(1-2*abs(1/2-abs(x)));&lt;br /&gt;
&lt;br /&gt;
%Graficamos la función estendida de forma impar&lt;br /&gt;
hold on&lt;br /&gt;
xx=linspace(-1,1,10000);&lt;br /&gt;
plot(xx,f_ext(xx))&lt;br /&gt;
%Modificamos los colores de las gráficas para que se vean mejor&lt;br /&gt;
newcolors = [0.83 0.14 0.14&lt;br /&gt;
             1.00 0.54 0.00&lt;br /&gt;
             0.47 0.25 0.80&lt;br /&gt;
             0.25 0.80 0.54];         &lt;br /&gt;
colororder(newcolors)&lt;br /&gt;
&lt;br /&gt;
%Ahora, vamos a calcular los coeficientes de la serie de Fourier empleando la fórmula del trapecio. &lt;br /&gt;
n=[1 5 10];&lt;br /&gt;
N=1000;                       %Número de puntos&lt;br /&gt;
a=0; b=1;                     %Extremos de los intervalos&lt;br /&gt;
h=(b-a)/N;                    %Tamaño de los intervalos&lt;br /&gt;
u=a:h:b;                      %Puntos de la partición&lt;br /&gt;
for i=1:length(n) &lt;br /&gt;
    SF=0&lt;br /&gt;
    for k=1:n(i)&lt;br /&gt;
        c_n=zeros(1,n(i));&lt;br /&gt;
        c=(2.*f(u).*sin(k.*pi.*u))';  %Función a integrar&lt;br /&gt;
        w=ones(N+1,1);                %Vector de pesos &lt;br /&gt;
        w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
        c_n(k)=h*w'*c;                %Coeficientes de la serie de Fourier&lt;br /&gt;
        SF=SF+c_n(k)*sin(k*pi*xx);    %Vamos calculando la propia serie&lt;br /&gt;
    end&lt;br /&gt;
    plot(xx,SF)                      %Graficamos la serie de Fourier para un n determinado&lt;br /&gt;
end&lt;br /&gt;
hold off&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Para hacer un estudio completo de las aproximaciones, vamos a representar el error de \( f_n(x) \) respecto a \( f(x) \) en función de \( n \).  &lt;br /&gt;
Para calcular este error, vamos a emplear tanto la norma \( L^2 \) como la del supremo o uniforme.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:24_25_grupoACIRV_erroresej1.png|450px|thumb|right]]&lt;br /&gt;
{{matlab|codigo= &lt;br /&gt;
a=0; b=1;                    &lt;br /&gt;
u_1=a:10^(-3):b; &lt;br /&gt;
N=length(u_1)-1;&lt;br /&gt;
h=(b-a)/N;&lt;br /&gt;
&lt;br /&gt;
%Definir la función f(x)&lt;br /&gt;
f = @(x) 1 - 2*abs(1/2 - x);&lt;br /&gt;
&lt;br /&gt;
% Pesos para la integración con la regla del trapecio&lt;br /&gt;
w=ones(N+1,1);              &lt;br /&gt;
w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
&lt;br /&gt;
% Inicialización de los errores&lt;br /&gt;
error1 = zeros(1,300);&lt;br /&gt;
error2 = zeros(1,300);&lt;br /&gt;
&lt;br /&gt;
for n=1:300&lt;br /&gt;
    f_n=zeros(1,N+1); % Aproximación con n términos&lt;br /&gt;
    for k=1:n&lt;br /&gt;
        g=(f(u_1).*sin(k*pi*u_1))'; &lt;br /&gt;
        a_k=2*h*w'*g; % Coeficiente de Fourier&lt;br /&gt;
        f_n=f_n+a_k*sin(k*pi*u_1); % Suma de términos&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Cálculo de errores&lt;br /&gt;
    g1=abs(f(u_1)-f_n).^2;&lt;br /&gt;
    error1(n)=(h*w'*g1')^(1/2); % Norma L^2&lt;br /&gt;
    error2(n)=max(abs(f(u_1)-f_n)); % Norma suprema&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Graficar errores con escala logarítmica en el eje y&lt;br /&gt;
nn=1:300;&lt;br /&gt;
hold on&lt;br /&gt;
plot(nn,error1,'b',LineWidth=1.5)&lt;br /&gt;
plot(nn,error2,'r',LineWidth=1.5)&lt;br /&gt;
xlabel('Valor de n')&lt;br /&gt;
ylabel('Error en escala logarítmica')&lt;br /&gt;
title('Errores en las normas L^2 y uniforme')&lt;br /&gt;
legend('Error en la norma $L^2$', 'Error en la norma uniforme')&lt;br /&gt;
grid on&lt;br /&gt;
set(gca, 'YScale', 'log') % Escala logarítmica en el eje y&lt;br /&gt;
ylim([1e-6 1]) % Límites del eje y&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Aproximación de una función discontinua=&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a aproximar la función \( f(x) = 1_{x \leq 1/4}(x) \).&lt;br /&gt;
&lt;br /&gt;
A diferencia del caso anterior, extendemos la función de forma par al intervalo \([-1,1]\), obteniendo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f_{\text{ext}}(x) = \begin{cases} 1, &amp;amp; \text{si } x \in [-\frac{1}{4}, \frac{1}{4}] \\ 0, &amp;amp; \text{si } x \in [-1,-\frac{1}{4}) \cup (\frac{1}{4},1]. \end{cases} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observamos que la función posee dos discontinuidades, en \( x = -\frac{1}{4} \) y \( x = \frac{1}{4} \). Sin embargo, por la condición de Dirichlet, puesto que el número de discontinuidades es finito y la función es monótona a trozos, podemos hacer su transformada de Fourier.&lt;br /&gt;
&lt;br /&gt;
Como en este caso la función es par, su serie de Fourier es una combinación lineal de \( \{\frac{1}{2}, cos(n\pi x)\}_{n\in\mathbf{N}} \). Los coeficientes \( c_n \) se anulan al ser la integral de una función impar sobre un intervalo simétrico:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f_{\text{ext}}(x) \approx d_0 +\sum^{\infty}_{n=1} d_ncos(n\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Al representar \( f(x) \) y \( f_{n}(x) \) para \( n=\{1,...,10 \}\), observamos que aparecen unas oscilaciones llamadas el fenómeno de Gibbs.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:24 25 grupoACIRV fourierej3.png|450px|thumb|right]]&lt;br /&gt;
{{matlab|codigo= &lt;br /&gt;
clear all&lt;br /&gt;
close all&lt;br /&gt;
F=@(x) 1.*(x&amp;lt;=1/4);&lt;br /&gt;
g=@(x) F(-x);&lt;br /&gt;
xx=linspace(-1,1,10000);&lt;br /&gt;
fplot(F,[0 1],'b','linewidth',1.5)&lt;br /&gt;
hold on&lt;br /&gt;
fplot(g,[-1 0],'b','linewidth',1.5)&lt;br /&gt;
%Modificamos los colores de las gráficas para que se vean mejor&lt;br /&gt;
newcolors = [0.83 0.14 0.14&lt;br /&gt;
             1.00 0.54 0.00&lt;br /&gt;
             0.47 0.25 0.80&lt;br /&gt;
             0.25 0.80 0.54];         &lt;br /&gt;
colororder(newcolors)&lt;br /&gt;
&lt;br /&gt;
%Ahora, vamos a calcular los coeficientes de la serie de Fourier empleando la fórmula del trapecio. &lt;br /&gt;
n=1:1:10;&lt;br /&gt;
N=1000;                       %Número de puntos&lt;br /&gt;
a=0; b=1;                     %Extremos de los intervalos&lt;br /&gt;
h=(b-a)/N;                    %Tamaño de los intervalos&lt;br /&gt;
u=a:h:b;                      %Puntos de la partición&lt;br /&gt;
w=ones(N+1,1);                %Vector de pesos &lt;br /&gt;
w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
d_0=0; d0=(2.*F(u).*(1/2))';&lt;br /&gt;
d_0=h*w'*d0;&lt;br /&gt;
SF=zeros(length(n),length(xx))+ones(length(n),length(xx))*d_0;&lt;br /&gt;
for i=1:length(n) &lt;br /&gt;
    for k=1:n(i)&lt;br /&gt;
        d_n=zeros(1,n(i));&lt;br /&gt;
        c=(2.*F(u).*cos(k.*pi.*u))';  %Función a integrar&lt;br /&gt;
        d_n(k)=h*w'*c;                %Coeficientes de la serie de Fourier&lt;br /&gt;
        SF(i,:)=SF(i,:)+d_n(k)*cos(k*pi*xx); %Vamos calculando la serie para cada n y la guardamos en la fila n de SF&lt;br /&gt;
    end&lt;br /&gt;
    plot(xx,SF(i,:))                  %Graficamos la serie de Fourier para un n determinado&lt;br /&gt;
end&lt;br /&gt;
hold off&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Para suavizar dichas oscilaciones utilizamos las sumas de Cesàro:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; S_N = \frac{1}{n+1} \sum^{N}_{n=0}f_n(x). &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos representarlas gráficamente para un n dado:&lt;br /&gt;
[[Archivo:24 25 grupoACIRV cesaroej3.png|450px|thumb|right]]&lt;br /&gt;
{{matlab|codigo= &lt;br /&gt;
clear all&lt;br /&gt;
close all&lt;br /&gt;
F=@(x) 1.*(x&amp;lt;=1/4);&lt;br /&gt;
g=@(x) F(-x);&lt;br /&gt;
xx=linspace(-1,1,10000);&lt;br /&gt;
fplot(F,[0 1],'b','linewidth',1.5)&lt;br /&gt;
hold on&lt;br /&gt;
fplot(g,[-1 0],'b','linewidth',1.5)&lt;br /&gt;
%Modificamos los colores de las gráficas para que se vean mejor&lt;br /&gt;
newcolors = [0.83 0.14 0.14&lt;br /&gt;
             1.00 0.54 0.00&lt;br /&gt;
             0.47 0.25 0.80&lt;br /&gt;
             0.25 0.80 0.54];         &lt;br /&gt;
colororder(newcolors)&lt;br /&gt;
&lt;br /&gt;
%Ahora, vamos a calcular los coeficientes de la serie de Fourier empleando la fórmula del trapecio. &lt;br /&gt;
n=1:1:100;&lt;br /&gt;
N=1000;                       %Número de puntos&lt;br /&gt;
a=0; b=1;                     %Extremos de los intervalos&lt;br /&gt;
h=(b-a)/N;                    %Tamaño de los intervalos&lt;br /&gt;
u=a:h:b;                      %Puntos de la partición&lt;br /&gt;
w=ones(N+1,1);                %Vector de pesos &lt;br /&gt;
w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
d_0=0; d0=(2.*F(u).*(1/2))';&lt;br /&gt;
d_0=h*w'*d0;&lt;br /&gt;
SF=zeros(length(n),length(xx))+ones(length(n),length(xx))*d_0;&lt;br /&gt;
for i=1:length(n) &lt;br /&gt;
    for k=1:n(i)&lt;br /&gt;
        d_n=zeros(1,n(i));&lt;br /&gt;
        c=(2.*F(u).*cos(k.*pi.*u))';  %Función a integrar&lt;br /&gt;
        d_n(k)=h*w'*c;                %Coeficientes de la serie de Fourier&lt;br /&gt;
        SF(i,:)=SF(i,:)+d_n(k)*cos(k*pi*xx); %Vamos calculando la serie para cada n y la guardamos en la fila n de SF&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
SNs=zeros(1,length(xx));              %Calculamos las sumas de Cesàro&lt;br /&gt;
for i=1:length(n)&lt;br /&gt;
    SNs=SNs+SF(i,:);&lt;br /&gt;
end&lt;br /&gt;
SN=1/(length(n)+1)*SNs;&lt;br /&gt;
plot(xx,SN)                           %Graficamos la aproximación obtenida.&lt;br /&gt;
hold off&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falta comparar el error de ambas aproximaciones.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
a=0; b=1;                    &lt;br /&gt;
u_1=a:10^(-3):b; &lt;br /&gt;
N=length(u_1)-1;&lt;br /&gt;
h=(b-a)/N;&lt;br /&gt;
&lt;br /&gt;
% Definir la función f(x)&lt;br /&gt;
f = @(x) 1.*(x&amp;lt;=1/4);&lt;br /&gt;
&lt;br /&gt;
% Pesos para la integración con la regla del trapecio&lt;br /&gt;
w=ones(N+1,1);              &lt;br /&gt;
w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
&lt;br /&gt;
% Inicialización de los errores&lt;br /&gt;
error1 = zeros(1,300);&lt;br /&gt;
error2 = zeros(1,300);&lt;br /&gt;
&lt;br /&gt;
d_0=0;d0=(2.*f(u_1).*(1/2))';&lt;br /&gt;
d_0=h*w'*d0;&lt;br /&gt;
for n=1:300&lt;br /&gt;
    f_n=zeros(1,N+1); % Aproximación con n términos&lt;br /&gt;
    for k=1:n&lt;br /&gt;
        g=(f(u_1).*cos(k*pi*u_1))';&lt;br /&gt;
        d_k=2*h*w'*g; % Coeficiente de Fourier&lt;br /&gt;
        f_n=f_n+d_k*cos(k*pi*u_1); %Suma de términos&lt;br /&gt;
    end&lt;br /&gt;
f_n=f_n+d_0;&lt;br /&gt;
&lt;br /&gt;
    % Cálculo de errores&lt;br /&gt;
    g1=abs(f(u_1)-f_n).^2;&lt;br /&gt;
    error1(n)=(h*w'*g1')^(1/2); % Norma L^2&lt;br /&gt;
    error2(n)=max(abs(f(u_1)-f_n)); % Norma suprema&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Graficar errores con escala logarítmica en el eje y&lt;br /&gt;
nn=1:300;&lt;br /&gt;
hold on&lt;br /&gt;
plot(nn,error1,'b',LineWidth=1.5)&lt;br /&gt;
plot(nn,error2,'r',LineWidth=1.5)&lt;br /&gt;
xlabel('Valor de n')&lt;br /&gt;
ylabel('Error en escala logarítmica')&lt;br /&gt;
title('Errores en las normas L^2 y uniforme')&lt;br /&gt;
legend('Error en la norma $L^2$', 'Error en la norma uniforme')&lt;br /&gt;
grid on&lt;br /&gt;
set(gca, 'YScale', 'log') % Escala logarítmica en el eje y&lt;br /&gt;
ylim([1e-6 1]) % Límites del eje y&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP24/25]]&lt;/div&gt;</summary>
		<author><name>Violetalb</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Series_de_Fourier_(Grupo_ACIRV)&amp;diff=84144</id>
		<title>Series de Fourier (Grupo ACIRV)</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Series_de_Fourier_(Grupo_ACIRV)&amp;diff=84144"/>
				<updated>2025-02-15T12:18:08Z</updated>
		
		<summary type="html">&lt;p&gt;Violetalb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Series de Fourier (Grupo ACIRV). | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP24/25|2024-25]] | Ángela Sotelo Fernández, Carmen Doñoro Molina, Inés Torres Gómez, Rubén Gutiérrez Hernández, Violeta Luján Barrios.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Las series de Fourier constituyen una herramienta fundamental en el análisis matemático. Estas series, introducidas por Joseph Fourier en el siglo XIX, nos permiten representar funciones periódicas mediante una base de funciones trigonométricas.&lt;br /&gt;
&lt;br /&gt;
La idea es que cualquier función \( f(x) \) periódica con \( f\in L^2(-\pi,\pi) \) puede expresarse como:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f(x) = d_0 + \sum_{n=1}^{\infty} \left[ d_n \cos\left(\frac{2\pi n x}{T}\right) + c_n \sin\left(\frac{2\pi n x}{T}\right) \right] &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde los coeficientes \( d_n \) y \( c_n \) se obtienen mediante integrales que dependen de la función dada.&lt;br /&gt;
&lt;br /&gt;
=Base trigonométrica compleja=&lt;br /&gt;
La &amp;lt;b&amp;gt;base trigonométrica&amp;lt;/b&amp;gt; es una base del espacio &amp;lt;math&amp;gt;L^2([-\pi,\pi])&amp;lt;/math&amp;gt;, por lo que las funciones pertenecientes a este espacio pueden escribirse como una combinación lineal de los elementos de la base. A estas expresiones se les llama &amp;lt;b&amp;gt;series de Fourier&amp;lt;/b&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
Dado que es una base ortonormal, sus coeficientes pueden calcularse mediante integración, obteniendo las siguientes fórmulas:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;d_0 = \int_{-\pi}^{\pi} f(x) \frac{1}{2} \, dx , \hspace{30px} d_n = \int_{-\pi}^{\pi} f(x) \cos(n\pi x) \, dx , \hspace{30px} c_n = \int_{-\pi}^{\pi} f(x) \sin(n\pi x) \, dx . &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Utilizando el siguiente código en MATLAB, se pueden representar los 10 primeros elementos de la base en una gráfica:&lt;br /&gt;
{{matlab|codigo= &lt;br /&gt;
% Definimos la malla para pintar funciones del [-1,1]&lt;br /&gt;
x = linspace(-1, 1, 1000);  &lt;br /&gt;
n_max = 5;                  % Número de funciones a pintar para seno y coseno&lt;br /&gt;
&lt;br /&gt;
% Pintamos la gráfica de f = 1/2&lt;br /&gt;
figure;&lt;br /&gt;
plot(x, 1/2 * ones(size(x)), 'k', 'LineWidth', 1, 'DisplayName', '1/2');&lt;br /&gt;
hold on;&lt;br /&gt;
&lt;br /&gt;
% Pintamos cos(n*pi*x) y sin(n*pi*x) para n = 1 hasta n_max&lt;br /&gt;
for n = 1:n_max&lt;br /&gt;
    % Definimos las funciones&lt;br /&gt;
    f_cos = cos(n * pi * x);&lt;br /&gt;
    f_sin = sin(n * pi * x);&lt;br /&gt;
    &lt;br /&gt;
    plot(x, f_cos, 'LineWidth', 1, 'DisplayName', sprintf('cos(%d\\pi x)', n));&lt;br /&gt;
    &lt;br /&gt;
    plot(x, f_sin,'--', 'LineWidth', 1, 'DisplayName', sprintf('sin(%d\\pi x)', n));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Ponemos leyenda en la gráfica&lt;br /&gt;
title(sprintf('Base \\{1/2, cos(n\\pi x), sin(n\\pi x)\\} para n = 1 ... %d', n_max));&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('Valor de la función');&lt;br /&gt;
legend('show', 'Location', 'BestOutside'); &lt;br /&gt;
grid on;&lt;br /&gt;
axis([-1 1 -1.5 1.5]);&lt;br /&gt;
&lt;br /&gt;
hold off;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center; margin-top: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;display: inline-block; margin-right: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
    [[Archivo:EJ1_SENO_ACIRV.png|400px|none|Seno]]&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
    [[Archivo:EJ1_COSENO_ACIRV.png|400px|none|Coseno]]&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
    [[Archivo:EJ1_1_2_ACIRV.jpeg|400px|none|Coseno]]&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Aproximación de una función continua=&lt;br /&gt;
Vamos a aproximar la función \( f(x) = 1 - 2 \left| \frac{1}{2} - x \right| \). &lt;br /&gt;
&lt;br /&gt;
En primer lugar, extendemos de forma impar la función al intervalo simétrico \([-1,1]\). Obtenemos entonces \( f_{\text{ext}}(x) = \operatorname{sign}(x) \cdot \left(1 - 2 \left| \frac{1}{2} - |x| \right| \right).  \) Es decir,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
f_{\text{ext}}(x) =&lt;br /&gt;
\begin{cases} &lt;br /&gt;
-(1 - 2 | \frac{1}{2} - |x| |), &amp;amp; \text{si } x \in [-1,0) \\ &lt;br /&gt;
1 - 2 \left| \frac{1}{2} - x \right|, &amp;amp; \text{si } x \in [0,1].&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora debemos comprobar que la función es continua. En el dominio \( [-1,0) \cup (0,1] \), es continua por estar definida como una función continua.  &lt;br /&gt;
Falta por ver que es continua en \( x = 0 \): \( f_{\text{ext}}(0) = 0. \)&lt;br /&gt;
&lt;br /&gt;
Calculamos los límites laterales: &amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \lim_{x \to 0^-} f_{\text{ext}}(x) = -1 + 1 = 0, \hspace{30px} \lim_{x \to 0^+} f_{\text{ext}}(x) = 1 - 1 = 0. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dado que los límites laterales coinciden con \( f_{\text{ext}}(0) \), concluimos que la función es continua en todos los puntos.  &lt;br /&gt;
&lt;br /&gt;
Ahora para la representación, con las fórmulas que hemos calculado arriba, calculamos los coeficientes de Fourier:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; d_0 = \int_{-1}^{1} f_{\text{ext}}(x) \frac{1}{2} \, dx , \hspace{30px} d_n = \int_{-1}^{1} f_{\text{ext}}(x) \cos(n\pi x) \, dx , \hspace{30px} c_n = \int_{-1}^{1} f_{\text{ext}}(x) \sin(n\pi x) \, dx . &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Como los coeficientes \( d_0 \) y \( d_n \) son integrales de una función impar sobre un intervalo simétrico, sabemos que se anulan. Por tanto, la función nos va a quedar como una combinación lineal de los coeficientes \( c_n \), es decir:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f_{\text{ext}}(x) \approx \sum_{n=1}^{\infty} c_n \sin(n\pi x). &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Definimos \( f_n(x) \) como la suma de los primeros \( n \) términos de la serie de Fourier:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f_{\text{ext}}(x) = \sum_{n=1}^{n} b_n \sin(n\pi x), \hspace{2mm} \text{con} \hspace{2mm} b_k = 2\int_{0}^{1} f(x)\sin{(k\pi x)} \,dx . &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A continuación, representamos gráficamente \( f(x) \) y \( f_n(x) \) para \( n=1,5,10 \).  &lt;br /&gt;
Nótese que aumentar el número de términos de la serie de Fourier permite aproximar mejor la función original. &lt;br /&gt;
Los coeficientes de Fourier se obtienen numéricamente resolviendo las integrales usando la fórmula del trapecio con una división bastante fina \( (10^{-3}) \) con la función \( trapz \) que proporciona MatLab.  &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo= &lt;br /&gt;
%Escribimos la función original definida en el intervalo [0,1]:&lt;br /&gt;
f=@(x)1-2*abs(1/2-x);&lt;br /&gt;
%Modificamos la función para que sea impar en el intervalo [-1,1]&lt;br /&gt;
f_ext=@(x)sign(x).*(1-2*abs(1/2-abs(x)));&lt;br /&gt;
&lt;br /&gt;
%Graficamos la función estendida de forma impar&lt;br /&gt;
hold on&lt;br /&gt;
xx=linspace(-1,1,10000);&lt;br /&gt;
plot(xx,f_ext(xx))&lt;br /&gt;
%Modificamos los colores de las gráficas para que se vean mejor&lt;br /&gt;
newcolors = [0.83 0.14 0.14&lt;br /&gt;
             1.00 0.54 0.00&lt;br /&gt;
             0.47 0.25 0.80&lt;br /&gt;
             0.25 0.80 0.54];         &lt;br /&gt;
colororder(newcolors)&lt;br /&gt;
&lt;br /&gt;
%Ahora, vamos a calcular los coeficientes de la serie de Fourier empleando la fórmula del trapecio. &lt;br /&gt;
n=[1 5 10];&lt;br /&gt;
N=1000;                       %Número de puntos&lt;br /&gt;
a=0; b=1;                     %Extremos de los intervalos&lt;br /&gt;
h=(b-a)/N;                    %Tamaño de los intervalos&lt;br /&gt;
u=a:h:b;                      %Puntos de la partición&lt;br /&gt;
for i=1:length(n) &lt;br /&gt;
    SF=0&lt;br /&gt;
    for k=1:n(i)&lt;br /&gt;
        c_n=zeros(1,n(i));&lt;br /&gt;
        c=(2.*f(u).*sin(k.*pi.*u))';  %Función a integrar&lt;br /&gt;
        w=ones(N+1,1);                %Vector de pesos &lt;br /&gt;
        w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
        c_n(k)=h*w'*c;                %Coeficientes de la serie de Fourier&lt;br /&gt;
        SF=SF+c_n(k)*sin(k*pi*xx);    %Vamos calculando la propia serie&lt;br /&gt;
    end&lt;br /&gt;
    plot(xx,SF)                      %Graficamos la serie de Fourier para un n determinado&lt;br /&gt;
end&lt;br /&gt;
hold off&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Para hacer un estudio completo de las aproximaciones, vamos a representar el error de \( f_n(x) \) respecto a \( f(x) \) en función de \( n \).  &lt;br /&gt;
Para calcular este error, vamos a emplear tanto la norma \( L^2 \) como la del supremo o uniforme.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo= &lt;br /&gt;
a=0; b=1;                    &lt;br /&gt;
u_1=a:10^(-3):b; &lt;br /&gt;
N=length(u_1)-1;&lt;br /&gt;
h=(b-a)/N;&lt;br /&gt;
&lt;br /&gt;
%Definir la función f(x)&lt;br /&gt;
f = @(x) 1 - 2*abs(1/2 - x);&lt;br /&gt;
&lt;br /&gt;
% Pesos para la integración con la regla del trapecio&lt;br /&gt;
w=ones(N+1,1);              &lt;br /&gt;
w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
&lt;br /&gt;
% Inicialización de los errores&lt;br /&gt;
error1 = zeros(1,300);&lt;br /&gt;
error2 = zeros(1,300);&lt;br /&gt;
&lt;br /&gt;
for n=1:300&lt;br /&gt;
    f_n=zeros(1,N+1); % Aproximación con n términos&lt;br /&gt;
    for k=1:n&lt;br /&gt;
        g=(f(u_1).*sin(k*pi*u_1))'; &lt;br /&gt;
        a_k=2*h*w'*g; % Coeficiente de Fourier&lt;br /&gt;
        f_n=f_n+a_k*sin(k*pi*u_1); % Suma de términos&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Cálculo de errores&lt;br /&gt;
    g1=abs(f(u_1)-f_n).^2;&lt;br /&gt;
    error1(n)=(h*w'*g1')^(1/2); % Norma L^2&lt;br /&gt;
    error2(n)=max(abs(f(u_1)-f_n)); % Norma suprema&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Graficar errores con escala logarítmica en el eje y&lt;br /&gt;
nn=1:300;&lt;br /&gt;
hold on&lt;br /&gt;
plot(nn,error1,'b',LineWidth=1.5)&lt;br /&gt;
plot(nn,error2,'r',LineWidth=1.5)&lt;br /&gt;
xlabel('Valor de n')&lt;br /&gt;
ylabel('Error en escala logarítmica')&lt;br /&gt;
title('Errores en las normas L^2 y uniforme')&lt;br /&gt;
legend('Error en la norma $L^2$', 'Error en la norma uniforme')&lt;br /&gt;
grid on&lt;br /&gt;
set(gca, 'YScale', 'log') % Escala logarítmica en el eje y&lt;br /&gt;
ylim([1e-6 1]) % Límites del eje y&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Aproximación de una función discontinua=&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a aproximar la función \( f(x) = 1_{x \leq 1/4}(x) \).&lt;br /&gt;
&lt;br /&gt;
A diferencia del caso anterior, extendemos la función de forma par al intervalo \([-1,1]\), obteniendo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f_{\text{ext}}(x) = \begin{cases} 1, &amp;amp; \text{si } x \in [-\frac{1}{4}, \frac{1}{4}] \\ 0, &amp;amp; \text{si } x \in [-1,-\frac{1}{4}) \cup (\frac{1}{4},1]. \end{cases} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observamos que la función posee dos discontinuidades, en \( x = -\frac{1}{4} \) y \( x = \frac{1}{4} \). Sin embargo, por la condición de Dirichlet, puesto que el número de discontinuidades es finito y la función es monótona a trozos, podemos hacer su transformada de Fourier.&lt;br /&gt;
&lt;br /&gt;
Como en este caso la función es par, su serie de Fourier es una combinación lineal de \( \{\frac{1}{2}, cos(n\pi x)\}_{n\in\mathbf{N}} \). Los coeficientes \( c_n \) se anulan al ser la integral de una función impar sobre un intervalo simétrico:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f_{\text{ext}}(x) \approx d_0 +\sum^{\infty}_{n=1} d_ncos(n\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Al representar \( f(x) \) y \( f_{n}(x) \) para \( n=\{1,...,10 \}\), observamos que aparecen unas oscilaciones llamadas el fenómeno de Gibbs.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo= &lt;br /&gt;
clear all&lt;br /&gt;
close all&lt;br /&gt;
F=@(x) 1.*(x&amp;lt;=1/4);&lt;br /&gt;
g=@(x) F(-x);&lt;br /&gt;
xx=linspace(-1,1,10000);&lt;br /&gt;
fplot(F,[0 1],'b','linewidth',1.5)&lt;br /&gt;
hold on&lt;br /&gt;
fplot(g,[-1 0],'b','linewidth',1.5)&lt;br /&gt;
%Modificamos los colores de las gráficas para que se vean mejor&lt;br /&gt;
newcolors = [0.83 0.14 0.14&lt;br /&gt;
             1.00 0.54 0.00&lt;br /&gt;
             0.47 0.25 0.80&lt;br /&gt;
             0.25 0.80 0.54];         &lt;br /&gt;
colororder(newcolors)&lt;br /&gt;
&lt;br /&gt;
%Ahora, vamos a calcular los coeficientes de la serie de Fourier empleando la fórmula del trapecio. &lt;br /&gt;
n=1:1:10;&lt;br /&gt;
N=1000;                       %Número de puntos&lt;br /&gt;
a=0; b=1;                     %Extremos de los intervalos&lt;br /&gt;
h=(b-a)/N;                    %Tamaño de los intervalos&lt;br /&gt;
u=a:h:b;                      %Puntos de la partición&lt;br /&gt;
w=ones(N+1,1);                %Vector de pesos &lt;br /&gt;
w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
d_0=0; d0=(2.*F(u).*(1/2))';&lt;br /&gt;
d_0=h*w'*d0;&lt;br /&gt;
SF=zeros(length(n),length(xx))+ones(length(n),length(xx))*d_0;&lt;br /&gt;
for i=1:length(n) &lt;br /&gt;
    for k=1:n(i)&lt;br /&gt;
        d_n=zeros(1,n(i));&lt;br /&gt;
        c=(2.*F(u).*cos(k.*pi.*u))';  %Función a integrar&lt;br /&gt;
        d_n(k)=h*w'*c;                %Coeficientes de la serie de Fourier&lt;br /&gt;
        SF(i,:)=SF(i,:)+d_n(k)*cos(k*pi*xx); %Vamos calculando la serie para cada n y la guardamos en la fila n de SF&lt;br /&gt;
    end&lt;br /&gt;
    plot(xx,SF(i,:))                  %Graficamos la serie de Fourier para un n determinado&lt;br /&gt;
end&lt;br /&gt;
hold off&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Para suavizar dichas oscilaciones utilizamos las sumas de Cesàro:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; S_N = \frac{1}{n+1} \sum^{N}_{n=0}f_n(x). &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos representarlas gráficamente para un n dado:&lt;br /&gt;
{{matlab|codigo= &lt;br /&gt;
clear all&lt;br /&gt;
close all&lt;br /&gt;
F=@(x) 1.*(x&amp;lt;=1/4);&lt;br /&gt;
g=@(x) F(-x);&lt;br /&gt;
xx=linspace(-1,1,10000);&lt;br /&gt;
fplot(F,[0 1],'b','linewidth',1.5)&lt;br /&gt;
hold on&lt;br /&gt;
fplot(g,[-1 0],'b','linewidth',1.5)&lt;br /&gt;
%Modificamos los colores de las gráficas para que se vean mejor&lt;br /&gt;
newcolors = [0.83 0.14 0.14&lt;br /&gt;
             1.00 0.54 0.00&lt;br /&gt;
             0.47 0.25 0.80&lt;br /&gt;
             0.25 0.80 0.54];         &lt;br /&gt;
colororder(newcolors)&lt;br /&gt;
&lt;br /&gt;
%Ahora, vamos a calcular los coeficientes de la serie de Fourier empleando la fórmula del trapecio. &lt;br /&gt;
n=1:1:100;&lt;br /&gt;
N=1000;                       %Número de puntos&lt;br /&gt;
a=0; b=1;                     %Extremos de los intervalos&lt;br /&gt;
h=(b-a)/N;                    %Tamaño de los intervalos&lt;br /&gt;
u=a:h:b;                      %Puntos de la partición&lt;br /&gt;
w=ones(N+1,1);                %Vector de pesos &lt;br /&gt;
w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
d_0=0; d0=(2.*F(u).*(1/2))';&lt;br /&gt;
d_0=h*w'*d0;&lt;br /&gt;
SF=zeros(length(n),length(xx))+ones(length(n),length(xx))*d_0;&lt;br /&gt;
for i=1:length(n) &lt;br /&gt;
    for k=1:n(i)&lt;br /&gt;
        d_n=zeros(1,n(i));&lt;br /&gt;
        c=(2.*F(u).*cos(k.*pi.*u))';  %Función a integrar&lt;br /&gt;
        d_n(k)=h*w'*c;                %Coeficientes de la serie de Fourier&lt;br /&gt;
        SF(i,:)=SF(i,:)+d_n(k)*cos(k*pi*xx); %Vamos calculando la serie para cada n y la guardamos en la fila n de SF&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
SNs=zeros(1,length(xx));              %Calculamos las sumas de Cesàro&lt;br /&gt;
for i=1:length(n)&lt;br /&gt;
    SNs=SNs+SF(i,:);&lt;br /&gt;
end&lt;br /&gt;
SN=1/(length(n)+1)*SNs;&lt;br /&gt;
plot(xx,SN)                           %Graficamos la aproximación obtenida.&lt;br /&gt;
hold off&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falta comparar el error de ambas aproximaciones.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
a=0; b=1;                    &lt;br /&gt;
u_1=a:10^(-3):b; &lt;br /&gt;
N=length(u_1)-1;&lt;br /&gt;
h=(b-a)/N;&lt;br /&gt;
&lt;br /&gt;
% Definir la función f(x)&lt;br /&gt;
f = @(x) 1.*(x&amp;lt;=1/4);&lt;br /&gt;
&lt;br /&gt;
% Pesos para la integración con la regla del trapecio&lt;br /&gt;
w=ones(N+1,1);              &lt;br /&gt;
w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
&lt;br /&gt;
% Inicialización de los errores&lt;br /&gt;
error1 = zeros(1,300);&lt;br /&gt;
error2 = zeros(1,300);&lt;br /&gt;
&lt;br /&gt;
d_0=0;d0=(2.*f(u_1).*(1/2))';&lt;br /&gt;
d_0=h*w'*d0;&lt;br /&gt;
for n=1:300&lt;br /&gt;
    f_n=zeros(1,N+1); % Aproximación con n términos&lt;br /&gt;
    for k=1:n&lt;br /&gt;
        g=(f(u_1).*cos(k*pi*u_1))';&lt;br /&gt;
        d_k=2*h*w'*g; % Coeficiente de Fourier&lt;br /&gt;
        f_n=f_n+d_k*cos(k*pi*u_1); %Suma de términos&lt;br /&gt;
    end&lt;br /&gt;
f_ext=f_n+d_0; %Función extendida&lt;br /&gt;
&lt;br /&gt;
    % Cálculo de errores&lt;br /&gt;
    g1=abs(f(u_1)-f_ext).^2;&lt;br /&gt;
    error1(n)=(h*w'*g1')^(1/2); % Norma L^2&lt;br /&gt;
    error2(n)=max(abs(f(u_1)-f_ext)); % Norma suprema&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Graficar errores con escala logarítmica en el eje y&lt;br /&gt;
nn=1:300;&lt;br /&gt;
hold on&lt;br /&gt;
plot(nn,error1,'b',LineWidth=1.5)&lt;br /&gt;
plot(nn,error2,'r',LineWidth=1.5)&lt;br /&gt;
xlabel('Valor de n')&lt;br /&gt;
ylabel('Error en escala logarítmica')&lt;br /&gt;
title('Errores en las normas L^2 y uniforme')&lt;br /&gt;
legend('Error en la norma $L^2$', 'Error en la norma uniforme')&lt;br /&gt;
grid on&lt;br /&gt;
set(gca, 'YScale', 'log') % Escala logarítmica en el eje y&lt;br /&gt;
ylim([1e-6 1]) % Límites del eje y&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP24/25]]&lt;/div&gt;</summary>
		<author><name>Violetalb</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Series_de_Fourier_(Grupo_ACIRV)&amp;diff=84143</id>
		<title>Series de Fourier (Grupo ACIRV)</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Series_de_Fourier_(Grupo_ACIRV)&amp;diff=84143"/>
				<updated>2025-02-15T12:15:51Z</updated>
		
		<summary type="html">&lt;p&gt;Violetalb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Series de Fourier (Grupo ACIRV). | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP24/25|2024-25]] | Ángela Sotelo Fernández, Carmen Doñoro Molina, Inés Torres Gómez, Rubén Gutiérrez Hernández, Violeta Luján Barrios.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Las series de Fourier constituyen una herramienta fundamental en el análisis matemático. Estas series, introducidas por Joseph Fourier en el siglo XIX, nos permiten representar funciones periódicas mediante una base de funciones trigonométricas.&lt;br /&gt;
&lt;br /&gt;
La idea es que cualquier función \( f(x) \) periódica con \( f\in L^2(-\pi,\pi) \) puede expresarse como:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f(x) = d_0 + \sum_{n=1}^{\infty} \left[ d_n \cos\left(\frac{2\pi n x}{T}\right) + c_n \sin\left(\frac{2\pi n x}{T}\right) \right] &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde los coeficientes \( d_n \) y \( c_n \) se obtienen mediante integrales que dependen de la función dada.&lt;br /&gt;
&lt;br /&gt;
=Base trigonométrica compleja=&lt;br /&gt;
La &amp;lt;b&amp;gt;base trigonométrica&amp;lt;/b&amp;gt; es una base del espacio &amp;lt;math&amp;gt;L^2([-\pi,\pi])&amp;lt;/math&amp;gt;, por lo que las funciones pertenecientes a este espacio pueden escribirse como una combinación lineal de los elementos de la base. A estas expresiones se les llama &amp;lt;b&amp;gt;series de Fourier&amp;lt;/b&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
Dado que es una base ortonormal, sus coeficientes pueden calcularse mediante integración, obteniendo las siguientes fórmulas:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;d_0 = \int_{-\pi}^{\pi} f(x) \frac{1}{2} \, dx , \hspace{30px} d_n = \int_{-\pi}^{\pi} f(x) \cos(n\pi x) \, dx , \hspace{30px} c_n = \int_{-\pi}^{\pi} f(x) \sin(n\pi x) \, dx . &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Utilizando el siguiente código en MATLAB, se pueden representar los 10 primeros elementos de la base en una gráfica:&lt;br /&gt;
{{matlab|codigo= &lt;br /&gt;
% Definimos la malla para pintar funciones del [-1,1]&lt;br /&gt;
x = linspace(-1, 1, 1000);  &lt;br /&gt;
n_max = 5;                  % Número de funciones a pintar para seno y coseno&lt;br /&gt;
&lt;br /&gt;
% Pintamos la gráfica de f = 1/2&lt;br /&gt;
figure;&lt;br /&gt;
plot(x, 1/2 * ones(size(x)), 'k', 'LineWidth', 1, 'DisplayName', '1/2');&lt;br /&gt;
hold on;&lt;br /&gt;
&lt;br /&gt;
% Pintamos cos(n*pi*x) y sin(n*pi*x) para n = 1 hasta n_max&lt;br /&gt;
for n = 1:n_max&lt;br /&gt;
    % Definimos las funciones&lt;br /&gt;
    f_cos = cos(n * pi * x);&lt;br /&gt;
    f_sin = sin(n * pi * x);&lt;br /&gt;
    &lt;br /&gt;
    plot(x, f_cos, 'LineWidth', 1, 'DisplayName', sprintf('cos(%d\\pi x)', n));&lt;br /&gt;
    &lt;br /&gt;
    plot(x, f_sin,'--', 'LineWidth', 1, 'DisplayName', sprintf('sin(%d\\pi x)', n));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Ponemos leyenda en la gráfica&lt;br /&gt;
title(sprintf('Base \\{1/2, cos(n\\pi x), sin(n\\pi x)\\} para n = 1 ... %d', n_max));&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('Valor de la función');&lt;br /&gt;
legend('show', 'Location', 'BestOutside'); &lt;br /&gt;
grid on;&lt;br /&gt;
axis([-1 1 -1.5 1.5]);&lt;br /&gt;
&lt;br /&gt;
hold off;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center; margin-top: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;display: inline-block; margin-right: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
    [[Archivo:EJ1_SENO_ACIRV.png|400px|none|Seno]]&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
    [[Archivo:EJ1_COSENO_ACIRV.png|400px|none|Coseno]]&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
    [[Archivo:EJ1_1_2_ACIRV.jpeg|400px|none|Coseno]]&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Aproximación de una función continua=&lt;br /&gt;
Vamos a aproximar la función \( f(x) = 1 - 2 \left| \frac{1}{2} - x \right| \). &lt;br /&gt;
&lt;br /&gt;
En primer lugar, extendemos de forma impar la función al intervalo simétrico \([-1,1]\). Obtenemos entonces \( f_{\text{ext}}(x) = \operatorname{sign}(x) \cdot \left(1 - 2 \left| \frac{1}{2} - |x| \right| \right).  \) Es decir,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
f_{\text{ext}}(x) =&lt;br /&gt;
\begin{cases} &lt;br /&gt;
-(1 - 2 | \frac{1}{2} - |x| |), &amp;amp; \text{si } x \in [-1,0) \\ &lt;br /&gt;
1 - 2 \left| \frac{1}{2} - x \right|, &amp;amp; \text{si } x \in [0,1].&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora debemos comprobar que la función es continua. En el dominio \( [-1,0) \cup (0,1] \), es continua por estar definida como una función continua.  &lt;br /&gt;
Falta por ver que es continua en \( x = 0 \): \( f_{\text{ext}}(0) = 0. \)&lt;br /&gt;
&lt;br /&gt;
Calculamos los límites laterales: &amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \lim_{x \to 0^-} f_{\text{ext}}(x) = -1 + 1 = 0, \hspace{30px} \lim_{x \to 0^+} f_{\text{ext}}(x) = 1 - 1 = 0. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dado que los límites laterales coinciden con \( f_{\text{ext}}(0) \), concluimos que la función es continua en todos los puntos.  &lt;br /&gt;
&lt;br /&gt;
Ahora para la representación, con las fórmulas que hemos calculado arriba, calculamos los coeficientes de Fourier:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; d_0 = \int_{-1}^{1} f_{\text{ext}}(x) \frac{1}{2} \, dx , \hspace{30px} d_n = \int_{-1}^{1} f_{\text{ext}}(x) \cos(n\pi x) \, dx , \hspace{30px} c_n = \int_{-1}^{1} f_{\text{ext}}(x) \sin(n\pi x) \, dx . &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Como los coeficientes \( d_0 \) y \( d_n \) son integrales de una función impar sobre un intervalo simétrico, sabemos que se anulan. Por tanto, la función nos va a quedar como una combinación lineal de los coeficientes \( c_n \), es decir:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f_{\text{ext}}(x) \approx \sum_{n=1}^{\infty} c_n \sin(n\pi x). &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Definimos \( f_n(x) \) como la suma de los primeros \( n \) términos de la serie de Fourier:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f_{\text{ext}}(x) = \sum_{n=1}^{n} b_n \sin(n\pi x), \hspace{2mm} \text{con} \hspace{2mm} b_k = 2\int_{0}^{1} f(x)\sin{(k\pi x)} \,dx . &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A continuación, representamos gráficamente \( f(x) \) y \( f_n(x) \) para \( n=1,5,10 \).  &lt;br /&gt;
Nótese que aumentar el número de términos de la serie de Fourier permite aproximar mejor la función original. &lt;br /&gt;
Los coeficientes de Fourier se obtienen numéricamente resolviendo las integrales usando la fórmula del trapecio con una división bastante fina \( (10^{-3}) \) con la función \( trapz \) que proporciona MatLab.  &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo= &lt;br /&gt;
%Escribimos la función original definida en el intervalo [0,1]:&lt;br /&gt;
f=@(x)1-2*abs(1/2-x);&lt;br /&gt;
%Modificamos la función para que sea impar en el intervalo [-1,1]&lt;br /&gt;
f_ext=@(x)sign(x).*(1-2*abs(1/2-abs(x)));&lt;br /&gt;
&lt;br /&gt;
%Graficamos la función estendida de forma impar&lt;br /&gt;
hold on&lt;br /&gt;
xx=linspace(-1,1,10000);&lt;br /&gt;
plot(xx,f_ext(xx))&lt;br /&gt;
%Modificamos los colores de las gráficas para que se vean mejor&lt;br /&gt;
newcolors = [0.83 0.14 0.14&lt;br /&gt;
             1.00 0.54 0.00&lt;br /&gt;
             0.47 0.25 0.80&lt;br /&gt;
             0.25 0.80 0.54];         &lt;br /&gt;
colororder(newcolors)&lt;br /&gt;
&lt;br /&gt;
%Ahora, vamos a calcular los coeficientes de la serie de Fourier empleando la fórmula del trapecio. &lt;br /&gt;
n=[1 5 10];&lt;br /&gt;
N=1000;                       %Número de puntos&lt;br /&gt;
a=0; b=1;                     %Extremos de los intervalos&lt;br /&gt;
h=(b-a)/N;                    %Tamaño de los intervalos&lt;br /&gt;
u=a:h:b;                      %Puntos de la partición&lt;br /&gt;
for i=1:length(n) &lt;br /&gt;
    SF=0&lt;br /&gt;
    for k=1:n(i)&lt;br /&gt;
        c_n=zeros(1,n(i));&lt;br /&gt;
        c=(2.*f(u).*sin(k.*pi.*u))';  %Función a integrar&lt;br /&gt;
        w=ones(N+1,1);                %Vector de pesos &lt;br /&gt;
        w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
        c_n(k)=h*w'*c;                %Coeficientes de la serie de Fourier&lt;br /&gt;
        SF=SF+c_n(k)*sin(k*pi*xx);    %Vamos calculando la propia serie&lt;br /&gt;
    end&lt;br /&gt;
    plot(xx,SF)                      %Graficamos la serie de Fourier para un n determinado&lt;br /&gt;
end&lt;br /&gt;
hold off&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Para hacer un estudio completo de las aproximaciones, vamos a representar el error de \( f_n(x) \) respecto a \( f(x) \) en función de \( n \).  &lt;br /&gt;
Para calcular este error, vamos a emplear tanto la norma \( L^2 \) como la del supremo o uniforme.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo= &lt;br /&gt;
a=0; b=1;                    &lt;br /&gt;
u_1=a:10^(-3):b; &lt;br /&gt;
N=length(u_1)-1;&lt;br /&gt;
h=(b-a)/N;&lt;br /&gt;
&lt;br /&gt;
%Definir la función f(x)&lt;br /&gt;
f = @(x) 1 - 2*abs(1/2 - x);&lt;br /&gt;
&lt;br /&gt;
% Pesos para la integración con la regla del trapecio&lt;br /&gt;
w=ones(N+1,1);              &lt;br /&gt;
w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
&lt;br /&gt;
% Inicialización de los errores&lt;br /&gt;
error1 = zeros(1,300);&lt;br /&gt;
error2 = zeros(1,300);&lt;br /&gt;
&lt;br /&gt;
for n=1:300&lt;br /&gt;
    f_n=zeros(1,N+1); % Aproximación con n términos&lt;br /&gt;
    for k=1:n&lt;br /&gt;
        g=(f(u_1).*sin(k*pi*u_1))'; &lt;br /&gt;
        a_k=2*h*w'*g; % Coeficiente de Fourier&lt;br /&gt;
        f_n=f_n+a_k*sin(k*pi*u_1); % Suma de términos&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Cálculo de errores&lt;br /&gt;
    g1=abs(f(u_1)-f_n).^2;&lt;br /&gt;
    error1(n)=(h*w'*g1')^(1/2); % Norma L^2&lt;br /&gt;
    error2(n)=max(abs(f(u_1)-f_n)); % Norma suprema&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Graficar errores con escala logarítmica en el eje y&lt;br /&gt;
nn=1:300;&lt;br /&gt;
hold on&lt;br /&gt;
plot(nn,error1,'b',LineWidth=1.5)&lt;br /&gt;
plot(nn,error2,'r',LineWidth=1.5)&lt;br /&gt;
xlabel('Valor de n')&lt;br /&gt;
ylabel('Error en escala logarítmica')&lt;br /&gt;
title('Errores en las normas L^2 y uniforme')&lt;br /&gt;
legend('Error en la norma $L^2$', 'Error en la norma uniforme')&lt;br /&gt;
grid on&lt;br /&gt;
set(gca, 'YScale', 'log') % Escala logarítmica en el eje y&lt;br /&gt;
ylim([1e-6 1]) % Límites del eje y&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Aproximación de una función discontinua=&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a aproximar la función \( f(x) = 1_{x \leq 1/4}(x) \).&lt;br /&gt;
&lt;br /&gt;
A diferencia del caso anterior, extendemos la función de forma par al intervalo \([-1,1]\), obteniendo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f_{\text{ext}}(x) = \begin{cases} 1, &amp;amp; \text{si } x \in [-\frac{1}{4}, \frac{1}{4}] \\ 0, &amp;amp; \text{si } x \in [-1,-\frac{1}{4}) \cup (\frac{1}{4},1]. \end{cases} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observamos que la función posee dos discontinuidades, en \( x = -\frac{1}{4} \) y \( x = \frac{1}{4} \). Sin embargo, por la condición de Dirichlet, puesto que el número de discontinuidades es finito y la función es monótona a trozos, podemos hacer su transformada de Fourier.&lt;br /&gt;
&lt;br /&gt;
Como en este caso la función es par, su serie de Fourier es una combinación lineal de \( \{\frac{1}{2}, cos(n\pi x)\}_{n\in\mathbf{N}} \). Los coeficientes \( c_n \) se anulan al ser la integral de una función impar sobre un intervalo simétrico:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f_{\text{ext}}(x) \approx d_0 +\sum^{\infty}_{n=1} d_ncos(n\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Al representar \( f(x) \) y \( f_{n}(x) \) para \( n=\{1,...,10 \}\), observamos que aparecen unas oscilaciones llamadas el fenómeno de Gibbs.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo= &lt;br /&gt;
clear all&lt;br /&gt;
close all&lt;br /&gt;
F=@(x) 1.*(x&amp;lt;=1/4);&lt;br /&gt;
g=@(x) F(-x);&lt;br /&gt;
xx=linspace(-1,1,10000);&lt;br /&gt;
fplot(F,[0 1],'b','linewidth',1.5)&lt;br /&gt;
hold on&lt;br /&gt;
fplot(g,[-1 0],'b','linewidth',1.5)&lt;br /&gt;
%Modificamos los colores de las gráficas para que se vean mejor&lt;br /&gt;
newcolors = [0.83 0.14 0.14&lt;br /&gt;
             1.00 0.54 0.00&lt;br /&gt;
             0.47 0.25 0.80&lt;br /&gt;
             0.25 0.80 0.54];         &lt;br /&gt;
colororder(newcolors)&lt;br /&gt;
&lt;br /&gt;
%Ahora, vamos a calcular los coeficientes de la serie de Fourier empleando la fórmula del trapecio. &lt;br /&gt;
n=1:1:10;&lt;br /&gt;
N=1000;                       %Número de puntos&lt;br /&gt;
a=0; b=1;                     %Extremos de los intervalos&lt;br /&gt;
h=(b-a)/N;                    %Tamaño de los intervalos&lt;br /&gt;
u=a:h:b;                      %Puntos de la partición&lt;br /&gt;
w=ones(N+1,1);                %Vector de pesos &lt;br /&gt;
w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
d_0=0; d0=(2.*F(u).*(1/2))';&lt;br /&gt;
d_0=h*w'*d0;&lt;br /&gt;
SF=zeros(length(n),length(xx))+ones(length(n),length(xx))*d_0;&lt;br /&gt;
for i=1:length(n) &lt;br /&gt;
    for k=1:n(i)&lt;br /&gt;
        d_n=zeros(1,n(i));&lt;br /&gt;
        c=(2.*F(u).*cos(k.*pi.*u))';  %Función a integrar&lt;br /&gt;
        d_n(k)=h*w'*c;                %Coeficientes de la serie de Fourier&lt;br /&gt;
        SF(i,:)=SF(i,:)+d_n(k)*cos(k*pi*xx); %Vamos calculando la serie para cada n y la guardamos en la fila n de SF&lt;br /&gt;
    end&lt;br /&gt;
    plot(xx,SF(i,:))                  %Graficamos la serie de Fourier para un n determinado&lt;br /&gt;
end&lt;br /&gt;
hold off&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Volvemos a representar también el error respecto a \( f(x \).&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo=&lt;br /&gt;
a=0; b=1;                    &lt;br /&gt;
u_1=a:10^(-3):b; &lt;br /&gt;
N=length(u_1)-1;&lt;br /&gt;
h=(b-a)/N;&lt;br /&gt;
&lt;br /&gt;
% Definir la función f(x)&lt;br /&gt;
f = @(x) 1.*(x&amp;lt;=1/4);&lt;br /&gt;
&lt;br /&gt;
% Pesos para la integración con la regla del trapecio&lt;br /&gt;
w=ones(N+1,1);              &lt;br /&gt;
w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
&lt;br /&gt;
% Inicialización de los errores&lt;br /&gt;
error1 = zeros(1,300);&lt;br /&gt;
error2 = zeros(1,300);&lt;br /&gt;
&lt;br /&gt;
d_0=0;d0=(2.*f(u_1).*(1/2))';&lt;br /&gt;
d_0=h*w'*d0;&lt;br /&gt;
for n=1:300&lt;br /&gt;
    f_n=zeros(1,N+1); % Aproximación con n términos&lt;br /&gt;
    for k=1:n&lt;br /&gt;
        g=(f(u_1).*cos(k*pi*u_1))';&lt;br /&gt;
        d_k=2*h*w'*g; % Coeficiente de Fourier&lt;br /&gt;
        f_n=f_n+d_k*cos(k*pi*u_1); %Suma de términos&lt;br /&gt;
    end&lt;br /&gt;
f_ext=f_n+d_0; %Función extendida&lt;br /&gt;
&lt;br /&gt;
    % Cálculo de errores&lt;br /&gt;
    g1=abs(f(u_1)-f_ext).^2;&lt;br /&gt;
    error1(n)=(h*w'*g1')^(1/2); % Norma L^2&lt;br /&gt;
    error2(n)=max(abs(f(u_1)-f_ext)); % Norma suprema&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Graficar errores con escala logarítmica en el eje y&lt;br /&gt;
nn=1:300;&lt;br /&gt;
hold on&lt;br /&gt;
plot(nn,error1,'b',LineWidth=1.5)&lt;br /&gt;
plot(nn,error2,'r',LineWidth=1.5)&lt;br /&gt;
xlabel('Valor de n')&lt;br /&gt;
ylabel('Error en escala logarítmica')&lt;br /&gt;
title('Errores en las normas L^2 y uniforme')&lt;br /&gt;
legend('Error en la norma $L^2$', 'Error en la norma uniforme')&lt;br /&gt;
grid on&lt;br /&gt;
set(gca, 'YScale', 'log') % Escala logarítmica en el eje y&lt;br /&gt;
ylim([1e-6 1]) % Límites del eje y&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Ahora, para suavizar las oscilaciones de Gibbs utilizamos las sumas de Cesàro:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; S_N = \frac{1}{n+1} \sum^{N}_{n=0}f_n(x). &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos representarlas gráficamente para un n dado:&lt;br /&gt;
{{matlab|codigo= &lt;br /&gt;
clear all&lt;br /&gt;
close all&lt;br /&gt;
F=@(x) 1.*(x&amp;lt;=1/4);&lt;br /&gt;
g=@(x) F(-x);&lt;br /&gt;
xx=linspace(-1,1,10000);&lt;br /&gt;
fplot(F,[0 1],'b','linewidth',1.5)&lt;br /&gt;
hold on&lt;br /&gt;
fplot(g,[-1 0],'b','linewidth',1.5)&lt;br /&gt;
%Modificamos los colores de las gráficas para que se vean mejor&lt;br /&gt;
newcolors = [0.83 0.14 0.14&lt;br /&gt;
             1.00 0.54 0.00&lt;br /&gt;
             0.47 0.25 0.80&lt;br /&gt;
             0.25 0.80 0.54];         &lt;br /&gt;
colororder(newcolors)&lt;br /&gt;
&lt;br /&gt;
%Ahora, vamos a calcular los coeficientes de la serie de Fourier empleando la fórmula del trapecio. &lt;br /&gt;
n=1:1:100;&lt;br /&gt;
N=1000;                       %Número de puntos&lt;br /&gt;
a=0; b=1;                     %Extremos de los intervalos&lt;br /&gt;
h=(b-a)/N;                    %Tamaño de los intervalos&lt;br /&gt;
u=a:h:b;                      %Puntos de la partición&lt;br /&gt;
w=ones(N+1,1);                %Vector de pesos &lt;br /&gt;
w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
d_0=0; d0=(2.*F(u).*(1/2))';&lt;br /&gt;
d_0=h*w'*d0;&lt;br /&gt;
SF=zeros(length(n),length(xx))+ones(length(n),length(xx))*d_0;&lt;br /&gt;
for i=1:length(n) &lt;br /&gt;
    for k=1:n(i)&lt;br /&gt;
        d_n=zeros(1,n(i));&lt;br /&gt;
        c=(2.*F(u).*cos(k.*pi.*u))';  %Función a integrar&lt;br /&gt;
        d_n(k)=h*w'*c;                %Coeficientes de la serie de Fourier&lt;br /&gt;
        SF(i,:)=SF(i,:)+d_n(k)*cos(k*pi*xx); %Vamos calculando la serie para cada n y la guardamos en la fila n de SF&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
SNs=zeros(1,length(xx));              %Calculamos las sumas de Cesàro&lt;br /&gt;
for i=1:length(n)&lt;br /&gt;
    SNs=SNs+SF(i,:);&lt;br /&gt;
end&lt;br /&gt;
SN=1/(length(n)+1)*SNs;&lt;br /&gt;
plot(xx,SN)                           %Graficamos la aproximación obtenida.&lt;br /&gt;
hold off&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falta comparar el error de ambas aproximaciones.&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP24/25]]&lt;/div&gt;</summary>
		<author><name>Violetalb</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Series_de_Fourier_(Grupo_ACIRV)&amp;diff=84096</id>
		<title>Series de Fourier (Grupo ACIRV)</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Series_de_Fourier_(Grupo_ACIRV)&amp;diff=84096"/>
				<updated>2025-02-14T21:01:33Z</updated>
		
		<summary type="html">&lt;p&gt;Violetalb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Series de Fourier (Grupo ACIRV). | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP24/25|2024-25]] | Ángela Sotelo Fernández, Carmen Doñoro Molina, Inés Torres Gómez, Rubén Gutiérrez Hernández, Violeta Luján Barrios.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Las series de Fourier constituyen una herramienta fundamental en el análisis matemático. Estas series, introducidas por Joseph Fourier en el siglo XIX, nos permiten representar funciones periódicas mediante una base de funciones trigonométricas.&lt;br /&gt;
&lt;br /&gt;
La idea es que cualquier función \( f(x) \) periódica con \( f\in L^2(-\pi,\pi) \) puede expresarse como:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f(x) = d_0 + \sum_{n=1}^{\infty} \left[ d_n \cos\left(\frac{2\pi n x}{T}\right) + c_n \sin\left(\frac{2\pi n x}{T}\right) \right] &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde los coeficientes \( d_n \) y \( c_n \) se obtienen mediante integrales que dependen de la función dada.&lt;br /&gt;
&lt;br /&gt;
=Base trigonométrica compleja=&lt;br /&gt;
La &amp;lt;b&amp;gt;base trigonométrica&amp;lt;/b&amp;gt; es una base del espacio &amp;lt;math&amp;gt;L^2([-\pi,\pi])&amp;lt;/math&amp;gt;, por lo que las funciones pertenecientes a este espacio pueden escribirse como una combinación lineal de los elementos de la base. A estas expresiones se les llama &amp;lt;b&amp;gt;series de Fourier&amp;lt;/b&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
Dado que es una base ortonormal, sus coeficientes pueden calcularse mediante integración, obteniendo las siguientes fórmulas:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;d_0 = \int_{-\pi}^{\pi} f(x) \frac{1}{2} \, dx , \hspace{30px} d_n = \int_{-\pi}^{\pi} f(x) \cos(n\pi x) \, dx , \hspace{30px} c_n = \int_{-\pi}^{\pi} f(x) \sin(n\pi x) \, dx . &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Utilizando el siguiente código en MATLAB, se pueden representar los 10 primeros elementos de la base en una gráfica:&lt;br /&gt;
{{matlab|codigo= &lt;br /&gt;
% Definimos la malla para pintar funciones del [-1,1]&lt;br /&gt;
x = linspace(-1, 1, 1000);  &lt;br /&gt;
n_max = 5;                  % Número de funciones a pintar para seno y coseno&lt;br /&gt;
&lt;br /&gt;
% Pintamos la gráfica de f = 1/2&lt;br /&gt;
figure;&lt;br /&gt;
plot(x, 1/2 * ones(size(x)), 'k', 'LineWidth', 1, 'DisplayName', '1/2');&lt;br /&gt;
hold on;&lt;br /&gt;
&lt;br /&gt;
% Pintamos cos(n*pi*x) y sin(n*pi*x) para n = 1 hasta n_max&lt;br /&gt;
for n = 1:n_max&lt;br /&gt;
    % Definimos las funciones&lt;br /&gt;
    f_cos = cos(n * pi * x);&lt;br /&gt;
    f_sin = sin(n * pi * x);&lt;br /&gt;
    &lt;br /&gt;
    plot(x, f_cos, 'LineWidth', 1, 'DisplayName', sprintf('cos(%d\\pi x)', n));&lt;br /&gt;
    &lt;br /&gt;
    plot(x, f_sin,'--', 'LineWidth', 1, 'DisplayName', sprintf('sin(%d\\pi x)', n));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Ponemos leyenda en la gráfica&lt;br /&gt;
title(sprintf('Base \\{1/2, cos(n\\pi x), sin(n\\pi x)\\} para n = 1 ... %d', n_max));&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('Valor de la función');&lt;br /&gt;
legend('show', 'Location', 'BestOutside'); &lt;br /&gt;
grid on;&lt;br /&gt;
axis([-1 1 -1.5 1.5]);&lt;br /&gt;
&lt;br /&gt;
hold off;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center; margin-top: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;display: inline-block; margin-right: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
    [[Archivo:EJ1_SENO_ACIRV.png|400px|none|Seno]]&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
    [[Archivo:EJ1_COSENO_ACIRV.png|400px|none|Coseno]]&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
    [[Archivo:EJ1_1_2_ACIRV.jpeg|400px|none|Coseno]]&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Aproximación de una función continua=&lt;br /&gt;
Vamos a aproximar la función \( f(x) = 1 - 2 \left| \frac{1}{2} - x \right| \). &lt;br /&gt;
&lt;br /&gt;
En primer lugar, extendemos de forma impar la función al intervalo simétrico \([-1,1]\). Obtenemos entonces \( f_{\text{ext}}(x) = \operatorname{sign}(x) \cdot \left(1 - 2 \left| \frac{1}{2} - |x| \right| \right).  \) Es decir,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
f_{\text{ext}}(x) =&lt;br /&gt;
\begin{cases} &lt;br /&gt;
-(1 - 2 | \frac{1}{2} - |x| |), &amp;amp; \text{si } x \in [-1,0) \\ &lt;br /&gt;
1 - 2 \left| \frac{1}{2} - x \right|, &amp;amp; \text{si } x \in [0,1].&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora debemos comprobar que la función es continua. En el dominio \( [-1,0) \cup (0,1] \), es continua por estar definida como una función continua.  &lt;br /&gt;
Falta por ver que es continua en \( x = 0 \): \( f_{\text{ext}}(0) = 0. \)&lt;br /&gt;
&lt;br /&gt;
Calculamos los límites laterales: &amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \lim_{x \to 0^-} f_{\text{ext}}(x) = -1 + 1 = 0, \hspace{30px} \lim_{x \to 0^+} f_{\text{ext}}(x) = 1 - 1 = 0. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dado que los límites laterales coinciden con \( f_{\text{ext}}(0) \), concluimos que la función es continua en todos los puntos.  &lt;br /&gt;
&lt;br /&gt;
Ahora para la representación, con las fórmulas que hemos calculado arriba, calculamos los coeficientes de Fourier:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; d_0 = \int_{-1}^{1} f_{\text{ext}}(x) \frac{1}{2} \, dx , \hspace{30px} d_n = \int_{-1}^{1} f_{\text{ext}}(x) \cos(n\pi x) \, dx , \hspace{30px} c_n = \int_{-1}^{1} f_{\text{ext}}(x) \sin(n\pi x) \, dx . &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Como los coeficientes \( d_0 \) y \( d_n \) son integrales de una función impar sobre un intervalo simétrico, sabemos que se anulan. Por tanto, la función nos va a quedar como una combinación lineal de los coeficientes \( c_n \), es decir:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f_{\text{ext}}(x) \approx \sum_{n=1}^{\infty} c_n \sin(n\pi x). &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Definimos \( f_n(x) \) como la suma de los primeros \( n \) términos de la serie de Fourier:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f_{\text{ext}}(x) = \sum_{n=1}^{n} b_n \sin(n\pi x), \hspace{2mm} \text{con} \hspace{2mm} b_k = 2\int_{0}^{1} f(x)\sin{(k\pi x)} \,dx . &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A continuación, representamos gráficamente \( f(x) \) y \( f_n(x) \) para \( n=1,5,10 \).  &lt;br /&gt;
Nótese que aumentar el número de términos de la serie de Fourier permite aproximar mejor la función original. &lt;br /&gt;
Los coeficientes de Fourier se obtienen numéricamente resolviendo las integrales usando la fórmula del trapecio con una división bastante fina \( (10^{-3}) \) con la función \( trapz \) que proporciona MatLab.  &lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo= &lt;br /&gt;
%Escribimos la función original definida en el intervalo [0,1]:&lt;br /&gt;
f=@(x)1-2*abs(1/2-x);&lt;br /&gt;
%Modificamos la función para que sea impar en el intervalo [-1,1]&lt;br /&gt;
f_ext=@(x)sign(x).*(1-2*abs(1/2-abs(x)));&lt;br /&gt;
&lt;br /&gt;
%Graficamos la función estendida de forma impar&lt;br /&gt;
hold on&lt;br /&gt;
xx=linspace(-1,1,10000);&lt;br /&gt;
plot(xx,f_ext(xx))&lt;br /&gt;
%Modificamos los colores de las gráficas para que se vean mejor&lt;br /&gt;
newcolors = [0.83 0.14 0.14&lt;br /&gt;
             1.00 0.54 0.00&lt;br /&gt;
             0.47 0.25 0.80&lt;br /&gt;
             0.25 0.80 0.54];         &lt;br /&gt;
colororder(newcolors)&lt;br /&gt;
&lt;br /&gt;
%Ahora, vamos a calcular los coeficientes de la serie de Fourier empleando la fórmula del trapecio. &lt;br /&gt;
n=[1 5 10];&lt;br /&gt;
N=1000;                       %Número de puntos&lt;br /&gt;
a=0; b=1;                     %Extremos de los intervalos&lt;br /&gt;
h=(b-a)/N;                    %Tamaño de los intervalos&lt;br /&gt;
u=a:h:b;                      %Puntos de la partición&lt;br /&gt;
for i=1:length(n) &lt;br /&gt;
    SF=0&lt;br /&gt;
    for k=1:n(i)&lt;br /&gt;
        c_n=zeros(1,n(i));&lt;br /&gt;
        c=(2.*f(u).*sin(k.*pi.*u))';  %Función a integrar&lt;br /&gt;
        w=ones(N+1,1);                %Vector de pesos &lt;br /&gt;
        w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
        c_n(k)=h*w'*c;                %Coeficientes de la serie de Fourier&lt;br /&gt;
        SF=SF+c_n(k)*sin(k*pi*xx);    %Vamos calculando la propia serie&lt;br /&gt;
    end&lt;br /&gt;
    plot(xx,SF)                      %Graficamos la serie de Fourier para un n determinado&lt;br /&gt;
end&lt;br /&gt;
hold off&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Para hacer un estudio completo de las aproximaciones, vamos a representar el error de \( f_n(x) \) respecto a \( f(x) \) en función de \( n \).  &lt;br /&gt;
Para calcular este error, vamos a emplear tanto la norma \( L^2 \) como la del supremo o uniforme.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo= &lt;br /&gt;
a=0; b=1;                    &lt;br /&gt;
u_1=a:10^(-3):b; &lt;br /&gt;
N=length(u_1)-1;&lt;br /&gt;
h=(b-a)/N;&lt;br /&gt;
&lt;br /&gt;
%Definir la función f(x)&lt;br /&gt;
f = @(x) 1 - 2*abs(1/2 - x);&lt;br /&gt;
&lt;br /&gt;
% Pesos para la integración con la regla del trapecio&lt;br /&gt;
w=ones(N+1,1);              &lt;br /&gt;
w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
&lt;br /&gt;
% Inicialización de los errores&lt;br /&gt;
error1 = zeros(1,300);&lt;br /&gt;
error2 = zeros(1,300);&lt;br /&gt;
&lt;br /&gt;
for n=1:300&lt;br /&gt;
    f_n=zeros(1,N+1); % Aproximación con n términos&lt;br /&gt;
    for k=1:n&lt;br /&gt;
        g=(f(u_1).*sin(k*pi*u_1))'; &lt;br /&gt;
        a_k=2*h*w'*g; % Coeficiente de Fourier&lt;br /&gt;
        f_n=f_n+a_k*sin(k*pi*u_1); % Suma de términos&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    % Cálculo de errores&lt;br /&gt;
    g1=abs(f(u_1)-f_n).^2;&lt;br /&gt;
    error1(n)=(h*w'*g1')^(1/2); % Norma L^2&lt;br /&gt;
    error2(n)=max(abs(f(u_1)-f_n)); % Norma suprema&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Graficar errores con escala logarítmica en el eje y&lt;br /&gt;
nn=1:300;&lt;br /&gt;
hold on&lt;br /&gt;
plot(nn,error1,'b',LineWidth=1.5)&lt;br /&gt;
plot(nn,error2,'r',LineWidth=1.5)&lt;br /&gt;
xlabel('Valor de n')&lt;br /&gt;
ylabel('Error en escala logarítmica')&lt;br /&gt;
title('Errores en las normas L^2 y uniforme')&lt;br /&gt;
legend('Error en la norma $L^2$', 'Error en la norma uniforme')&lt;br /&gt;
grid on&lt;br /&gt;
set(gca, 'YScale', 'log') % Escala logarítmica en el eje y&lt;br /&gt;
ylim([1e-6 1]) % Límites del eje y&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Aproximación de una función discontinua=&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a aproximar la función \( f(x) = 1_{x \leq 1/4}(x) \).&lt;br /&gt;
&lt;br /&gt;
A diferencia del caso anterior, extendemos la función de forma par al intervalo \([-1,1]\), obteniendo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f_{\text{ext}}(x) = \begin{cases} 1, &amp;amp; \text{si } x \in [-\frac{1}{4}, \frac{1}{4}] \\ 0, &amp;amp; \text{si } x \in [-1,-\frac{1}{4}) \cup (\frac{1}{4},1]. \end{cases} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observamos que la función posee dos discontinuidades, en \( x = -\frac{1}{4} \) y \( x = \frac{1}{4} \). Sin embargo, por la condición de Dirichlet, puesto que el número de discontinuidades es finito y la función es monótona a trozos, podemos hacer su transformada de Fourier.&lt;br /&gt;
&lt;br /&gt;
Como en este caso la función es par, su serie de Fourier es una combinación lineal de \( \{\frac{1}{2}, cos(n\pi x)\}_{n\in\mathbf{N}} \). Los coeficientes \( c_n \) se anulan al ser la integral de una función impar sobre un intervalo simétrico:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f_{\text{ext}}(x) \approx d_0 +\sum^{\infty}_{n=1} d_ncos(n\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Al representar \( f(x) \) y \( f_{n}(x) \) para \( n=1, 5, 10 \), observamos que aparecen unas oscilaciones llamadas el fenómeno de Gibbs.&lt;br /&gt;
&lt;br /&gt;
{{matlab|codigo= &lt;br /&gt;
clear all&lt;br /&gt;
close all&lt;br /&gt;
F=@(x) 1.*(x&amp;lt;=1/4);&lt;br /&gt;
g=@(x) F(-x);&lt;br /&gt;
xx=linspace(-1,1,10000);&lt;br /&gt;
fplot(F,[0 1],'b','linewidth',1.5)&lt;br /&gt;
hold on&lt;br /&gt;
fplot(g,[-1 0],'b','linewidth',1.5)&lt;br /&gt;
%Modificamos los colores de las gráficas para que se vean mejor&lt;br /&gt;
newcolors = [0.83 0.14 0.14&lt;br /&gt;
             1.00 0.54 0.00&lt;br /&gt;
             0.47 0.25 0.80&lt;br /&gt;
             0.25 0.80 0.54];         &lt;br /&gt;
colororder(newcolors)&lt;br /&gt;
&lt;br /&gt;
%Ahora, vamos a calcular los coeficientes de la serie de Fourier empleando la fórmula del trapecio. &lt;br /&gt;
n=1:1:100;&lt;br /&gt;
N=1000;                       %Número de puntos&lt;br /&gt;
a=0; b=1;                     %Extremos de los intervalos&lt;br /&gt;
h=(b-a)/N;                    %Tamaño de los intervalos&lt;br /&gt;
u=a:h:b;                      %Puntos de la partición&lt;br /&gt;
w=ones(N+1,1);                %Vector de pesos &lt;br /&gt;
w(1)=1/2; w(N+1)=1/2;&lt;br /&gt;
d_0=0; d0=(2.F(u).(1/2))';&lt;br /&gt;
d_0=h*w'*d0;&lt;br /&gt;
SF=zeros(length(n),length(xx))+ones(length(n),length(xx))*d_0;&lt;br /&gt;
for i=1:length(n) &lt;br /&gt;
    for k=1:n(i)&lt;br /&gt;
        d_n=zeros(1,n(i));&lt;br /&gt;
        c=(2.*F(u).*cos(k.*pi.*u))';  %Función a integrar&lt;br /&gt;
        d_n(k)=h*w'*c;  %Coeficientes de la serie de Fourier&lt;br /&gt;
        SF(i,:)=SF(i,:)+d_n(k)*cos(k*pi*xx);    %Vamos calculando la propia serie&lt;br /&gt;
    end&lt;br /&gt;
    %plot(xx,SF(i,:))                      %Graficamos la serie de Fourier para un n determinado&lt;br /&gt;
end&lt;br /&gt;
SNs=zeros(1,length(xx));&lt;br /&gt;
for i=1:length(n)&lt;br /&gt;
    SNs=SNs+SF(i,:);&lt;br /&gt;
end&lt;br /&gt;
SN=1/(length(n)+1)*SNs;&lt;br /&gt;
plot(xx,SN)&lt;br /&gt;
hold off&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Para suavizarlas utilizamos las sumas de Cesàro:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; S_N = \frac{1}{n+1} \sum^{N}_{n=0}f_n(x). &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos representarlas gráficamente, observando también el comportamiento del error para N.&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP24/25]]&lt;/div&gt;</summary>
		<author><name>Violetalb</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Series_de_Fourier_(Grupo_ACIRV)&amp;diff=84063</id>
		<title>Series de Fourier (Grupo ACIRV)</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Series_de_Fourier_(Grupo_ACIRV)&amp;diff=84063"/>
				<updated>2025-02-14T14:53:55Z</updated>
		
		<summary type="html">&lt;p&gt;Violetalb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Series de Fourier (Grupo ACIRV). | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP24/25|2024-25]] | Ángela Sotelo Fernández, Carmen Doñoro Molina, Inés Torres Gómez, Rubén Gutiérrez Hernández, Violeta Luján Barrios.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Las series de Fourier constituyen una herramienta fundamental en el análisis matemático. Estas series, introducidas por Joseph Fourier en el siglo XIX, nos permiten representar funciones periódicas mediante una base de funciones trigonométricas.&lt;br /&gt;
&lt;br /&gt;
La idea es que cualquier función \( f(x) \) periódica con \( f\in L^2(-\pi,\pi) \) puede expresarse como:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f(x) = d_0 + \sum_{n=1}^{\infty} \left[ d_n \cos\left(\frac{2\pi n x}{T}\right) + c_n \sin\left(\frac{2\pi n x}{T}\right) \right] &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
donde los coeficientes \( d_n \) y \( c_n \) se obtienen mediante integrales que dependen de la función dada.&lt;br /&gt;
&lt;br /&gt;
=Base trigonométrica compleja=&lt;br /&gt;
La &amp;lt;b&amp;gt;base trigonométrica&amp;lt;/b&amp;gt; es una base del espacio &amp;lt;math&amp;gt;L^2([-\pi,\pi])&amp;lt;/math&amp;gt;, por lo que las funciones pertenecientes a este espacio pueden escribirse como una combinación lineal de los elementos de la base. A estas expresiones se les llama &amp;lt;b&amp;gt;series de Fourier&amp;lt;/b&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
Dado que es una base ortonormal, sus coeficientes pueden calcularse mediante integración, obteniendo las siguientes fórmulas:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;d_0 = \int_{-\pi}^{\pi} f(x) \frac{1}{2} \, dx , \hspace{30px} d_n = \int_{-\pi}^{\pi} f(x) \cos(n\pi x) \, dx , \hspace{30px} c_n = \int_{-\pi}^{\pi} f(x) \sin(n\pi x) \, dx . &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Utilizando el siguiente código en MATLAB, se pueden representar los 10 primeros elementos de la base en una gráfica:&lt;br /&gt;
{{matlab|codigo= &lt;br /&gt;
% Definimos la malla para pintar funciones del [-1,1]&lt;br /&gt;
x = linspace(-1, 1, 1000);  &lt;br /&gt;
n_max = 5;                  % Número de funciones a pintar para seno y coseno&lt;br /&gt;
&lt;br /&gt;
% Pintamos la gráfica de f = 1/2&lt;br /&gt;
figure;&lt;br /&gt;
plot(x, 1/2 * ones(size(x)), 'k', 'LineWidth', 1, 'DisplayName', '1/2');&lt;br /&gt;
hold on;&lt;br /&gt;
&lt;br /&gt;
% Pintamos cos(n*pi*x) y sin(n*pi*x) para n = 1 hasta n_max&lt;br /&gt;
for n = 1:n_max&lt;br /&gt;
    % Definimos las funciones&lt;br /&gt;
    f_cos = cos(n * pi * x);&lt;br /&gt;
    f_sin = sin(n * pi * x);&lt;br /&gt;
    &lt;br /&gt;
    plot(x, f_cos, 'LineWidth', 1, 'DisplayName', sprintf('cos(%d\\pi x)', n));&lt;br /&gt;
    &lt;br /&gt;
    plot(x, f_sin,'--', 'LineWidth', 1, 'DisplayName', sprintf('sin(%d\\pi x)', n));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Ponemos leyenda en la gráfica&lt;br /&gt;
title(sprintf('Base \\{1/2, cos(n\\pi x), sin(n\\pi x)\\} para n = 1 ... %d', n_max));&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('Valor de la función');&lt;br /&gt;
legend('show', 'Location', 'BestOutside'); &lt;br /&gt;
grid on;&lt;br /&gt;
axis([-1 1 -1.5 1.5]);&lt;br /&gt;
&lt;br /&gt;
hold off;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center; margin-top: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;display: inline-block; margin-right: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
    [[Archivo:EJ1_SENO_ACIRV.png|400px|none|Seno]]&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
    [[Archivo:EJ1_COSENO_ACIRV.png|400px|none|Coseno]]&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
    [[Archivo:EJ1_1_2_ACIRV.jpeg|400px|none|Coseno]]&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Aproximación de una función continua=&lt;br /&gt;
Vamos a aproximar la función \( f(x) = 1 - 2 \left| \frac{1}{2} - x \right| \). &lt;br /&gt;
&lt;br /&gt;
En primer lugar, extendemos de forma impar la función al intervalo simétrico \([-1,1]\). Obtenemos entonces \( f_{\text{ext}}(x) = \operatorname{sign}(x) \cdot \left(1 - 2 \left| \frac{1}{2} - |x| \right| \right).  \) Es decir,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
f_{\text{ext}}(x) =&lt;br /&gt;
\begin{cases} &lt;br /&gt;
-(1 - 2 | \frac{1}{2} - |x| |), &amp;amp; \text{si } x \in [-1,0) \\ &lt;br /&gt;
1 - 2 \left| \frac{1}{2} - x \right|, &amp;amp; \text{si } x \in [0,1].&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora debemos comprobar que la función es continua. En el dominio \( [-1,0) \cup (0,1] \), es continua por estar definida como una función continua.  &lt;br /&gt;
Falta por ver que es continua en \( x = 0 \): \( f_{\text{ext}}(0) = 0. \)&lt;br /&gt;
&lt;br /&gt;
Calculamos los límites laterales: &amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \lim_{x \to 0^-} f_{\text{ext}}(x) = -1 + 1 = 0, \hspace{30px} \lim_{x \to 0^+} f_{\text{ext}}(x) = 1 - 1 = 0. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dado que los límites laterales coinciden con \( f_{\text{ext}}(0) \), concluimos que la función es continua en todos los puntos.  &lt;br /&gt;
&lt;br /&gt;
Ahora para la representación, con las fórmulas que hemos calculado arriba, calculamos los coeficientes de Fourier:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; d_0 = \int_{-1}^{1} f_{\text{ext}}(x) \frac{1}{2} \, dx , \hspace{30px} d_n = \int_{-1}^{1} f_{\text{ext}}(x) \cos(n\pi x) \, dx , \hspace{30px} c_n = \int_{-1}^{1} f_{\text{ext}}(x) \sin(n\pi x) \, dx . &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Como los coeficientes \( d_0 \) y \( d_n \) son integrales de una función impar sobre un intervalo simétrico, sabemos que se anulan. Por tanto, la función nos va a quedar como una combinación lineal de los coeficientes \( c_n \), es decir:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f_{\text{ext}}(x) \approx \sum_{n=1}^{\infty} c_n \sin(n\pi x). &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Definimos \( f_n(x) \) como la suma de los primeros \( n \) términos de la serie de Fourier:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f_{\text{ext}}(x) = \sum_{n=1}^{n} b_n \sin(n\pi x), \hspace{2mm} \text{con} \hspace{2mm} b_k = 2\int_{0}^{1} f(x)\sin{(k\pi x)} \,dx . &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A continuación, representamos gráficamente \( f(x) \) y \( f_n(x) \) para \( n=1,5,10 \).  &lt;br /&gt;
Nótese que aumentar el número de términos de la serie de Fourier permite aproximar mejor la función original. &lt;br /&gt;
Los coeficientes de Fourier se obtienen numéricamente resolviendo las integrales usando la fórmula del trapecio con una división bastante fina \( (10^{-3}) \) con la función \( trapz \) que proporciona MatLab.  &lt;br /&gt;
&lt;br /&gt;
Para hacer un estudio completo de las aproximaciones, vamos a representar el error de \( f_n(x) \) respecto a \( f(x) \) en función de \( n \).  &lt;br /&gt;
Para calcular este error, vamos a emplear tanto la norma \( L^2 \) como la del supremo o uniforme.&lt;br /&gt;
&lt;br /&gt;
=Aproximación de una función discontinua=&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a aproximar la función \( f(x) = 1_{x \leq 1/4}(x) \).&lt;br /&gt;
&lt;br /&gt;
A diferencia del caso anterior, extendemos la función de forma par al intervalo \([-1,1]\), obteniendo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f_{\text{ext}}(x) = \begin{cases} 1, &amp;amp; \text{si } x \in [-\frac{1}{4}, \frac{1}{4}] \\ 0, &amp;amp; \text{si } x \in [-1,-\frac{1}{4}) \cup (\frac{1}{4},1]. \end{cases} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observamos que la función posee dos discontinuidades, en \( x = -\frac{1}{4} \) y \( x = \frac{1}{4} \). Sin embargo, por la condición de Dirichlet, puesto que el número de discontinuidades es finito y la función es monótona a trozos, podemos hacer su transformada de Fourier.&lt;br /&gt;
&lt;br /&gt;
Como en este caso la función es par, su serie de Fourier es una combinación lineal de \( \{\frac{1}{2}, cos(n\pi x)\}_{n\in\mathbf{N}} \). Los coeficientes \( c_n \) se anulan al ser la integral de una función impar sobre un intervalo simétrico:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f_{\text{ext}}(x) \approx d_0 +\sum^{\infty}_{n=1} d_ncos(n\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Al representar \( f(x) \) y \( f_{n}(x) \) para \( n=1, 5, 10 \), observamos que aparecen unas oscilaciones llamadas el fenómeno de Gibbs. Para suavizarlas utilizamos las sumas de Cesàro:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; S_N = \frac{1}{n+1} \sum^{N}_{n=0}f_n(x). &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos representarlas gráficamente, observando también el comportamiento del error para N.&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP24/25]]&lt;/div&gt;</summary>
		<author><name>Violetalb</name></author>	</entry>

	<entry>
		<id>https://mat.caminos.upm.es/w/index.php?title=Series_de_Fourier_(Grupo_ACIRV)&amp;diff=84062</id>
		<title>Series de Fourier (Grupo ACIRV)</title>
		<link rel="alternate" type="text/html" href="https://mat.caminos.upm.es/w/index.php?title=Series_de_Fourier_(Grupo_ACIRV)&amp;diff=84062"/>
				<updated>2025-02-14T14:47:48Z</updated>
		
		<summary type="html">&lt;p&gt;Violetalb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ TrabajoED | Series de Fourier (Grupo ACIRV). | [[:Categoría:EDP|EDP]]|[[:Categoría:EDP24/25|2024-25]] | Ángela Sotelo Fernández, Carmen Doñoro Molina, Inés Torres Gómez, Rubén Gutiérrez Hernández, Violeta Luján Barrios.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Base trigonométrica compleja=&lt;br /&gt;
La &amp;lt;b&amp;gt;base trigonométrica&amp;lt;/b&amp;gt; es una base del espacio &amp;lt;math&amp;gt;L^2([-\pi,\pi])&amp;lt;/math&amp;gt;, por lo que las funciones pertenecientes a este espacio pueden escribirse como una combinación lineal de los elementos de la base. A estas expresiones se les llama &amp;lt;b&amp;gt;series de Fourier&amp;lt;/b&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
Dado que es una base ortonormal, sus coeficientes pueden calcularse mediante integración, obteniendo las siguientes fórmulas:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;d_0 = \int_{-\pi}^{\pi} f(x) \frac{1}{2} \, dx , \hspace{30px} d_n = \int_{-\pi}^{\pi} f(x) \cos(n\pi x) \, dx , \hspace{30px} c_n = \int_{-\pi}^{\pi} f(x) \sin(n\pi x) \, dx . &amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Utilizando el siguiente código en MATLAB, se pueden representar los 10 primeros elementos de la base en una gráfica:&lt;br /&gt;
{{matlab|codigo= &lt;br /&gt;
% Definimos la malla para pintar funciones del [-1,1]&lt;br /&gt;
x = linspace(-1, 1, 1000);  &lt;br /&gt;
n_max = 5;                  % Número de funciones a pintar para seno y coseno&lt;br /&gt;
&lt;br /&gt;
% Pintamos la gráfica de f = 1/2&lt;br /&gt;
figure;&lt;br /&gt;
plot(x, 1/2 * ones(size(x)), 'k', 'LineWidth', 1, 'DisplayName', '1/2');&lt;br /&gt;
hold on;&lt;br /&gt;
&lt;br /&gt;
% Pintamos cos(n*pi*x) y sin(n*pi*x) para n = 1 hasta n_max&lt;br /&gt;
for n = 1:n_max&lt;br /&gt;
    % Definimos las funciones&lt;br /&gt;
    f_cos = cos(n * pi * x);&lt;br /&gt;
    f_sin = sin(n * pi * x);&lt;br /&gt;
    &lt;br /&gt;
    plot(x, f_cos, 'LineWidth', 1, 'DisplayName', sprintf('cos(%d\\pi x)', n));&lt;br /&gt;
    &lt;br /&gt;
    plot(x, f_sin,'--', 'LineWidth', 1, 'DisplayName', sprintf('sin(%d\\pi x)', n));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
% Ponemos leyenda en la gráfica&lt;br /&gt;
title(sprintf('Base \\{1/2, cos(n\\pi x), sin(n\\pi x)\\} para n = 1 ... %d', n_max));&lt;br /&gt;
xlabel('x');&lt;br /&gt;
ylabel('Valor de la función');&lt;br /&gt;
legend('show', 'Location', 'BestOutside'); &lt;br /&gt;
grid on;&lt;br /&gt;
axis([-1 1 -1.5 1.5]);&lt;br /&gt;
&lt;br /&gt;
hold off;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center; margin-top: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;display: inline-block; margin-right: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
    [[Archivo:EJ1_SENO_ACIRV.png|400px|none|Seno]]&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
    [[Archivo:EJ1_COSENO_ACIRV.png|400px|none|Coseno]]&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
    [[Archivo:EJ1_1_2_ACIRV.jpeg|400px|none|Coseno]]&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Aproximación de una función continua=&lt;br /&gt;
Vamos a aproximar la función \( f(x) = 1 - 2 \left| \frac{1}{2} - x \right| \). &lt;br /&gt;
&lt;br /&gt;
En primer lugar, extendemos de forma impar la función al intervalo simétrico \([-1,1]\). Obtenemos entonces \( f_{\text{ext}}(x) = \operatorname{sign}(x) \cdot \left(1 - 2 \left| \frac{1}{2} - |x| \right| \right).  \) Es decir,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;&lt;br /&gt;
f_{\text{ext}}(x) =&lt;br /&gt;
\begin{cases} &lt;br /&gt;
-(1 - 2 | \frac{1}{2} - |x| |), &amp;amp; \text{si } x \in [-1,0) \\ &lt;br /&gt;
1 - 2 \left| \frac{1}{2} - x \right|, &amp;amp; \text{si } x \in [0,1].&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora debemos comprobar que la función es continua. En el dominio \( [-1,0) \cup (0,1] \), es continua por estar definida como una función continua.  &lt;br /&gt;
Falta por ver que es continua en \( x = 0 \): \( f_{\text{ext}}(0) = 0. \)&lt;br /&gt;
&lt;br /&gt;
Calculamos los límites laterales: &amp;lt;center&amp;gt; &amp;lt;math&amp;gt; \lim_{x \to 0^-} f_{\text{ext}}(x) = -1 + 1 = 0, \hspace{30px} \lim_{x \to 0^+} f_{\text{ext}}(x) = 1 - 1 = 0. &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dado que los límites laterales coinciden con \( f_{\text{ext}}(0) \), concluimos que la función es continua en todos los puntos.  &lt;br /&gt;
&lt;br /&gt;
Ahora para la representación, con las fórmulas que hemos calculado arriba, calculamos los coeficientes de Fourier:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; d_0 = \int_{-1}^{1} f_{\text{ext}}(x) \frac{1}{2} \, dx , \hspace{30px} d_n = \int_{-1}^{1} f_{\text{ext}}(x) \cos(n\pi x) \, dx , \hspace{30px} c_n = \int_{-1}^{1} f_{\text{ext}}(x) \sin(n\pi x) \, dx . &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Como los coeficientes \( d_0 \) y \( d_n \) son integrales de una función impar sobre un intervalo simétrico, sabemos que se anulan. Por tanto, la función nos va a quedar como una combinación lineal de los coeficientes \( c_n \), es decir:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f_{\text{ext}}(x) \approx \sum_{n=1}^{\infty} c_n \sin(n\pi x). &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Definimos \( f_n(x) \) como la suma de los primeros \( n \) términos de la serie de Fourier:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f_{\text{ext}}(x) = \sum_{n=1}^{n} b_n \sin(n\pi x), \hspace{2mm} \text{con} \hspace{2mm} b_k = 2\int_{0}^{1} f(x)\sin{(k\pi x)} \,dx . &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A continuación, representamos gráficamente \( f(x) \) y \( f_n(x) \) para \( n=1,5,10 \).  &lt;br /&gt;
Nótese que aumentar el número de términos de la serie de Fourier permite aproximar mejor la función original. &lt;br /&gt;
Los coeficientes de Fourier se obtienen numéricamente resolviendo las integrales usando la fórmula del trapecio con una división bastante fina \( (10^{-3}) \) con la función \( trapz \) que proporciona MatLab.  &lt;br /&gt;
&lt;br /&gt;
Para hacer un estudio completo de las aproximaciones, vamos a representar el error de \( f_n(x) \) respecto a \( f(x) \) en función de \( n \).  &lt;br /&gt;
Para calcular este error, vamos a emplear tanto la norma \( L^2 \) como la del supremo o uniforme.&lt;br /&gt;
&lt;br /&gt;
=Aproximación de una función discontinua=&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a aproximar la función \( f(x) = 1_{x \leq 1/4}(x) \).&lt;br /&gt;
&lt;br /&gt;
A diferencia del caso anterior, extendemos la función de forma par al intervalo \([-1,1]\), obteniendo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f_{\text{ext}}(x) = \begin{cases} 1, &amp;amp; \text{si } x \in [-\frac{1}{4}, \frac{1}{4}] \\ 0, &amp;amp; \text{si } x \in [-1,-\frac{1}{4}) \cup (\frac{1}{4},1]. \end{cases} &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Observamos que la función posee dos discontinuidades, en \( x = -\frac{1}{4} \) y \( x = \frac{1}{4} \). Sin embargo, por la condición de Dirichlet, puesto que el número de discontinuidades es finito y la función es monótona a trozos, podemos hacer su transformada de Fourier.&lt;br /&gt;
&lt;br /&gt;
Como en este caso la función es par, su serie de Fourier es una combinación lineal de \( \{\frac{1}{2}, cos(n\pi x)\}_{n\in\mathbf{N}} \). Los coeficientes \( c_n \) se anulan al ser la integral de una función impar sobre un intervalo simétrico:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; f_{\text{ext}}(x) \approx d_0 +\sum^{\infty}_{n=1} d_ncos(n\pi x) &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Al representar \( f(x) \) y \( f_{n}(x) \) para \( n=1, 5, 10 \), observamos que aparecen unas oscilaciones llamadas el fenómeno de Gibbs. Para suavizarlas utilizamos las sumas de Cesàro:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; &amp;lt;math&amp;gt; S_N = \frac{1}{n+1} \sum^{N}_{n=0}f_n(x). &amp;lt;/math&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos representarlas gráficamente, observando también el comportamiento del error para N.&lt;br /&gt;
&lt;br /&gt;
[[Categoría:EDP]]&lt;br /&gt;
[[Categoría:EDP24/25]]&lt;/div&gt;</summary>
		<author><name>Violetalb</name></author>	</entry>

	</feed>