Desenvolva um programa computacional que gere um gráfico 3D das componentes
e
de campos elétricos e magnéticos, associados a uma onda eletromagnética plana que se propaga na direção
, em função da direção de propagação. Para fins da validação, considere que campo
se propaga no vácuo, com velocidade da luz. Encontre todos os demais valores necessários para validar seu código.
Passo 1
O enunciado (do jeito que veio) pede que eu desenvolva um programa computacional que gere um gráfico 3D das componentes
e
de campos elétricos e magnéticos associados a uma onda eletromagnética plana que se propaga na direção
, e que eu encontre todos os demais valores necessários para validar o código. Foi dado explicitamente o campo elétrico
que se propaga no vácuo com velocidade da luz.
O que precisa ser entregue (resumo claro das perguntas):
- Gerar um programa (código) que plote em 3D as componentes
e ao longo da direção de propagação (e no tempo), de forma que seja possível validar o comportamento físico da onda. - Encontrar todos os parâmetros numéricos ausentes necessários para validar o código: frequência, pulsação, número de onda
, comprimento de onda , impedância do vácuo , amplitude de etc.
Informações relevantes fornecidas pelo enunciado:
- Amplitude do campo elétrico:
(unidade implícita: V/m). - Frequência dada no argumento do cosseno:
(pois aparece ). - O meio é vácuo (velocidade da luz no vácuo).
Não há outras informações adicionais no enunciado; portanto vou assumir os valores físicos padrões do vácuo (
,
,
) e que a onda é harmônica, plana e sem perda (onde
e
são em fase).
Passo 2
Conceitos físicos e fórmulas que vou usar (mini-aula, passo a passo, sem pular etapas).
- Onda eletromagnética plana no vácuo:
- Uma onda plana harmônica com vetor de onda
e frequência angular tem dependência temporal e espacial . Aqui tem módulo e para propagação ao longo de tem .
- Relação entre frequência linear
, pulsação e período :
- Comprimento de onda
e número de onda :
Aqui
é a velocidade da luz no vácuo.
- Relação entre
, e a impedância característica do meio . No vácuo:
Para uma onda plana no vácuo,
,
e
formam um sistema ortogonal com a regra da mão direita. Se
e
, então o campo magnético é
com a amplitude
Obs.: os sinais e direções vêm de
ou da regra do produto vetorial que garante
(atenção ao sentido).
- Valores físicos que usarei para validação:
-
. -
. -
(velocidade da luz no vácuo).
Vou aplicar essas fórmulas numericamente no próximo passo.
Passo 3
Cálculos numéricos passo a passo (cada fórmula com o valor substituído e calculado).
Dados iniciais:
Pulsação:
Numericamente:
Período:
Comprimento de onda:
Número de onda
:
Numericamente:
(checa rápida:
).
Impedância do vácuo:
Amplitude do campo magnético:
Resumo numérico (a usar no código):
-
. -
. -
. -
. -
. -
. -
. -
.
Perceba:
e
estão em fase (mesmo argumento do cosseno) para um meio sem perdas.
Passo 4
Decisões de projeto do programa (como vou gerar o gráfico 3D):
- Vou plotar superfícies 3D em que o eixo
do gráfico é a coordenada (posição ao longo da direção de propagação), o eixo é o tempo e o eixo vertical (z do plot) é a amplitude do campo (separado para e para ). Isso é conveniente para ver a dependência como uma onda que se desloca. - Escolhas de intervalo:
- z de
até (três comprimentos de onda dão boa visualização do padrão espacial). - t de
até (dois períodos suficientes para ver o movimento temporal).
- z de
- Discretização: uma malha razoável, por exemplo
e pontos (suficiente para plot bonito sem ser lento). - Fórmulas discretas usadas no código:
- O código vai gerar duas superfícies 3D lado a lado (uma para
e outra para ) e imprimir os parâmetros numéricos para validação.
Passo 5
Código Python completo (pronto para copiar, salvar como por exemplo
onda_em_3d.py e executar). O código gera os gráficos 3D e imprime os parâmetros de validação.import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# Parâmetros físicos
E0 = 1.0 # V/m
f = 1e6 # Hz (dado)
omega = 2*np.pi*f # rad/s
c = 299792458.0 # m/s
lambda_ = c / f # m
beta = omega / c # rad/m
mu0 = 4*np.pi*1e-7 # H/m
eps0 = 8.854187817e-12 # F/m
eta0 = np.sqrt(mu0/eps0) # Ohm
H0 = E0 / eta0 # A/m
T = 1.0 / f # s
# Impressão dos parâmetros para validação
print("Parâmetros para validação:")
print(f"f = {f:.6g} Hz")
print(f"omega = {omega:.12g} rad/s")
print(f"c = {c:.9g} m/s")
print(f"lambda = {lambda_:.9g} m")
print(f"beta = {beta:.12g} rad/m")
print(f"mu0 = {mu0:.12g} H/m")
print(f"eps0 = {eps0:.12g} F/m")
print(f"eta0 = {eta0:.9g} Ohm")
print(f"E0 = {E0:.6g} V/m")
print(f"H0 = {H0:.12g} A/m")
print(f"T = {T:.12g} s")
# Malha (espaço z e tempo t)
Nz = 200
Nt = 200
z_max = 3*lambda_
t_max = 2*T
z = np.linspace(0, z_max, Nz)
t = np.linspace(0, t_max, Nt)
Z, Tm = np.meshgrid(z, t)
# Campos na malha
Ex = E0 * np.cos(omega*Tm - beta*Z)
Hy = H0 * np.cos(omega*Tm - beta*Z)
# Plots 3D
fig = plt.figure(figsize=(14,6))
# Ex plot
ax1 = fig.add_subplot(1, 2, 1, projection='3d')
surf1 = ax1.plot_surface(Z, Tm*1e6, Ex, cmap='viridis', linewidth=0, antialiased=True)
ax1.set_title(r'\(E_x(z,t)\)')
ax1.set_xlabel('z (m)')
ax1.set_ylabel('t (µs)')
ax1.set_zlabel(r'\(E_x\) (V/m)')
fig.colorbar(surf1, ax=ax1, shrink=0.6, aspect=10)
# Hy plot
ax2 = fig.add_subplot(1, 2, 2, projection='3d')
surf2 = ax2.plot_surface(Z, Tm*1e6, Hy, cmap='plasma', linewidth=0, antialiased=True)
ax2.set_title(r'\(H_y(z,t)\)')
ax2.set_xlabel('z (m)')
ax2.set_ylabel('t (µs)')
ax2.set_zlabel(r'\(H_y\) (A/m)')
fig.colorbar(surf2, ax=ax2, shrink=0.6, aspect=10)
plt.suptitle('Ondas planas: \(E_x\) e \(H_y\) (propagação em +z)')
plt.tight_layout(rect=[0, 0.03, 1, 0.95])
plt.show()
Notas sobre o código:
- No eixo de tempo eu multiplico por
para exibir em microssegundos (rótulo ‘t (µs)’) porque é pequeno; isso facilita leitura do gráfico. - O código imprime todos os parâmetros numéricos calculados para conferência.
- Se quiser animação em vez de superfície, dá para fixar um
e atualizar uma linha que mostra deslocando-se em .
Passo 6
Como validar o resultado (o que deve ser observado no gráfico e nos números impressos):
- Conferir impressões: o programa imprime exatamente os valores de
, , , e . Compare com os valores calculados manualmente no Passo 3. - No gráfico:
- As superfícies de
e devem ter exatamente o mesmo formato espacial/temporal (mesma fase), mas escaladas pela razão . - A cada instante fixo, uma fatia do plano (E ou H versus
) deve mostrar uma função cosseno com comprimento de onda (verifique que a distância entre picos em é ). - A onda deve parecer deslocar-se no sentido de
quando se varre o tempo (os máximos se movem em direção a maiores para aumentar do argumento com o tempo).
- As superfícies de
- Check rápido: medir no gráfico a distância entre picos ao longo de
e confirmar que dá aproximadamente .
Passo 7
Dicas práticas e extensões rápidas (para a prova e para deixar o código mais útil)
- Se quiser ver vetores
no espaço 3D em vez de superfícies, use quiver em fatias de e fixos. - Para ondas que não estejam em fase (por exemplo com defasagem), substitua o cos por cos com um deslocamento de fase.
- Para propagar em direção qualquer (não só
), introduza um vetor unitário e use no argumento; ajuste direções de e ortogonais a . - Mantenha sempre checagens físicas:
deve dar local; e (ortogonalidade).
Força aí! Se estiver com preguiça de rodar agora, copie e cole o código, execute em um ambiente com Python, numpy e matplotlib e cheque os números impressos — isso vai te dar confiança para a prova.