Está en la página 1de 3

In [1]: import numpy as np

import matplotlib.pyplot as plt

def calcular_derivada(tiempo, velocidad, tipo='progresiva'):


n = len(tiempo)
derivadas = [0] * n

for i in range(n):
if tipo == 'progresiva':
if i == n - 1:
derivadas[i] = (velocidad[i] - velocidad[i - 1]) / (tiempo[i] - tiempo[i - 1])
else:
derivadas[i] = (velocidad[i + 1] - velocidad[i]) / (tiempo[i + 1] - tiempo[i])
elif tipo == 'centrada':
if i == 0:
derivadas[i] = (velocidad[i + 1] - velocidad[i]) / (tiempo[i + 1] - tiempo[i])
elif i == n - 1:
derivadas[i] = (velocidad[i] - velocidad[i - 1]) / (tiempo[i] - tiempo[i - 1])
else:
derivadas[i] = (velocidad[i + 1] - velocidad[i - 1]) / (tiempo[i + 1] - tiempo[i - 1])
else:
raise ValueError("Tipo de derivada no válido. Debe ser 'progresiva' o 'centrada'.")

return derivadas

def calcular_error(derivadas_progresiva, derivadas_centrada):


errores = np.abs(np.array(derivadas_progresiva) - np.array(derivadas_centrada))
error_promedio = np.mean(errores)
return errores, error_promedio

def main():
n = int(input("Ingrese el número de puntos de datos: "))
tiempo = []
velocidad = []

print("Ingrese los datos en formato (tiempo velocidad):")


for _ in range(n):
t, v = map(float, input().split())
tiempo.append(t)
velocidad.append(v)

tipo_derivada = input("Seleccione el tipo de derivada a calcular (progresiva/centrada): ").lower()

derivadas_progresiva = calcular_derivada(tiempo, velocidad, tipo='progresiva')


derivadas_centrada = calcular_derivada(tiempo, velocidad, tipo='centrada')

errores, error_promedio = calcular_error(derivadas_progresiva, derivadas_centrada)

# Crear gráfico de velocidad vs tiempo


plt.figure(figsize=(10, 5))
plt.plot(tiempo, velocidad, marker='o', linestyle='-', color='b', label='Velocidad')
plt.xlabel('Tiempo')
plt.ylabel('Velocidad')
plt.title('Velocidad vs Tiempo')
plt.grid(True)
plt.legend()

# Crear gráfico de derivada de velocidad vs tiempo (progresiva)


plt.figure(figsize=(10, 5))
plt.plot(tiempo, derivadas_progresiva, marker='o', linestyle='-', color='r', label='Derivada Progresiva')
plt.xlabel('Tiempo')
plt.ylabel('Derivada de Velocidad')
plt.title('Derivada de Velocidad (Progresiva) vs Tiempo')
plt.grid(True)
plt.legend()

# Crear gráfico de derivada de velocidad vs tiempo (centrada)


plt.figure(figsize=(10, 5))
plt.plot(tiempo, derivadas_centrada, marker='o', linestyle='-', color='g', label='Derivada Centrada')
plt.xlabel('Tiempo')
plt.ylabel('Derivada de Velocidad')
plt.title('Derivada de Velocidad (Centrada) vs Tiempo')
plt.grid(True)
plt.legend()

# Mostrar los gráficos


plt.show()

# Imprimir errores y error promedio


print("\nErrores entre derivadas Progresiva y Centrada:")
print("Tiempo\tError")
for t, error in zip(tiempo, errores):
print(f"{t}\t{error}")
print(f"\nError promedio: {error_promedio}")

if __name__ == "__main__":
main()
Ingrese el número de puntos de datos: 6
Ingrese los datos en formato (tiempo velocidad):
10 80
12 70
14 68
16 69
18 72
20 80
Seleccione el tipo de derivada a calcular (progresiva/centrada): centrada
Errores entre derivadas Progresiva y Centrada:
Tiempo Error
10.0 0.0
12.0 2.0
14.0 0.75
16.0 0.5
18.0 1.25
20.0 0.0

Error promedio: 0.75

In [ ]:

También podría gustarte