Diferencia entre revisiones de «Series de Fourier (Grupo 2 1/2)»
De MateWiki
| Línea 59: | Línea 59: | ||
{{matlab|codigo= | {{matlab|codigo= | ||
| − | % | + | 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= | ||
| − | % | + | 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 | |
Contenido
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