Commit 4652e7ad authored by Rafael Peretti Pezzi's avatar Rafael Peretti Pezzi

Incluído programa de cálculo da forma de uma corda vibrante com seus harmônicos

parent 309d673c
# -*- coding: iso-8859-15 -*-
# Programa que calcula a forma de uma corda vibrando considerando
# alguns harmônicos
from matplotlib.pylab import * # pylab é a maneira fácil de fazer gráficos
import time # Vamos animar os gráficos em tempo real
ion() # Ativa o modo interativo (para a animação do gráfico)
# Definições
L_corda=2.5 # Comprimento da corda
Lambda=5. # Comprimento de onda da frequencia fundamental
freq=0.1 # Frequência
k=2.0*pi/Lambda # determina o número de onda
w=2.0*pi*freq # determina a frequência angular
x = arange(0,L_corda,0.01) # o gráfico terá o comprimento da corda (em x)
corda, = plot(x,x,lw=2, color="black") # apenas cria o gráfico inicial
# Cria o gráfico de cada harmônico
harmo1, = plot(x,x, color="red")
harmo2, = plot(x,x, color="blue")
harmo3, = plot(x,x, color="orange")
harmo4, = plot(x,x, color="purple")
harmo5, = plot(x,x, color="green")
corda.axes.set_ylim(-3,3) # Define os limites do gráfico
starttime = time.time() # O tempo inicial
t = 0 # Quanto tempo passou
while(t < 130.0): # while(True): para rodar para sempre
# Calcula por quanto tempo o programa está rondando
t = time.time() - starttime
# Calcula os primeiros harmônicos da corda
# As amplitudes de cada harmônico dependem da construção do instrumento
# e podem ser estimadas pela análise de Fourier do som correspondente
h1 = 1.0*sin(k*x)*cos(w*t) # Resultado analítico da onda estacionária
h2 = 1.0*sin(2.*k*x)*cos(2.*w*t+.00003) # Segundo harmônico
h3 = 1.0*sin(3.*k*x)*cos(3.*w*t+.00004) # Terceiro
h4 = 1.0*sin(4.*k*x)*cos(4.*w*t+.00005) # ...
h5 = 1.0*sin(5.*k*x)*cos(5.*w*t+.00001)
corda.set_ydata(h1+h2+h3+h4+h5) # A forma da onda resultante
# apresenta o gráfico de cada harmônico
harmo1.set_ydata(h1)
harmo2.set_ydata(h2)
harmo3.set_ydata(h3)
harmo4.set_ydata(h4)
harmo5.set_ydata(h5)
draw() # Redesenha a tela
# Aguarda um instante para salvar um pouco o processador
time.sleep(0.03)
# -*- coding: iso-8859-15 -*-
# Programa que ilustra a construção de uma onda estacionária
# a partir de duas componentes progressivas
from matplotlib.pylab import * # pylab é a maneira fácil de fazer gráficos
import time # vamos animar os gráficos em tempo real
ion() #Ativa o moto interativo (para a animação do gráfico)
# Definições
L_corda=5.0 # comprimento da corda
Lambda=2.5 # comprimento de onda
freq=0.1 # frequência
k=2.0*pi/Lambda # número de onda
w=2.0*pi*freq # frequência angular
x = arange(0,L_corda,0.01) # cria o limite do eixo de x ao comprimento da corda
estacionaria, = plot(x,x) # Apenas cria o gráfico inicial
progressiva1, = plot(x,x)
progressiva2, = plot(x,x)
estacionaria.axes.set_ylim(-3,3) # define os limites do gráfico
starttime = time.time() # O tempo inicial
t = 0 # Quanto tempo passou
while(t < 500.0): # while(True): para rodar para sempre
# Calcula por quanto tempo o programa está rondando
t = time.time() - starttime
# Resultado analítico da onda estacionária
# y = 2.*sin(k*x)*cos(w*t)
prog1 = sin(k*x-w*t)
prog2 = sin(k*x+w*t)
# Atualiza o gráfico (com a soma das ondas
estacionaria.set_ydata(prog1+prog2)
# Cada componente individual
progressiva1.set_ydata(prog1)
progressiva2.set_ydata(prog2)
draw() # Redesenha o gráfico
time.sleep(0.02)
from matplotlib.pylab import * # pylab is the easiest approach to any plotting
import time # we'll do this rendering i real time
ion() # interaction mode needs to be turned off
x = arange(0,4*pi,0.01) # we'll create an x-axis from 0 to 2 pi
line, = plot(x,x) # this is our initial plot, and does nothing
line.axes.set_ylim(-3,3) # set the range for our plot
starttime = time.time() # this is our start time
t = 0 # this is our relative start time
while(t < 500.0): # we'll limit ourselves to 5 seconds.
# set this to while(True) if you want to loop forever
t = time.time() - starttime # find out how long the script has been running
y = -2*sin(x)*sin(t) # just a function for a standing wave
# replace this with any function you want to animate
# for instance, y = sin(x-t)
line.set_ydata(y) # update the plot data
draw() # redraw the canvas
from matplotlib.pylab import * # pylab is the easiest approach to any plotting
import time # we'll do this rendering i real time
ion() # interaction mode needs to be turned off
Lambda=4
freq=0.5
k=2.*pi/Lambda
omega=2.*pi*freq
x = arange(0,4*pi,0.01) # we'll create an x-axis from 0 to 2 pi
line, = plot(x,x) # this is our initial plot, and does nothing
line.axes.set_ylim(-3,3) # set the range for our plot
starttime = time.time() # this is our start time
t = 0 # this is our relative start time
while(True): # we'll limit ourselves to 5 seconds.
# set this to while(True) if you want to loop forever
t = time.time() - starttime # find out how long the script has been running
y = -2*sin(k*x-omega*t) # just a function for a standing wave
# replace this with any function you want to animate
# for instance, y = sin(x-t)
line.set_ydata(y) # update the plot data
time.sleep(0.01)
draw() # redraw the canvas
# -*- coding: iso-8859-15 -*-
# Programa que apresenta a forma de uma onda progressiva
# do tipo y(x,t)=y_m*sen(k*x-w*t)
from matplotlib.pylab import * # pylab é a maneira fácil de fazer gráficos
import time # vamos animar os gráficos em tempo real
ion() #Ativa o modo interativo (para a animação do gráfico)
# Definições
L_corda=10.0 # comprimento da corda
Lambda=2.0 # comprimento de onda
freq=0.5 # frequência
k=2.0*pi/Lambda # número de onda
w=2.0*pi*freq # frequência angular
x = arange(0,L_corda,0.05) # cria o limite do eixo de x ao comprimento da corda
progressiva, = plot(x,x) # Apenas cria o gráfico inicial
progressiva.axes.set_ylim(-3,3) # define os limites do gráfico
starttime = time.time() # O tempo inicial
t = 0 # Quanto tempo passou
while(t < 500.0): # while(True): para rodar para sempre
# Calcula por quanto tempo o programa está rondando
t = time.time() - starttime
# Calcula a forma da onda
prog1 = 2.0*sin(k*x-w*t)
# Atualiza o gráfico (com a soma das ondas
progressiva.set_ydata(prog1)
draw() # Redesenha a tela
# Aguarda um instante para salvar um pouco o processador
time.sleep(0.03)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment