Diferencia entre revisiones de «Series de Fourier NAA»

De MateWiki
Saltar a: navegación, buscar
Línea 6: Línea 6:
  
  
 +
Código para representar aproximación por serie de Fourier.
  
 
<source lang="matlab" line>
 
<source lang="matlab" line>
Línea 12: Línea 13:
  
 
% Dominio
 
% Dominio
x = linspace(-pi, pi, 2000);
+
x = linspace(-pi, pi, 1000);
  
 
% Onda cuadrada original
 
% Onda cuadrada original
 
f = sign(sin(x));
 
f = sign(sin(x));
 
% Número de términos
 
k= [1 5 10 20 50 100];  % prueba 20, 50, 100...
 
colores = {'r', 'b', 'g', 'y', 'm', 'c'};
 
 
 
figure
 
figure
subplot(2,1,1)
 
 
plot(x, f, 'k')
 
plot(x, f, 'k')
 
hold on
 
hold on
 +
% Número de términos de Fourier
 +
N = [1 5 10 20 50 100];
 +
colores = {'r', 'b', 'g', 'y', 'm', 'c'};
  
for i=1:length(k)
 
    % Inicializar suma de Cesàro
 
    cesaro = zeros(size(x));
 
  
     % Construcción (solo impares)
+
for i=1:length(N)
     for n = 1:2:(2*k(i)-1)
+
     % Inicializar aproximación
         weight = 1 - (n/(2*k(i)));  % factor de Cesàro
+
    fourier = zeros(size(x));
        cesaro = cesaro + weight*(1/n)*sin(n*x);
+
    % Construcción de la serie
 +
     for n = 1:2:(2*N(i)-1)
 +
         fourier = fourier + (1/n)*sin(n*x);
 
     end
 
     end
  
     cesaro = (4/pi)*cesaro;
+
     fourier = (4/pi) * fourier;
 
      
 
      
    % Error puntual
+
  % Graficar fourier con N distinto
    E = abs(f - cesaro);
+
     plot(x, fourier, colores{i})
    subplot(2,1,1)
+
     plot(x, cesaro, colores{i})
+
 
     grid on
 
     grid on
     subplot(2,1,2)
+
      
    plot(x, E, colores{i})
+
 
+
 
end
 
end
legend('f(x)', 'k=1', 'k=5', 'k=10', 'k=20', 'k=50', 'k=100')
+
legend('f(x)', 'N=1', 'N=5', 'N=10', 'N=20', 'N=50', 'N=100')
 +
 
 
</source>
 
</source>
  
hola
+
Código para representar error con Fourier.
  
 
<source lang="matlab" line>
 
<source lang="matlab" line>
Línea 64: Línea 58:
  
 
% Número de términos de Fourier
 
% Número de términos de Fourier
k = [1 5 10 20 50 100];
+
N = [1 5 10 20 50 100];
error_norma2 = zeros(size(k));  % Guardar errores
+
error_norma2 = zeros(size(N));  % Guardar errores
  
for i = 1:length(k)
+
for i = 1:length(N)
 
     % Inicializar aproximación
 
     % Inicializar aproximación
 
     fourier = zeros(size(x));
 
     fourier = zeros(size(x));
 
      
 
      
 
     % Construcción de la serie (solo impares)
 
     % Construcción de la serie (solo impares)
     for n = 1:2:(2*k(i)-1)
+
     for n = 1:2:(2*N(i)-1)
 
         fourier = fourier + (1/n) * sin(n*x);
 
         fourier = fourier + (1/n) * sin(n*x);
 
     end
 
     end
Línea 91: Línea 85:
 
grid on
 
grid on
 
title('Error en norma L^2 de la aproximación de Fourier')
 
title('Error en norma L^2 de la aproximación de Fourier')
xlabel('Número de términos (k)')
+
xlabel('Número de términos (N)')
ylabel('||f - S_k||_2')
+
ylabel('||f - S_N||_2')
xlim([0, max(k)+5])
+
xlim([0, max(N)+5])
 +
