import numpy as np
import matplotlib.pyplot as plt
# Definir la función y su derivada
def f(x):
return x**2 / (x + 3)
def df(x):
return (x + 3)
# Parámetros del descenso de gradiente
learning_rate = 0.1
num_epochs = 18
initial_x = 8.03
initial_y = f(initial_x)
x_values = [initial_x]
costs = [initial_y]
# Realizar el descenso de gradiente
for _ in range(num_epochs):
x = x_values[-1]
gradient = df(x)
x_new = x - learning_rate * gradient
y_new = f(x_new)
x_values.append(x_new)
costs.append(y_new)
print("*******************************")
print("Historial de Costo:")
for index, misxvalues in enumerate(x_values):
print(f'Iteración {index} valores de x:{misxvalues}')
print("*******************************")
print("*******************************")
print("Historial de Costo:")
for index, miscostos in enumerate(costs):
print(f'Iteración {index}:{miscostos}')
print("*******************************")
# Crear dos gráficos independientes
plt.figure(figsize=(14, 8))
# Gráfica de la función de costo (MSE)
plt.subplot(1, 2, 1)
plt.plot(range(num_epochs + 1), costs, marker='o')
plt.xlabel('Época')
plt.ylabel('Costo (MSE)')
plt.title('Costo MSE en el Descenso de Gradiente')
# Gráfica de la parabola
plt.subplot(1, 2, 2)
x_range = np.linspace(-10, 10, 400)
plt.plot(x_range, f(x_range), label='f(x) = x^2 / (x + 3)')
plt.scatter(x_values, costs, c='red', label='Descenso de gradiente')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.ylim([-5, 30]) # Ajustar el rango del eje y
plt.legend()
plt.title('Descenso de Gradiente en la Función Parabólica')
plt.tight_layout()
plt.show()
"""
Parámetros que se deberían imprimir por Consola,
aparte de las gráficas.
*******************************
Historial de Costo:
Iteración 0 valores de x:8.03
Iteración 1 valores de x:7.937397610900462
Iteración 2 valores de x:7.844921017063485
Iteración 3 valores de x:7.752573277151892
Iteración 4 valores de x:7.660357543504276
Iteración 5 valores de x:7.568277065466035
Iteración 6 valores de x:7.4763351928479524
Iteración 7 valores de x:7.384535379517022
Iteración 8 valores de x:7.292881187124325
Iteración 9 valores de x:7.201376288974853
Iteración 10 valores de x:7.110024474044277
Iteración 11 valores de x:7.018829651147763
Iteración 12 valores de x:6.927795853265975
Iteración 13 valores de x:6.836927242033501
Iteración 14 valores de x:6.746228112394946
Iteración 15 valores de x:6.6557028974339865
Iteración 16 valores de x:6.565356173380653
Iteración 17 valores de x:6.475192664802085
Iteración 18 valores de x:6.385217249981943
*******************************
*******************************
Historial de Costo:
Iteración 0:5.8459564823209424
Iteración 1:5.760262456833318
Iteración 2:5.674802579671395
Iteración 3:5.589582220780676
Iteración 4:5.504606900364169
Iteración 5:5.419882293475179
Iteración 6:5.335414234738878
Iteración 7:5.251208723203833
Iteración 8:5.167271927324296
Iteración 9:5.083610190073743
Iteración 10:5.000230034189649
Iteración 11:4.917138167549073
Iteración 12:4.834341488673984
Iteración 13:4.751847092364681
Iteración 14:4.66966227545892
Iteración 15:4.587794542713561
Iteración 16:4.506251612804648
Iteración 17:4.4250414244407885
Iteración 18:4.344172142583637
"""