Sejam
Exemplo 54.1 Ponha, por exemplo,
from sympy import integrate, var, cos, sin, pi, Integral, plot
= var('x')
x = x, x**2
f, g *g, (x,-1,1))
integrate( f0
Observe como a função integrate
está usada para calcular a integral.
Exercício 54.1 Escreva uma função inner_product(f, g, var, a, b)
que devolve o produto interno das funções
**2, x, -1, 1 )
inner_product( x, x0
1, x**2, x, -1, 1 )
inner_product( 2/3
-pi, pi )
inner_product( cos(x), sin(x), x, 0
-pi, pi )
inner_product( cos(x), cos(x), x, 𝜋
Exercício 54.2 Escreva uma função orthogonal_projection(f, g, var, a, b)
para calcular a projeção ortogonal de inner_product
que escreveu no Exercício 54.1. A sua implementação deve verificar as seguintes computações.
**2, x, -1, 1 )
orthogonal_projection( x, x0
1, x**2, x, -1, 1 )
orthogonal_projection( 5x^2/3
**2, cos(x), x, -pi, pi )
orthogonal_projection( x4cos(𝑥) −
O processo de ortogonalização de Gram-Schmidt está descrita na demonstração do Teorema 49.1. Vamos revisar o processo aqui rapidamente. Assuma que
Exercício 54.3 Escreva uma função gram_schmidt(funcs, var, a, b)
que, dada uma lista funcs
de funções (assumindo que elas são L.I.), aplica o processo de ortogonalização de Gram-Schmidt para esta lista. A sua função deve verificar as seguintes computações.
1,x,x**2], x, -1, 1)
gram_schmidt([1, x, x**2 - 1/3]
[1,x,x**2], x, 0, 1)
gram_schmidt([1, x - 1/2, x**2 - x + 1/6]
[1,cos(x),sin(x)], x, -pi, pi)
gram_schmidt([1, cos(x), sin(x)] [
Dica: Cria uma lista ws
para guardar as funções ws
, o próximo elemento de ws
pode ser calculado com
- sum(orthogonal_projection(f, w, var, a, b) for w in ws) f
onde f
é o elemento atual de funcs
.
Exercício 54.4 Usando a função gram_schmidt
no Exercício 54.3, calcule uma base ortogonal para o espaço inner_product
escrita no Exercício 54.1 que as funções no output são de fato ortogonais.
Para calcular as séries de Fourier de algumas funções como no Teorema 50.1, vamos primeiro aprender como calcular integrais numericamente.
*sin(x), (x, -2, 1))
integrate( cos(x)-sin^2(2)/2+sin(1)/2
*sin(x), (x, -2, 1)).evalf()
integrate( cos(x)0.0593741960791174
−*sin(x),(x,-2,1))
Integral(cos(x)object...
...integral *sin(x), (x, -2, 1)).evalf()
Integral( cos(x)0.0593741960791174 −
Consulte o manual para mais informações.
Exercício 54.5 Modifique a sua implementação do produto interno e projeção ortogonal no Exercício 54.1 e no Exercício 54.2 tal que elas devolvam aproximações numéricas em vez de valores exatos.
Exercício 54.6 Escreva uma função fourier(f)
em Python que dada uma função orthogonal_projection
modificada no Exercício 54.5. A sua função deve verificar as seguintes computações.
fourier(x)2.0sin(𝑥)−1.0sin(2𝑥)+0.666666666666667sin(3𝑥)−0.5sin(4𝑥)+0.4sin(5𝑥)
**2)
fourier(x4.0cos(𝑥)+1.0cos(2𝑥)−0.444444444444444cos(3𝑥)+0.25cos(4𝑥)−0.16cos(5𝑥)+3.28986813369645
−abs(x))
fourier(1.27323954473516cos(𝑥)−0.141471060526129cos(3𝑥)−0.0509295817894065cos(5𝑥)+1.5707963267949 −
Exercício 54.7 Verifique visualmente a qualidade destas aproximações. Por exemplo
= abs(x)
f =(-3,3), ylim=(-1,4)) plot(f, xlim
= fourier(f)
ff =(-3,3), ylim=(-1,4)) plot(ff, xlim
fourier
tal que seja capaz de calcular as aproximações até grau