# -*- coding: utf-8 -*- """ Created on Thu Apr 3 16:31:30 2025 @author: Vitor_PC """ import numpy as np import matplotlib.pyplot as plt # Parâmetros da função A1 = 1.0 A2 = 0.5 k1 = 2.0 alpha = 0.1 beta = 0.5 # Discretização de espaço e tempo x = np.linspace(-1, 1, 200) t = np.linspace(0, 5, 200) # Criação dos modos originais # Modo espacial 1: tanh(k1 * x) spatial_mode1 = np.tanh(k1 * x) # Modo espacial 2: x^2 - x^4 spatial_mode2 = x**2 - x**4 # Modo temporal 1: 1 + alpha * t^2 temporal_mode1 = 1 + alpha * t**2 # Modo temporal 2: exp(-beta * t) temporal_mode2 = np.exp(-beta * t) # Gerando a função 2D f(x,t) # Usamos meshgrid para gerar a matriz de f X, T = np.meshgrid(x, t, indexing='ij') f = A1 * spatial_mode1[:, None] * temporal_mode1[None, :] + A2 * spatial_mode2[:, None] * temporal_mode2[None, :] # Plot dos modos originais plt.figure(figsize=(14, 4)) # Modos espaciais plt.subplot(1, 2, 1) plt.plot(x, spatial_mode1, label=r'$\tanh(k_1 x)$') plt.plot(x, spatial_mode2, label=r'$x^2 - x^4$') plt.xlabel('x') plt.title('Modos Espaciais Originais') plt.legend() plt.grid(True) # Modos temporais plt.subplot(1, 2, 2) plt.plot(t, temporal_mode1, label=r'$1 + \alpha t^2$') plt.plot(t, temporal_mode2, label=r'$e^{-\beta t}$') plt.xlabel('t') plt.title('Modos Temporais Originais') plt.legend() plt.grid(True) plt.tight_layout() plt.show() # Plot da função 2D f(x,t) plt.figure(figsize=(6, 5)) plt.pcolor(x, t, f.T, shading='auto', cmap='viridis') plt.xlabel('x') plt.ylabel('t') plt.title('Função 2D f(x,t)') plt.colorbar(label='f(x,t)') plt.show() # Realizando a SVD para POD # f é uma matriz de dimensão (len(x) x len(t)) U, S, VT = np.linalg.svd(f, full_matrices=False) # As colunas de U são os modos espaciais e as linhas de VT são os modos temporais # Plot dos 2 primeiros modos espaciais extraídos pela SVD plt.figure(figsize=(14, 4)) plt.subplot(1, 2, 1) plt.plot(x, U[:, 0], label='Modo espacial 1 (POD)') plt.plot(x, U[:, 1], label='Modo espacial 2 (POD)') plt.xlabel('x') plt.title('Modos Espaciais POD') plt.legend() plt.grid(True) # Plot dos 2 primeiros modos temporais extraídos pela SVD # Como VT tem as linhas com os modos temporais, usamos VT[0, :] e VT[1, :] plt.subplot(1, 2, 2) plt.plot(t, VT[0, :], label='Modo temporal 1 (POD)') plt.plot(t, VT[1, :], label='Modo temporal 2 (POD)') plt.xlabel('t') plt.title('Modos Temporais POD') plt.legend() plt.grid(True) plt.tight_layout() plt.show()