Description

5
Description Código para generar las series de Fourier de funciones definidas a trozos , genera los coeficientes A0, An, Bn y la función de aproximación, genera la gráfica de las funciones originales y de la función de aproximación, es necesario revisar el intervalo de graficación de las funciones originales para que se adecuen a tus necesidades MATLAB release MATLAB 7.14 (R2012a) MATLAB Search Path / transformada_de_fourier_grupo_ de_funciones.m clear , clf, clc, close all syms x n %f=input('ingrese las funciones entre corchetes [] separadas por espacios'); %p=input('ingrese los puntos en que estan evaluadas las funciones entre corchetes [] separadas por espacios'); f=[x^3 x^4];%funciones p=[-pi 0 pi];%intervalos f=sym(f); a0=0; for i=1:length(f) a0=a0+int(f(i),'x',p(i),p(i+1)); end disp('coeficiente A0:') a0=simple(a0/pi); pretty(a0) an=0; for i=1:length(f) an=an+int(f(i)*cos(n*x),'x',p(i),p(i+1)); end disp('coeficiente An:') an an=simple(an/pi) an=subs(an,{cos(pi*n),sin(pi*n)},{(-1)^n,0}) pretty(an) bn=0; for i=1:length(f) bn=bn+int(f(i)*sin(n*x),'x',p(i),p(i+1)); end disp('coeficiente Bn:') bn=simple(bn/pi); bn=subs(bn,{cos(pi*n),sin(pi*n)},{(-1)^n,0}); pretty(bn) d=input('ingrese el valor de los armonicos: \n') D=d; d=sym(d); Fa=a0/2; %ciclo para generar la sumatoria tic for k=1:d

description

Bases para la programación de series de fuorier en matlab

Transcript of Description

Page 1: Description

Description Código para generar las series de Fourier de funciones definidas a trozos , genera los coeficientes A0, An, Bn y

la función de aproximación, genera la gráfica de las funciones originales y de la función de aproximación, es

necesario revisar el intervalo de graficación de las funciones originales para que se adecuen a tus necesidades

MATLAB release MATLAB 7.14 (R2012a)

MATLAB Search Path /

transformada_de_fourier_grupo_ de_funciones.m

clear , clf, clc, close all syms x n%f=input('ingrese las funciones entre corchetes [] separadas por espacios');%p=input('ingrese los puntos en que estan evaluadas las funciones entre corchetes [] separadas por espacios');f=[x^3 x^4];%funcionesp=[-pi 0 pi];%intervalos

f=sym(f);

a0=0;for i=1:length(f) a0=a0+int(f(i),'x',p(i),p(i+1));enddisp('coeficiente A0:')a0=simple(a0/pi);pretty(a0)

an=0;for i=1:length(f) an=an+int(f(i)*cos(n*x),'x',p(i),p(i+1));enddisp('coeficiente An:')anan=simple(an/pi)an=subs(an,{cos(pi*n),sin(pi*n)},{(-1)^n,0})pretty(an)

bn=0;for i=1:length(f) bn=bn+int(f(i)*sin(n*x),'x',p(i),p(i+1));enddisp('coeficiente Bn:')bn=simple(bn/pi);bn=subs(bn,{cos(pi*n),sin(pi*n)},{(-1)^n,0});pretty(bn)

d=input('ingrese el valor de los armonicos: \n')D=d;d=sym(d);

Fa=a0/2;%ciclo para generar la sumatoriaticfor k=1:d F=0; F=an*cos(n*x)+bn*sin(n*x);

Page 2: Description

F=subs(F,n,k); Fa=Fa+F;end% graficacion de la funcion de aproximacionfprintf('funcion de aproximacion para %d terminos es: \n',D)FA=simple(Fa);pretty(FA)T=tocp1=ezplot(Fa,[-5,5]);set(p1,'color','g')title('aprox. de funciones por series de Fourier')xlabel('x')ylabel('y')grid on hold on% graficacion de las funciones originalesx=min(p):0.01:max(p);fx=0;for j=1:length(f) fj=subs(f(j),x); if j==length(f) fx=fx+(((x>=p(j))&(x<=p(j+1))).*fj); else fx=fx+(((x>=p(j))&(x<p(j+1))).*fj); endendplot(x,fx)legend('funcion aprox.','funcion original')hold off%%clear , clf, clc, close all syms x n%f=input('ingrese las funciones entre corchetes [] separadas por espacios');%p=input('ingrese los puntos en que estan evaluadas las funciones entre corchetes [] separadas por espacios');f=[x^3 x^4];%funcionesp=[-pi 0 pi];%intervalos

