Sharednotebooks / 6.SeriesDeFourier.ipynbOpen in CoCalc
Author: Sergio Luis Lopes Verardi
In [ ]:
%html <h2 style="color: rgb(51, 102, 255);">1. Comandos Básicos do Sage para Manipulação de Séries de Fourier</h2> <br> <span style="font-family: Verdana;"> </span>
In [ ]:
%html O Sage possui um pequeno conjunto de comandos que permitem extrair as principais informações sobre a Série de Fourier de uma função que, em geral, é contínua por partes e fornecida em um intervalo [-L,L].<br> O Sage oferece um comando que permite a definição da função satisfazendo essas condições: <span style="color: rgb(51, 102, 255);">Piecewise</span>.<br> Essa função recebe uma lista de pares cujos elementos são o intervalo e a função nesse intervalo.<br> Como exemplo, vamos definir a função: $$ f(x) = \left\{ \begin{array}{ccl} 1, &\quad & 0 \lt x \lt 1 \\ 1-x, & \quad & 1 \lt x \lt 2 \\ \end{array} \right. $$ e traçar seu gráfico.
In [ ]:
#Exemplo f1(x)=1 f2(x)=1-x f=Piecewise([[(0,1),f1],[(1,2),f2]]) f.plot().show()
In [ ]:
In [ ]:
%html Vejamos, agora, os comandos diretamente relacionados às Séries de Fourier<br> <br> <span style="color: rgb(51, 102, 255);">a) fourier_series_cosine_coefficient(n,L)</span><br> Retorna o n-ésimo coeficiente de $\cos{(n\pi x/L)}$ ou seja, $a_n=\frac{1}{L}\int_{-L}^{L}f(x)\cos{(n\pi x/L)}$<br> Os parâmetros de entrada são o índice do coeficiente, n (começando em zero) e L (o período/2)<br><br> <span style="color: rgb(51, 102, 255);">a) fourier_series_sine_coefficient(n,L)</span><br> Retorna o n-ésimo coeficiente de $\sin{(n\pi x/L)}$ ou seja, $b_n=\frac{1}{L}\int_{-L}^{L}f(x)\sin{(n\pi x/L)}$<br> Os parâmetros de entrada são o índice do coeficiente, n (começando em zero) e L (o período/2)<br><br> <span style="color: rgb(51, 102, 255);">a) fourier_series_value(x,L)</span><br> Retorna o valor da Série de Fourier em um ponto dado, x. Os parâmetros de entrada são o ponto onde se quer avaliar a Série de Fourier e o valor de L.<br> Um importante uso desta função é avaliar a Série de Fourier em um ponto de descontinuidade, já que ela leva em conta o Teorema da Convergência Pontual.<br><br> <span style="color: rgb(51, 102, 255);">a) fourier_series_partial_sum(N,L)</span><br> Retorna a Soma Parcial da Série de Fourier, considerando os primeiros N termos da série. Os parâmetros de entrada são N e L.<br><br> No Exemplo dado a seguir, vamos manipular a Série de Fourier da função: $$ f(x) = \left\{ \begin{array}{ccl} 1, &\quad & -L \lt x \lt 0 \\ 1+\frac{x}{L}, & \quad & 0 \le x \lt L \\ \end{array} \right. $$ Vejamos exemplos de uso de cada um dos comandos apresentados.<br> Preste atenção no fato de que, no Sage, o termo constante é tomado como $\frac{a_0}{2}$ e nós tomamos como sendo $a_0$.
In [ ]:
L=var('L') L=2 # definindo um valor específico para L # Definindo a função contínua por partes f1(x)=1 f2(x)=1+x/L fc = Piecewise([[(-L,0),f1],[(0,L),f2]]) # Determinando o coeficiente a0 (n=0 da parte em cossenos; sabemos do Tutorial teórico que a0=5/2) fc.fourier_series_cosine_coefficient(0,L) # Determinando o coeficiente b1 (n=1 da parte em senos) fc.fourier_series_sine_coefficient(1,L) # Determina o valor da Série de Fourier nos pontos de descontinuidade x=-2 e x=6 fc.fourier_series_value(-2,2) fc.fourier_series_value(6,2) # Mostrando a Soma Parcial para N=8 fsp=fc.fourier_series_partial_sum(8,L) show(fsp) # Gráfico sobrepondo a função (em vermelho, no intervalo [-L,L]) e a soma parcial da Série de Fourier com N=30 (extensão periódica exibida para [-6,6]) P1=fc.plot(color='red') P2=fc.plot_fourier_series_partial_sum(30,L,-6,6) (P1+P2).show()
In [ ]:
%html Acabamos de ver que os recursos básicos do Sage são suficientes para extrair informações relevantes sobre a Série de Fourier de uma função: explorar a convergência pontual, determinar as somas parciais e verificar sua convergência, graficamente.<br> Entretanto, uma limitação é evidente: e se desejamos determinar a expressão analítica dos coeficientes de Fourier? Observe que os comandos examinados não fornecem uma expressão geral, apenas o valor de cada coeficiente individual.<br> A saída é executar cálculos simbólicos mais elaborados mas, felizmente, o Sage oferece todos os recursos necessários para isso, como veremos a seguir.
In [ ]:
In [ ]:
In [ ]:
%html No Tutorial (teórico) <strong>4. Representação de Funções por Séries de Fourier. Problemas Resolvidos</strong> foram discutidos três exemplos nos quais os coeficientes de Fourier foram calculados manualmente.<br> Vejamos como cada um desses exemplos pode ser resolvido usando o Sage.<br><br> <span style="color: rgb(51, 102, 255);">Exemplo 1</span> $$ f(x) = \left\{ \begin{array}{ccl} 0, &\quad & -\pi \le x \lt 0 \\ 1, & \quad & 0 \le x \lt \pi \\ \end{array} \right. $$ <br> Lembrando que $a_0=\frac{1}{2L}\int_{-L}^{L}f(x)dx$, $a_n=\frac{1}{L}\int_{-L}^{L}f(x)\cos{(n\pi x/L)}dx$ e $b_n=\frac{1}{L}\int_{-L}^{L}f(x)\sin{(n\pi x/L)}dx$, o código fornecido a seguir, define os integrandos (por partes) e calcula os coeficientes de Fourier.<br> Acompanhe os exemplos: os comentários esclarecem as etapas do procedimento. Depois, compare os resultados com os obtidos manualmente no Tutorial mencionado.<br>
In [ ]:
# Exemplo 1 n=var('n') assume(n,'integer') # assumir que n é inteiro, é importante para que o Sage execute simplificações de funções trigonométricas do tipo cos(n*pi) L=pi # define o intervalo, neste caso, L=pi # Cálculo do coeficiente a0 f1(x)=0 # f(x) no primeiro trecho f2(x)=1 # f(x) no segundo trecho fc = Piecewise([[(-pi,0),f1],[(0,pi),f2]]) # constroi a função piecewise para todo o intervalo (é o integrando do coeficiente a0) a0=(1/(2*L))*fc.integral(x,definite=True) # calcula a integral correspondente a a0; observe o parâmetro definite=True, necessário porque a0 é uma integral definida # Cálculo do coeficiente an fa1(x)=0 # f(x) primeiro trecho fa2(x)=cos((n*L*x)/pi) # f(x) no segundo trecho: é o produto 1 * cos(n pi x/L) fcna = Piecewise([[(-pi,0),fa1],[(0,pi),fa2]]) # constroi a função piecewise para todo o intervalo (é o integrando do coeficiente an) an=(1/L)*fcna.integral(x,definite=True) # Cálculo do coeficiente bn fb1(x)=0 # f(x) primeiro trecho fb2(x)=sin((n*pi*x)/L) # f(x) no segundo trecho: é o produto 1 * sen(n pi x/L) fcnb = Piecewise([[(-pi,0),fb1],[(0,pi),fb2]]) bn=(1/L)*fcnb.integral(x,definite=True) # Mostrando os coeficientes calculados print('a0='); show(a0) print('an=');show(an) print('bn=');show(bn) bn1=bn.simplify_rational() # simplify_rational simplifica funções racionais; compare a terceira e a quarta expressões abaixo e verifique a simplificação ocorrida print('bn simplificado=');show(bn1)
In [ ]:
%html <span style="color: rgb(51, 102, 255);">Exemplo 2</span> $$ f(x) = \left\{ \begin{array}{ccl} L+x, &\quad & -L \le x \le 0 \\ L-x, & \quad & 0 \le x \le L \\ \end{array} \right. $$ <br>
In [ ]:
# Exemplo 2 n=var('n') assume(n,'integer') L=var('L') assume(L>0) f1(x)=L+x f2(x)=L-x fc = Piecewise([[(-L,0),f1],[(0,L),f2]]) a0=(1/(2*L))*fc.integral(x,definite=True) fa1(x)=f1(x)*cos((n*pi*x)/L) fa2(x)=f2(x)*cos((n*pi*x)/L) fcna = Piecewise([[(-L,0),fa1],[(0,L),fa2]]) an=(1/L)*fcna.integral(x,definite=True) fb1(x)=f1(x)*sin((n*pi*x)/L) fb2(x)=f2(x)*sin((n*pi*x)/L) fcnb = Piecewise([[(-L,0),fb1],[(0,L),fb2]]) bn=(1/L)*fcnb.integral(x,definite=True) show(a0) show(an) an1=an.simplify_rational() show(an1) show(bn)
In [ ]:
%html Naturalmente, após calcularmos os coeficientes de Fourier poderíamos fazer os gráficos das somas parciais a partir deles.<br> Para isso, no entanto, teríamos que escrever um código implementando os somatórios que aparecem na expressão da Série de Fourier mas, como vimos anteriormente, o Sage possui comandos que permitem executar essa tarefa diretamente.<br> Assim, fica a sugestâo: <ul> <li>Para calcular os coeficientes de Fourier de uma função qualquer, use o código de qualquer dos três exemplos como modelo </li> </ul> <ul> <li>Para fazer o gráfico das somas parciais, use os comandos básicos do Sage, como no Exemplo a seguir </li> </ul>
In [ ]:
# Gráfico da função do Exemplo 2 e da Soma Parcial com N=30 L=var('L') L=2 # atribui valor numérico a L f1(x)=L+x f2(x)=L-x fc = Piecewise([[(-L,0),f1],[(0,L),f2]]) P1=fc.plot(color='red') # plota função em vermelho #P2=fc.plot_fourier_series_partial_sum(5,L,-3*L,3*L,color='yellow') P3=fc.plot_fourier_series_partial_sum(30,L,-3*L,3*L,color='green') #plota soma parcial em verde (P1+P3).show()
In [ ]:
%html <span style="color: rgb(51, 102, 255);">Exemplo 3</span> $$ f(x) = \left\{ \begin{array}{ccl} 1, &\quad & -L \lt x \lt 0 \\ 1+\frac{x}{L}, & \quad & 0 \le x \le L \\ \end{array} \right. $$ <br>
In [ ]:
# Exemplo 3 n=var('n') assume(n,'integer') L=var('L') assume(L>0) f1(x)=1 f2(x)=1+x/L fc = Piecewise([[(-L,0),f1],[(0,L),f2]]) a0=(1/(2*L))*fc.integral(x,definite=True) fa1(x)=f1(x)*cos((n*pi*x)/L) fa2(x)=f2(x)*cos((n*pi*x)/L) fcna = Piecewise([[(-L,0),fa1],[(0,L),fa2]]) an=(1/L)*fcna.integral(x,definite=True) fb1(x)=f1(x)*sin((n*pi*x)/L) fb2(x)=f2(x)*sin((n*pi*x)/L) fcnb = Piecewise([[(-L,0),fb1],[(0,L),fb2]]) bn=(1/L)*fcnb.integral(x,definite=True) show(a0) show(an) an1=an.simplify_rational() show(an1) show(bn)
In [ ]:
%html A função do Exemplo 3 não é uma função contínua como a do Exemplo 2 e verificamos que, com N=30, a Série de Fourier representa razoavelmente bem a função exceto na vizinhança dos pontos de descontinuidade, <br>onde podemos observar o chamado Fenômeno de Gibbs (será estudado mais tarde).
In [ ]:
# Gráfico da função do Exemplo 3 e da Soma Parcial com N=30 L=var('L') L=1 # atribui valor numérico a L f1(x)=1 f2(x)=1+x/L fc = Piecewise([[(-L,0),f1],[(0,L),f2]]) P1=fc.plot(color='red') # plota função em vermelho #P2=fc.plot_fourier_series_partial_sum(5,L,-3*L,3*L,color='yellow') P3=fc.plot_fourier_series_partial_sum(30,L,-3*L,3*L,color='green') #plota soma parcial em verde (P1+P3).show()
In [ ]:
%html Para completar, vejamos os gráficos correspondentes ao Exemplo 1.
In [ ]:
# Gráfico da função do Exemplo 1 e da Soma Parcial com N=30 L=var('L') L=pi # atribui valor numérico a L f1(x)=0 f2(x)=1 fc = Piecewise([[(-L,0),f1],[(0,L),f2]]) P1=fc.plot(color='red') # plota função em vermelho #P2=fc.plot_fourier_series_partial_sum(5,L,-3*L,3*L,color='yellow') P3=fc.plot_fourier_series_partial_sum(30,L,-3*L,3*L,color='green') #plota soma parcial em verde (P1+P3).show()
In [ ]:
In [ ]: