Beispiel #1
0
def mostrar_graficas(h, num_periodos, f, g, x_0, y_0, t_0, titulo, freq=1.0, fichero=None):
    # periodo de la señal periódica
    periodo = 2.0 * math.pi / freq

    # numero total de pasos de integración
    n = int(num_periodos * periodo / h)

    # calculo de la tabla de integracion del sistema
    sol_numerica = eq_diferenciales.runge_kutta_sistema(h, n, f, g, x_0, y_0, t_0)

    # se obtienen de la tabla de valores los vectores de tiempo,
    tiempo = []
    numerica = []
    for t, x, _ in sol_numerica:
        tiempo.append(t)
        numerica.append(x)

        # se utiliza matplotlib para generar la gráfica de la señal
    plt.subplot(211)
    plt.plot(tiempo, numerica)
    plt.title("Movimiento del %s" % titulo)
    plt.xlabel("Tiempo [s]")
    plt.ylabel("x(t)")

    # se calcula la señal para 50 periodos
    fourier_periodos = 50
    pasos_periodo = periodo / h

    # numero de pasos de integración para muestrear fourier_periodos
    n = int(fourier_periodos * pasos_periodo)
    sol_numerica = eq_diferenciales.runge_kutta_sistema(h, n, f, g, x_0, y_0, t_0)

    # se define el número de muestras por periodo
    muestras_periodo = 4
    # se muestrea la señal
    muestra = transformada_fourier.muestrear(sol_numerica, muestras_periodo, pasos_periodo)
    # se obtiene su transformada de Fourier
    fourier = transformada_fourier.tfd_promedio(fourier_periodos, muestras_periodo, muestra)
    # se calcula su espectro de potencia
    espectro_potencia = transformada_fourier.espectro_pot(fourier)

    # generación de la gráfica de espectro de potencias
    n = range(len(espectro_potencia))
    plt.subplot(212)
    plt.plot(n, espectro_potencia, "r^")
    plt.vlines(n, [0], espectro_potencia, "r")
    plt.title("Espectro de potencia")
    plt.xlabel("Frecuencias constitutivas [n]")
    plt.xticks(n)
    plt.ylabel("Potencia [J/s]")
    plt.tight_layout()

    # escritura de gráfica en fichero
    if fichero is not None:
        plt.savefig(fichero)

        # visualización de la gráfica
    plt.show()
def f(x, y, t):
	return y

def g(x, y, t):
	return 0.516 * math.cos(1.2 * t) - x - 0.52 * y - x * x


num_periodos = 5
x_0 = 0.0
y_0 = 0.0
t_0 = 0.0
periodo = 2.0 * math.pi 

h1 = 0.08
n = int(periodo / h1)
sol_numerica_h1 = eq_diferenciales.runge_kutta_sistema(h1, n, f, g, x_0, y_0, t_0)

h2 = 0.04
n = int(periodo / h2)
sol_numerica_h2 = eq_diferenciales.runge_kutta_sistema(h2, n, f, g, x_0, y_0, t_0)

h3 = 0.02
n = int(periodo / h3)
sol_numerica_h3 = eq_diferenciales.runge_kutta_sistema(h3, n, f, g, x_0, y_0, t_0)

h4 = 0.01
n = int(periodo / h4)
sol_numerica_h4 = eq_diferenciales.runge_kutta_sistema(h4, n, f, g, x_0, y_0, t_0)

h5 = 0.005
n = int(periodo / h5)
# -*- coding: utf8 -*- 

from metodos import eq_diferenciales
import math
import matplotlib.pyplot as plt

def f(x, y, t):
	return y

def g(x, y, t):
	return -x

h = 0.05
periodo = 2.0 * math.pi 
n = int(1 * periodo / h)
sol_numerica = eq_diferenciales.runge_kutta_sistema(h, n, f, g, 1.0, 0.0, 0.0)

tiempo = []
numerica = []
analitica = []
for t, x, _ in sol_numerica:
	tiempo.append(t)
	numerica.append(x)

plt.plot(tiempo, numerica, label='Solución numérica')

plt.show()