f=sym(f);

a0=0;for i=1:length(f) a0=a0+int(f(i),'x',p(i),p(i+1));enddisp('coeficiente A0:')a0=simple(a0/pi);pretty(a0)

an=0;for i=1:length(f) an=an+int(f(i)*cos(n*x),'x',p(i),p(i+1));enddisp('coeficiente An:')anan=simple(an/pi)an=subs(an,{cos(pi*n),sin(pi*n)},{(-1)^n,0})pretty(an)

Page 3: Description

bn=0;for i=1:length(f) bn=bn+int(f(i)*sin(n*x),'x',p(i),p(i+1));enddisp('coeficiente Bn:')bn=simple(bn/pi);bn=subs(bn,{cos(pi*n),sin(pi*n)},{(-1)^n,0});pretty(bn)

d=input('ingrese el valor de los armonicos: \n')D=d;d=sym(d);

Fa=a0/2;%sumatoria de terminosticFa=Fa+symsum(an*cos(n*x)+ bn*sin(n*x),n,1,d);% graficacion de la funcion de aproximacionfprintf('funcion de aproximacion para %d terminos es: \n',D)FA=simple(Fa);pretty(FA)T=tocp1=ezplot(Fa,[-5,5]);set(p1,'color','g')title('aprox. de funciones por series de Fourier')xlabel('x')ylabel('y')grid on hold on% graficacion de las funciones originalesx=min(p):0.01:max(p);fx=0;for j=1:length(f) fj=subs(f(j),x); if j==length(f) fx=fx+(((x>=p(j))&(x<=p(j+1))).*fj); else fx=fx+(((x>=p(j))&(x<p(j+1))).*fj); endendplot(x,fx)legend('funcion aprox.','funcion original')hold off

Programa en Matlab para Series de Fourier

   Este es un programa en Matlab que permite hacer una aproximación a una señal cuadrada (con límites en “y” max= 1, min= -1) por medio de las series de Fourier. Los valores de los coeficientes  son:A0 = 0, debido al valor medio de la función.B(n) = 4/n*pi, obtenido analíticamente.A(n) = 0, debido a la forma de la señal.

Programa en Matlab%   Pablo Alejandro Arreola Galván 98482%   Febrero, 2013

Page 4: Description

%   Este programa grafica una función escalón y sobre ella%   una aproximación hecha con la serie de Fourier%Introducción al programa y limpia de pantallaclcclear alldisp('******************************')disp('Serie de Fourier')

%   Aquí declaramos varias cosas, en primer lugar una variable N la cual es el número de armónicos que %   incluirá nuestra aproximación, mientras mayor sea el número, más fiel será la gráfica obtenida a la%   original.%   También se declara el intervalo (x) de nuestra función, que va de –pi hasta pi.%   Por último inicializamos la variable SUM a cero. N= input('Número de muestras deseadas (N):');x=-pi:0.001:pi;sum=0;

%   En este ciclo for está contenida la magia, inicializa en 1 y termina en N, el incremento es de 2, para %   así tener una serie de números impares (1,3,5,7,9…). Los valores pares de (n) se omiten ya que el%   resultado es cero para todos ellos, no sumarán nada a la variable (sum).%   b(n) fue obtenida analíticamente

for n = 1: 2: N    b(n) = 4/(n*pi);    sum = sum + b(n) * sin(n*x);end

%   Para tener el resultado aproximado de la señal, se suma a0/2, este término fue obtenido a partir de   %   el valor promedio del área bajo la curva de -pi a pi, como es una función simétrica, el valor es 0,              %   esto podría omitirse, pero para se incluye para ver más claramente la fórmula de la serie. sum = sum + 0;

%      Esta es una manera de generar la función escalón (f), diciendo que toda (x) inferior a 0 valdrá- 1, y %       toda (x) mayor a 0 valdrá 1. Esto sólo es válido para el intervalo de –pi a pi, donde se ve una señal %     cuadrada, si se amplían los límites se verá la gráfica de valores constantes.

f=(x<0).*(-1)+(x>=0).*1; %    En esta sección se encuentran los comandos para graficar y fin del programa.plot(x,f); hold onplot(x,sum)gridtitle(‘Serie de Fourier')xlabel('Tiempo')ylabel('Voltaje')disp('Programa ejecutado exitosamente')disp('******************************')

Algunos resultados son:Aproximación con N=3