Sharednotebooks / 6.SeriesDeFourier.sagewsOpen in CoCalc

1. Comandos Básicos do Sage para Manipulação de Séries de Fourier


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].
O Sage oferece um comando que permite a definição da função satisfazendo essas condições: Piecewise.
Essa função recebe uma lista de pares cujos elementos são o intervalo e a função nesse intervalo.
Como exemplo, vamos definir a função: f(x)={1,0<x<11x,1<x<2 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.
#Exemplo
f1(x)=1
f2(x)=1-x
f=Piecewise([[(0,1),f1],[(1,2),f2]])
f.plot().show()

Vejamos, agora, os comandos diretamente relacionados às Séries de Fourier

a) fourier_series_cosine_coefficient(n,L)
Retorna o n-ésimo coeficiente de cos(nπx/L)\cos{(n\pi x/L)} ou seja, an=1LLLf(x)cos(nπx/L)a_n=\frac{1}{L}\int_{-L}^{L}f(x)\cos{(n\pi x/L)}
Os parâmetros de entrada são o índice do coeficiente, n (começando em zero) e L (o período/2)

a) fourier_series_sine_coefficient(n,L)
Retorna o n-ésimo coeficiente de sin(nπx/L)\sin{(n\pi x/L)} ou seja, bn=1LLLf(x)sin(nπx/L)b_n=\frac{1}{L}\int_{-L}^{L}f(x)\sin{(n\pi x/L)}
Os parâmetros de entrada são o índice do coeficiente, n (começando em zero) e L (o período/2)

a) fourier_series_value(x,L)
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.
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.

a) fourier_series_partial_sum(N,L)
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.

No Exemplo dado a seguir, vamos manipular a Série de Fourier da função: f(x)={1,L<x<01+xL,0x<L 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.
Preste atenção no fato de que, no Sage, o termo constante é tomado como a02\frac{a_0}{2} e nós tomamos como sendo a0a_0.
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()
5/2 1/pi 3/2 3/2
sin(72πx)7πsin(3πx)6π+sin(52πx)5πsin(2πx)4π+sin(32πx)3πsin(πx)2π+sin(12πx)π2cos(72πx)49π22cos(52πx)25π22cos(32πx)9π22cos(12πx)π2+54\displaystyle \frac{\sin\left(\frac{7}{2} \, \pi x\right)}{7 \, \pi} - \frac{\sin\left(3 \, \pi x\right)}{6 \, \pi} + \frac{\sin\left(\frac{5}{2} \, \pi x\right)}{5 \, \pi} - \frac{\sin\left(2 \, \pi x\right)}{4 \, \pi} + \frac{\sin\left(\frac{3}{2} \, \pi x\right)}{3 \, \pi} - \frac{\sin\left(\pi x\right)}{2 \, \pi} + \frac{\sin\left(\frac{1}{2} \, \pi x\right)}{\pi} - \frac{2 \, \cos\left(\frac{7}{2} \, \pi x\right)}{49 \, \pi^{2}} - \frac{2 \, \cos\left(\frac{5}{2} \, \pi x\right)}{25 \, \pi^{2}} - \frac{2 \, \cos\left(\frac{3}{2} \, \pi x\right)}{9 \, \pi^{2}} - \frac{2 \, \cos\left(\frac{1}{2} \, \pi x\right)}{\pi^{2}} + \frac{5}{4}
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.
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.
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.

2. Computação Simbólica dos Coeficientes da Série de Fourier



No Tutorial (teórico) 4. Representação de Funções por Séries de Fourier. Problemas Resolvidos foram discutidos três exemplos nos quais os coeficientes de Fourier foram calculados manualmente.
Vejamos como cada um desses exemplos pode ser resolvido usando o Sage.

Exemplo 1 f(x)={0,πx<01,0x<π f(x) = \left\{ \begin{array}{ccl} 0, &\quad & -\pi \le x \lt 0 \\ 1, & \quad & 0 \le x \lt \pi \\ \end{array} \right.
Lembrando que a0=12LLLf(x)dxa_0=\frac{1}{2L}\int_{-L}^{L}f(x)dx, an=1LLLf(x)cos(nπx/L)dxa_n=\frac{1}{L}\int_{-L}^{L}f(x)\cos{(n\pi x/L)}dx e bn=1LLLf(x)sin(nπx/L)dxb_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.
Acompanhe os exemplos: os comentários esclarecem as etapas do procedimento. Depois, compare os resultados com os obtidos manualmente no Tutorial mencionado.
# 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)
a0=
12\displaystyle \frac{1}{2}
an=
0\displaystyle 0
bn=
(1)nn1nπ\displaystyle -\frac{\frac{\left(-1\right)^{n}}{n} - \frac{1}{n}}{\pi}
bn simplificado=
(1)n1πn\displaystyle -\frac{\left(-1\right)^{n} - 1}{\pi n}
Exemplo 2 f(x)={L+x,Lx0Lx,0xL 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.
# 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)


12L\displaystyle \frac{1}{2} \, L
2((1)nL2π2n2L2π2n2)L\displaystyle -\frac{2 \, {\left(\frac{\left(-1\right)^{n} L^{2}}{\pi^{2} n^{2}} - \frac{L^{2}}{\pi^{2} n^{2}}\right)}}{L}
2((1)n1)Lπ2n2\displaystyle -\frac{2 \, {\left(\left(-1\right)^{n} - 1\right)} L}{\pi^{2} n^{2}}
0\displaystyle 0
Naturalmente, após calcularmos os coeficientes de Fourier poderíamos fazer os gráficos das somas parciais a partir deles.
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.
Assim, fica a sugestâo:
  • Para calcular os coeficientes de Fourier de uma função qualquer, use o código de qualquer dos três exemplos como modelo
  • Para fazer o gráfico das somas parciais, use os comandos básicos do Sage, como no Exemplo a seguir
# 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()

Exemplo 3 f(x)={1,L<x<01+xL,0xL 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.
# 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)
54\displaystyle \frac{5}{4}
(1)nLπ2n2Lπ2n2L\displaystyle \frac{\frac{\left(-1\right)^{n} L}{\pi^{2} n^{2}} - \frac{L}{\pi^{2} n^{2}}}{L}
(1)n1π2n2\displaystyle \frac{\left(-1\right)^{n} - 1}{\pi^{2} n^{2}}
(1)nπn\displaystyle -\frac{\left(-1\right)^{n}}{\pi n}
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,
onde podemos observar o chamado Fenômeno de Gibbs (será estudado mais tarde).
# 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()
Para completar, vejamos os gráficos correspondentes ao Exemplo 1.
# 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()
05ee91d4-b2a4-451d-83e4-2f2ec50ce922