Diferencia entre revisiones de «Series de Fourier (Grupo 2 1/2)»

De MateWiki
Saltar a: navegación, buscar
Línea 59: Línea 59:
 
{{matlab|codigo=
 
{{matlab|codigo=
  
% Escribe aquí tu código
+
clc
 +
clear
 +
format long
 +
close all
 +
 
 +
g = @(x) (x > 0 & x < 0.5);
 +
% Definir la función a integrar
 +
funa = @(x, n) sin(pi * n * x);
 +
funb = @(x, n) cos(pi * n * x);
 +
func = @(x, n) cos(pi * n * x).^2;
 +
fund = @(x, n) sin(pi * n * x).^2;
 +
% Definir los límites de integración
 +
a = -1; %A pesar de ser [-1,1], fuera de [-1/2,1/2] toma el valor 0
 +
b = 1;
 +
xx= -1/2:10^(-3):1/2;
 +
xxx= -1:10^(-3):1;
 +
 
 +
% Tolerancia para el método del trapecio adaptativo
 +
tolerancia = 1e-10;
 +
%numero de términos
 +
i=10;
 +
 
 +
% Inicializar un vector para almacenar los resultados
 +
ak = zeros(i, 1); %coeficientes del seno
 +
bk = zeros(i, 1); %coeficientes del coseno
 +
 
 +
 
 +
% Calcular las integrales para n desde 1 hasta i usando el método del trapecio adaptativo
 +
for n = 1:i
 +
    ak(n) = trapz(xx,funa(xx,n))/trapz(xxx,fund(xxx,n));
 +
    bk(n) = trapz(xx,funb(xx,n))/trapz(xxx,func(xxx,n));
 +
end
 +
a0= 1; %coeficiente de Fourier dado por 1/2
 +
%Serie de fourier hasta n=i
 +
fn = @(x) a0/2;
 +
%Sumas de Cesarò
 +
Sn = @(x) fn(x);
 +
for n=1:i
 +
    fn = @(x) bk(n) * cos(n*pi*x) + fn(x);
 +
    Sn = @(x)fn(x) + Sn(x);
 +
    Snaux=@(x) 1/(n+1) * (Sn(x));
 +
    abs_diffn = @(x) abs(g(x) - Snaux(x)).^2;
 +
    integral_result(n) = sqrt(integral(abs_diffn, 0, 1));
 +
    abs_diffneg = @(x) -abs(g(x) - Snaux(x));
 +
    [supremo(n), x_supremo(n)] = fminbnd(abs_diffneg, 0, 1);
 +
end
 +
Sn = @(x) 1/(i+1) * (Sn(x));
 +
 
 +
% Definir la función
 +
x = linspace(0, 1, 100000); % Generar 100 puntos en el rango [0, 1]
 +
 
 +
% Trazar la función
 +
hold on
 +
plot(x, fn(x))
 +
plot(x,g(x)) %gráfica de la función característica
 +
xlabel('x'); % Etiqueta del eje x
 +
ylabel('f(x)'); % Etiqueta del eje y
 +
title('Gráfico fn'); % Título del gráfico
 +
grid on; % Activar la cuadrícula
 +
hold off
 +
 
 +
% Mostrar los resultados
 +
disp('Resultados para coefs del seno usando el método del trapecio:');
 +
disp(ak);
 +
disp('Resultados para coefs del coseno usando el método del trapecio:');
 +
disp(bk);
 +
 
 +
%Vemos que se produce el llamado "fenómeno de Gibbs" por lo que definimos
 +
%otra función usando las sumas de Cesarò
 +
 
 +
figure
 +
 
 +
hold on
 +
plot(x, Sn(x))
 +
plot(x,g(x)) %gráfica de la función característica
 +
xlabel('x'); % Etiqueta del eje x
 +
ylabel('f(x)'); % Etiqueta del eje y
 +
title('Gráfico Sn'); % Título del gráfico
 +
grid on; % Activar la cuadrícula
 +
hold off
 +
 
 +
N=zeros(i);
 +
for n=1:i
 +
    N(n)=n;
 +
end
 +
 
 +
figure
 +
 
 +
hold on
 +
plot(N, (integral_result))
 +
plot(N,(abs(x_supremo)))
 +
xlabel('n'); % Etiqueta del eje x
 +
ylabel('error'); % Etiqueta del eje y
 +
title('Gráfico fn'); % Título del gráfico
 +
grid on; % Activar la cuadrícula
 +
hold off
 +
 
  
 
}}
 
}}
Línea 67: Línea 163:
 