</source>
  
 +
Código para representar las aproximaciones con Cesàro.
 +
<source lang="matlab" line>
 +
clear; clc; close all;
  
 +
% Dominio
 +
x = linspace(-pi, pi, 2000);
  
 +
% Onda cuadrada original
 +
f = sign(sin(x));
 +
 +
% Número de términos
 +
N= [1 5 10 20 50 100];  % prueba 20, 50, 100...
 +
colores = {'r', 'b', 'g', 'y', 'm', 'c'};
 +
 +
figure
 +
plot(x, f, 'k')
 +
hold on
 +
 +
for i=1:length(N)
 +
    % Inicializar suma de Cesàro
 +
    cesaro = zeros(size(x));
 +
 +
    % Construcción (solo impares)
 +
    for n = 1:2:(2*N(i)-1)
 +
        weight = 1 - (n/(2*N(i)));  % factor de Cesàro
 +
        cesaro = cesaro + weight*(1/n)*sin(n*x);
 +
    end
 +
 +
    cesaro = (4/pi)*cesaro;
 +
   
 +
 
 +
    plot(x, cesaro, colores{i})
 +
    grid on
 +
   
 +
end
 +
legend('f(x)', 'N=1', 'N=5', 'N=10', 'N=20', 'N=50', 'N=100')
 +
</source>
 +
 +
Código para error con Cesàro.
 +
 +
<source lang="matlab" line>
 
clear; clc; close all;
 
clear; clc; close all;
  
 
% Dominio
 
% Dominio
x = linspace(-pi, pi, 10000);  
+
x = linspace(-pi, pi, 10000); % Más puntos para mejor precisión
 +
 
 
% Onda cuadrada original
 
% Onda cuadrada original
 
f = sign(sin(x));
 
f = sign(sin(x));
  
% Valores de k
+
% Valores de N
k = [1 5 10 20 50 100];
+
N = [1 5 10 20 50 100];
error_norma2 = zeros(size(k));  % Guardar errores
+
error_norma2 = zeros(size(N));  % Guardar errores
  
for i = 1:length(k)
+
for i = 1:length(N)
  
 
     % Inicializar suma de Cesàro
 
     % Inicializar suma de Cesàro
Línea 114: Línea 149:
  
 
     % Construcción (solo impares)
 
     % Construcción (solo impares)
     for n = 1:2:(2*k(i)-1)
+
     for n = 1:2:(2*N(i)-1)
         weight = 1 - (n/(2*k(i)));
+
         weight = 1 - (n/(2*N(i)));
 
         cesaro = cesaro + weight*(1/n)*sin(n*x);
 
         cesaro = cesaro + weight*(1/n)*sin(n*x);
 
     end
 
     end
Línea 134: Línea 169:
 
grid on
 
grid on
 
title('Error en norma L^2 - Suma de Cesàro')
 
title('Error en norma L^2 - Suma de Cesàro')
xlabel('Número de términos (k)')
+
xlabel('Número de términos (N)')
ylabel('||f - \sigma_k||_2')
+
ylabel('||f - \sigma_N||_2')
xlim([0, max(k)+5])
+
xlim([0, max(N)+5])
 
+
 
</source>
 
</source>
 
 
[[Categoría:EDP]]
 
[[Categoría:EDP]]
 
[[Categoría:EDP25/26]]
 
[[Categoría:EDP25/26]]

Revisión del 22:38 18 feb 2026

Trabajo realizado por estudiantes
Título Series de Fourier. Grupo NAA
Asignatura EDP
Curso 2025-26
Autores Natalia Gutiérrez de Uriarte

Alba Peralta Zamora

Ainhoa Martín García

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


Código para representar aproximación por serie de Fourier.

clear; clc; close all;

% Dominio
x = linspace(-pi, pi, 1000);

% Onda cuadrada original
f = sign(sin(x));
figure
plot(x, f, 'k')
hold on
% Número de términos de Fourier
N = [1 5 10 20 50 100];
colores = {'r', 'b', 'g', 'y', 'm', 'c'};


for i=1:length(N)
    % Inicializar aproximación
    fourier = zeros(size(x));
    % Construcción de la serie
    for n = 1:2:(2*N(i)-1)
        fourier = fourier + (1/n)*sin(n*x);
    end

    fourier = (4/pi) * fourier;
    
   % Graficar fourier con N distinto
    plot(x, fourier, colores{i})
    grid on
    
end
legend('f(x)', 'N=1', 'N=5', 'N=10', 'N=20', 'N=50', 'N=100')

Código para representar error con Fourier.

%error en L2

clear; clc; close all;

% Dominio
x = linspace(-pi, pi, 10000);  % Más puntos para mejor precisión

% Onda cuadrada original
f = sign(sin(x));

% Número de términos de Fourier
N = [1 5 10 20 50 100];
error_norma2 = zeros(size(N));  % Guardar errores

for i = 1:length(N)
    % Inicializar aproximación
    fourier = zeros(size(x));
    
    % Construcción de la serie (solo impares)
    for n = 1:2:(2*N(i)-1)
        fourier = fourier + (1/n) * sin(n*x);
    end

    fourier = (4/pi) * fourier;
    
    % Calcular error norma L²
    diferencia = f - fourier;
    norma2 = sqrt((1/(2*pi)) * trapz(x, diferencia.^2));
    
    % Guardar el error
    error_norma2(i) = norma2;
end

% Gráfica del error en norma L²
figure
plot(k, error_norma2, 'bo-', 'LineWidth', 2, 'MarkerSize', 8)
grid on
title('Error en norma L^2 de la aproximación de Fourier')
xlabel('Número de términos (N)')
ylabel('||f - S_N||_2')
xlim([0, max(N)+5])

Código para representar las aproximaciones con Cesàro.

clear; clc; close all;

% Dominio
x = linspace(-pi, pi, 2000);

% Onda cuadrada original
f = sign(sin(x));

% Número de términos
 N= [1 5 10 20 50 100];   % prueba 20, 50, 100...
colores = {'r', 'b', 'g', 'y', 'm', 'c'};

figure
plot(x, f, 'k')
hold on

for i=1:length(N)
    % Inicializar suma de Cesàro
    cesaro = zeros(size(x));

    % Construcción (solo impares)
    for n = 1:2:(2*N(i)-1)
        weight = 1 - (n/(2*N(i)));   % factor de Cesàro
        cesaro = cesaro + weight*(1/n)*sin(n*x);
    end

    cesaro = (4/pi)*cesaro;
    
   
    plot(x, cesaro, colores{i})
    grid on
    
end
legend('f(x)', 'N=1', 'N=5', 'N=10', 'N=20', 'N=50', 'N=100')

Código para error con Cesàro.

clear; clc; close all;

% Dominio
x = linspace(-pi, pi, 10000);  % Más puntos para mejor precisión

% Onda cuadrada original
f = sign(sin(x));

% Valores de N
N = [1 5 10 20 50 100];
error_norma2 = zeros(size(N));  % Guardar errores

for i = 1:length(N)

    % Inicializar suma de Cesàro
    cesaro = zeros(size(x));

    % Construcción (solo impares)
    for n = 1:2:(2*N(i)-1)
        weight = 1 - (n/(2*N(i)));
        cesaro = cesaro + weight*(1/n)*sin(n*x);
    end

    cesaro = (4/pi)*cesaro;

    % Calcular error norma L²
    diferencia = f - cesaro;
    norma2 = sqrt((1/(2*pi)) * trapz(x, diferencia.^2));
    
    % Guardar el error
    error_norma2(i) = norma2;
end

% Gráfica del error en norma L²
figure
plot(k, error_norma2, 'bo-', 'LineWidth', 2, 'MarkerSize', 8)
grid on
title('Error en norma L^2 - Suma de Cesàro')
xlabel('Número de términos (N)')
ylabel('||f - \sigma_N||_2')
xlim([0, max(N)+5])