import numpy as np
import matplotlib.pyplot as plt
from e1 import regressao_linear

def grafico(L,X):
    plt.plot(L, X, 'ro')
    plt.xlabel('distância luz-alvo (cm)')
    plt.ylabel('distância máximos luminosos (cm)')
    plt.title('Regressão Linear')
    plt.grid()
    plt.show()


def grafico_reta(m, b, L, X):
    plt.plot(L, X, 'ro')
    plt.plot(L, m*L + b)
    plt.xlabel('distância luz-alvo (cm)')
    plt.ylabel('distância máximos luminosos (cm)')
    plt.title('Regressão Linear')
    plt.grid()
    plt.show()




def main():
    L = np.array([222.0, 207.5, 194.0, 171.5, 153.0, 133.0, 113.0, 92.0])
    X = np.array([2.3, 2.2, 2.0, 1.8, 1.6, 1.4, 1.2, 1.0])

    #a
    grafico(L,X)

    #b
    m, b, r2, dm, db = regressao_linear(L, X)
    print(f"m = {m:.8f}")
    print(f"b = {b:.8f}")
    print(f"r² = {r2:.8f}")
    print(f"Δm = {dm:.8f}")
    print(f"Δb = {db:.8f}")

    #c
    grafico_reta(m, b, L, X)

    #d
    newL = 165.0
    newX = m * newL + b
    print(f"Valor Interpolado de X = {newX:.1f} cm")


    #e
    L_mod = L.copy()
    L_mod[-1] += 5
    grafico_reta(m, b, L_mod, X)
    m, b, r2, dm, db = regressao_linear(L_mod, X)
    print(f"m = {m:.8f}")
    print(f"b = {b:.8f}")
    print(f"r² = {r2:.8f}")
    print(f"Δm = {dm:.8f}")
    print(f"Δb = {db:.8f}")

if __name__ == "__main__":
    main()