Método Lax-Wendroff de dois passos: mudanças entre as edições
Ir para navegação
Ir para pesquisar
(Criou página com 'Neste método é usando diferenças adiantadas no espaço e no tempo, tomando médias aritméticas na posição. Assim, <center><math> \frac{u_i^{n+1} - u_i^{n}}{\Delta t} = -v \frac{u_{i+\frac{1}{2}}^{n+\frac{1}{2}} - u_{i-\frac{1}{2}}^{n+\frac{1}{2}}}{\Delta x} </math></center>(22) onde <center><math> \begin{cases} u_{i+\frac{1}{2}}^{n+\frac{1}{2}} = \frac{1}{2}(u_{i+1}^n + u_{i}^n) - 2r(u_{i+1}^n - u_{i}^n) \\ u_{i-\frac{1}{2}}^{n+\frac{1}{2}} = \frac{1}{2}(u_{i}^n...') |
Sem resumo de edição |
||
Linha 3: | Linha 3: | ||
<center><math> | <center><math> | ||
\frac{u_i^{n+1} - u_i^{n}}{\Delta t} = -v \frac{u_{i+\frac{1}{2}}^{n+\frac{1}{2}} - u_{i-\frac{1}{2}}^{n+\frac{1}{2}}}{\Delta x} | \frac{u_i^{n+1} - u_i^{n}}{\Delta t} = -v \frac{u_{i+\frac{1}{2}}^{n+\frac{1}{2}} - u_{i-\frac{1}{2}}^{n+\frac{1}{2}}}{\Delta x} | ||
</math></center>( | </math></center>(4) | ||
onde | onde | ||
Linha 12: | Linha 12: | ||
u_{i-\frac{1}{2}}^{n+\frac{1}{2}} = \frac{1}{2}(u_{i}^n - u_{i-1}^n) - 2r(u_{i}^n - u_{i-1}^n) | u_{i-\frac{1}{2}}^{n+\frac{1}{2}} = \frac{1}{2}(u_{i}^n - u_{i-1}^n) - 2r(u_{i}^n - u_{i-1}^n) | ||
\end{cases} | \end{cases} | ||
</math></center>( | </math></center>(5) | ||
Substituindo os valores de ( | Substituindo os valores de (5) em (4): | ||
<center><math> | <center><math> | ||
u_i^{n+1} = u_i^{n} - \frac{r}{2}(u_{i+1}^{n} - u_{i-1}^{n}) + \frac{r^2}{2}(u_{i+1}^{n} - 2u_{i}^{n} + u_{i-1}^{n}) | u_i^{n+1} = u_i^{n} - \frac{r}{2}(u_{i+1}^{n} - u_{i-1}^{n}) + \frac{r^2}{2}(u_{i+1}^{n} - 2u_{i}^{n} + u_{i-1}^{n}) | ||
</math></center>( | </math></center>(6) | ||
<source lang = "python"> | <source lang = "python"> |
Edição atual tal como às 19h47min de 5 de fevereiro de 2024
Neste método é usando diferenças adiantadas no espaço e no tempo, tomando médias aritméticas na posição. Assim,
(4)
onde
(5)
Substituindo os valores de (5) em (4):
(6)
# Solução pelo método Lax-Wendroff dois passos para equação de advecção
def LaxW2Pad(L, tf, v, Nx, Nt):
"""
Parâmetros:
- L: comprimento
- tf: tempo final
- v: velocidade de propagação
- Nx: número de pontos na direção espacial
- Nt: número de pontos na direção temporal
Retorna:
- Matriz com a solução da equação da onda
"""
dx = L / (Nx - 1)
dt = tf / (Nt - 1)
r = v * dt / dx
u = np.zeros((Nt, Nx+1))
# Condição inicial: u(x,0) = f(x)
x = np.linspace(0, L, Nx+1)
u[0,:] = 1-np.cos(x) # Função que descreve a perturbação da onda
# Condições de contorno borda infinita:
xpos = np.zeros(Nx+1)
xneg = np.zeros(Nx+1)
for i in range(0,Nx+1):
xpos[i] = i+1
xneg[i] = i-1
xpos[Nx] = 0
xneg[0] = Nx
# Iteração no tempo
for n in range(0, Nt - 1):
for i in range(0, Nx+1):
u[n+1,i] = u[n,i] + (r/2) * (u[n, int(xpos[i])] - u[n,int(xneg[i])]) + (r/2)**2 * (u[n, int(xpos[i])] - 2*u[n,i] + u[n,int(xneg[i])])
return u
# Parâmetros
L = 2*np.pi
tf =1
v = 1 # -1. muda direção de propagação
Nx = 100
Nt = 500
solv6 = LaxW2Pad(L, tf, v, Nx, Nt)
listX = np.linspace(0, L, Nx+1)
listT = np.linspace(0, tf, Nt)
X, T = np.meshgrid(listX, listT)
plt.figure(figsize=(10, 6))
plt.pcolormesh(X, T, solv6, cmap='viridis', shading='auto')
plt.colorbar(label='Amplitude(u)')
plt.xlabel('Posição (x)')
plt.ylabel('Tempo (t)')
plt.title('Solução Lax - Wendroff (2P) da Equação da advecção (1D)', fontsize=16)
plt.show()
# Teste: Plota todas as curvas amplitude por posição de todos os tempos:
for tt in range(len(listT-1)):
amplitudes_tt = solv6[ tt,:]
plt.plot(listX, amplitudes_tt)
plt.title('Amplitude em Função da Posição')
plt.xlabel('Posição (x)')
plt.ylabel('Amplitude (u)')
plt.legend()
plt.grid(True)
plt.show()