{{matlab|codigo=
 
{{matlab|codigo=
  
% Escribe aquí tu código
+
clc
 +
clear
 +
format long
 +
close all
 +
 
 +
g = @(x) (x > 0 & x < 0.5);
 +
% Definir la función a integrar
 +
funa = @(x, n) sin(pi * n * x);
 +
funb = @(x, n) cos(pi * n * x);
 +
func = @(x, n) cos(pi * n * x).^2;
 +
fund = @(x, n) sin(pi * n * x).^2;
 +
% Definir los límites de integración
 +
a = -1; %A pesar de ser [-1,1], fuera de [-1/2,1/2] toma el valor 0
 +
b = 1;
 +
xx= -1/2:10^(-3):1/2;
 +
xxx= -1:10^(-3):1;
 +
 
 +
% Tolerancia para el método del trapecio adaptativo
 +
tolerancia = 1e-10;
 +
%numero de términos
 +
i=10;
 +
 
 +
% Inicializar un vector para almacenar los resultados
 +
ak = zeros(i, 1); %coeficientes del seno
 +
bk = zeros(i, 1); %coeficientes del coseno
 +
 
 +
 
 +
% Calcular las integrales para n desde 1 hasta i usando el método del trapecio adaptativo
 +
for n = 1:i
 +
    ak(n) = trapz(xx,funa(xx,n))/trapz(xxx,fund(xxx,n));
 +
    bk(n) = trapz(xx,funb(xx,n))/trapz(xxx,func(xxx,n));
 +
end
 +
a0= 1; %coeficiente de Fourier dado por 1/2
 +
%Serie de fourier hasta n=i
 +
fn = @(x) a0/2;
 +
%Sumas de Cesarò
 +
Sn = @(x) fn(x);
 +
for n=1:i
 +
    fn = @(x) bk(n) * cos(n*pi*x) + fn(x);
 +
    Sn = @(x)fn(x) + Sn(x);
 +
    Snaux=@(x) 1/(n+1) * (Sn(x));
 +
    abs_diffn = @(x) abs(g(x) - Snaux(x)).^2;
 +
    integral_result(n) = sqrt(integral(abs_diffn, 0, 1));
 +
    abs_diffneg = @(x) -abs(g(x) - Snaux(x));
 +
    [supremo(n), x_supremo(n)] = fminbnd(abs_diffneg, 0, 1);
 +
end
 +
Sn = @(x) 1/(i+1) * (Sn(x));
 +
 
 +
% Definir la función
 +
x = linspace(0, 1, 100000); % Generar 100 puntos en el rango [0, 1]
 +
 
 +
% Trazar la función
 +
hold on
 +
plot(x, fn(x))
 +
plot(x,g(x)) %gráfica de la función característica
 +
xlabel('x'); % Etiqueta del eje x
 +
ylabel('f(x)'); % Etiqueta del eje y
 +
title('Gráfico fn'); % Título del gráfico
 +
grid on; % Activar la cuadrícula
 +
hold off
 +
 
 +
% Mostrar los resultados
 +
disp('Resultados para coefs del seno usando el método del trapecio:');
 +
disp(ak);
 +
disp('Resultados para coefs del coseno usando el método del trapecio:');
 +
disp(bk);
 +
 
 +
%Vemos que se produce el llamado "fenómeno de Gibbs" por lo que definimos
 +
%otra función usando las sumas de Cesarò
 +
 
 +
figure
 +
 
 +
hold on
 +
plot(x, Sn(x))
 +
plot(x,g(x)) %gráfica de la función característica
 +
xlabel('x'); % Etiqueta del eje x
 +
ylabel('f(x)'); % Etiqueta del eje y
 +
title('Gráfico Sn'); % Título del gráfico
 +
grid on; % Activar la cuadrícula
 +
hold off
 +
 
 +
N=zeros(i);
 +
for n=1:i
 +
    N(n)=n;
 +
end
 +
 
 +
figure
 +
 
 +
hold on
 +
plot(N, (integral_result))
 +
plot(N,(abs(x_supremo)))
 +
xlabel('n'); % Etiqueta del eje x
 +
ylabel('error'); % Etiqueta del eje y
 +
title('Gráfico fn'); % Título del gráfico
 +
grid on; % Activar la cuadrícula
 +
hold off
 +
 
  
 
}}
 
}}

Revisión del 18:41 13 feb 2024

Trabajo realizado por estudiantes
Título Series de Fourier.
Asignatura EDP
Curso 2023-24
Autores Alfredo de Lorenzo, Hugo Sanz, Manuel Fdez.
Este artículo ha sido escrito por estudiantes como parte de su evaluación en la asignatura

1 Introducción

2 Base trigonométrica

close all
clear
% Definir el rango de x
x_values = linspace(-1, 1, 1000);

% Definir las funciones
num_functions = 4;
seno = cell(1, num_functions);
coseno = cell(1, num_functions);
legends = cell(1, num_functions);
f = @(x) 1/2;

for n = 1:num_functions
        % Funciones seno 
        seno{n} = sin(n *pi* x_values);
        legendss{n} = ['f(x)=sin(', num2str(n), 'pix)'];
    % Funciones coseno
        coseno{n} = cos(n *pi* x_values);
        legendsc{n} = ['f(x)=cos(', num2str(n), 'pix)'];
end

% Graficar todas las funciones en una sola gráfica con colores diferentes
figure(1)
for i = 1:num_functions 
    subplot(1,4,i)
    plot(x_values, seno{i}, 'DisplayName', legendss{i});
    legend(legendss{i});
    xlabel('x');    
    ylabel('f(x)');
end


figure(2)
for i = 1:num_functions 
    subplot(1,4,i)
    plot(x_values, coseno{i}, 'DisplayName', legendsc{i});
    legend(legendsc{i});
    xlabel('x');
    ylabel('f(x)');
end

figure(3)
plot(x_values,ones(size(x_values))*1/2,'DisplayName', '1/2')
legend('f(x)=1/2');
xlabel('x');
ylabel('f(x)');
grid on;
hold off;

3 Aproximación de una función

Explicación.......

3.1 Funciones continuas

clc
clear
format long
close all

g = @(x) (x > 0 & x < 0.5);
% Definir la función a integrar
funa = @(x, n) sin(pi * n * x);
funb = @(x, n) cos(pi * n * x);
func = @(x, n) cos(pi * n * x).^2;
fund = @(x, n) sin(pi * n * x).^2;
% Definir los límites de integración
a = -1; %A pesar de ser [-1,1], fuera de [-1/2,1/2] toma el valor 0
b = 1; 
xx= -1/2:10^(-3):1/2;
xxx= -1:10^(-3):1;

% Tolerancia para el método del trapecio adaptativo
tolerancia = 1e-10;
%numero de términos
i=10;

% Inicializar un vector para almacenar los resultados
ak = zeros(i, 1); %coeficientes del seno
bk = zeros(i, 1); %coeficientes del coseno


% Calcular las integrales para n desde 1 hasta i usando el método del trapecio adaptativo
for n = 1:i 
    ak(n) = trapz(xx,funa(xx,n))/trapz(xxx,fund(xxx,n));
    bk(n) = trapz(xx,funb(xx,n))/trapz(xxx,func(xxx,n));
end
a0= 1; %coeficiente de Fourier dado por 1/2
%Serie de fourier hasta n=i
fn = @(x) a0/2;
%Sumas de Cesarò
Sn = @(x) fn(x);
for n=1:i
    fn = @(x) bk(n) * cos(n*pi*x) + fn(x);
    Sn = @(x)fn(x) + Sn(x);
    Snaux=@(x) 1/(n+1) * (Sn(x));
    abs_diffn = @(x) abs(g(x) - Snaux(x)).^2;
    integral_result(n) = sqrt(integral(abs_diffn, 0, 1));
    abs_diffneg = @(x) -abs(g(x) - Snaux(x));
    [supremo(n), x_supremo(n)] = fminbnd(abs_diffneg, 0, 1);
end
Sn = @(x) 1/(i+1) * (Sn(x));

% Definir la función
x = linspace(0, 1, 100000); % Generar 100 puntos en el rango [0, 1]

% Trazar la función
hold on 
plot(x, fn(x))
plot(x,g(x)) %gráfica de la función característica
xlabel('x'); % Etiqueta del eje x
ylabel('f(x)'); % Etiqueta del eje y
title('Gráfico fn'); % Título del gráfico
grid on; % Activar la cuadrícula
hold off

% Mostrar los resultados
disp('Resultados para coefs del seno usando el método del trapecio:');
disp(ak);
disp('Resultados para coefs del coseno usando el método del trapecio:');
disp(bk);

%Vemos que se produce el llamado "fenómeno de Gibbs" por lo que definimos
%otra función usando las sumas de Cesarò

figure

hold on 
plot(x, Sn(x))
plot(x,g(x)) %gráfica de la función característica
xlabel('x'); % Etiqueta del eje x
ylabel('f(x)'); % Etiqueta del eje y
title('Gráfico Sn'); % Título del gráfico
grid on; % Activar la cuadrícula
hold off

N=zeros(i);
for n=1:i
    N(n)=n;
end

figure 

hold on 
plot(N, (integral_result))
plot(N,(abs(x_supremo)))
xlabel('n'); % Etiqueta del eje x
ylabel('error'); % Etiqueta del eje y
title('Gráfico fn'); % Título del gráfico
grid on; % Activar la cuadrícula
hold off


3.2 Funciones discontinuas

clc
clear
format long
close all

g = @(x) (x > 0 & x < 0.5);
% Definir la función a integrar
funa = @(x, n) sin(pi * n * x);
funb = @(x, n) cos(pi * n * x);
func = @(x, n) cos(pi * n * x).^2;
fund = @(x, n) sin(pi * n * x).^2;
% Definir los límites de integración
a = -1; %A pesar de ser [-1,1], fuera de [-1/2,1/2] toma el valor 0
b = 1; 
xx= -1/2:10^(-3):1/2;
xxx= -1:10^(-3):1;

% Tolerancia para el método del trapecio adaptativo
tolerancia = 1e-10;
%numero de términos
i=10;

% Inicializar un vector para almacenar los resultados
ak = zeros(i, 1); %coeficientes del seno
bk = zeros(i, 1); %coeficientes del coseno


% Calcular las integrales para n desde 1 hasta i usando el método del trapecio adaptativo
for n = 1:i 
    ak(n) = trapz(xx,funa(xx,n))/trapz(xxx,fund(xxx,n));
    bk(n) = trapz(xx,funb(xx,n))/trapz(xxx,func(xxx,n));
end
a0= 1; %coeficiente de Fourier dado por 1/2
%Serie de fourier hasta n=i
fn = @(x) a0/2;
%Sumas de Cesarò
Sn = @(x) fn(x);
for n=1:i
    fn = @(x) bk(n) * cos(n*pi*x) + fn(x);
    Sn = @(x)fn(x) + Sn(x);
    Snaux=@(x) 1/(n+1) * (Sn(x));
    abs_diffn = @(x) abs(g(x) - Snaux(x)).^2;
    integral_result(n) = sqrt(integral(abs_diffn, 0, 1));
    abs_diffneg = @(x) -abs(g(x) - Snaux(x));
    [supremo(n), x_supremo(n)] = fminbnd(abs_diffneg, 0, 1);
end
Sn = @(x) 1/(i+1) * (Sn(x));

% Definir la función
x = linspace(0, 1, 100000); % Generar 100 puntos en el rango [0, 1]

% Trazar la función
hold on 
plot(x, fn(x))
plot(x,g(x)) %gráfica de la función característica
xlabel('x'); % Etiqueta del eje x
ylabel('f(x)'); % Etiqueta del eje y
title('Gráfico fn'); % Título del gráfico
grid on; % Activar la cuadrícula
hold off

% Mostrar los resultados
disp('Resultados para coefs del seno usando el método del trapecio:');
disp(ak);
disp('Resultados para coefs del coseno usando el método del trapecio:');
disp(bk);

%Vemos que se produce el llamado "fenómeno de Gibbs" por lo que definimos
%otra función usando las sumas de Cesarò

figure

hold on 
plot(x, Sn(x))
plot(x,g(x)) %gráfica de la función característica
xlabel('x'); % Etiqueta del eje x
ylabel('f(x)'); % Etiqueta del eje y
title('Gráfico Sn'); % Título del gráfico
grid on; % Activar la cuadrícula
hold off

N=zeros(i);
for n=1:i
    N(n)=n;
end

figure 

hold on 
plot(N, (integral_result))
plot(N,(abs(x_supremo)))
xlabel('n'); % Etiqueta del eje x
ylabel('error'); % Etiqueta del eje y
title('Gráfico fn'); % Título del gráfico
grid on; % Activar la cuadrícula
hold off


4 Cambio de intervalo

5 Aproximación de una función con base trigonométrica compleja