import numpy as np

def regressao_linear(x,y):

    N = len(x)

    #somas
    sumX = sum(x)
    sumY = sum(y)

    sumX2 = sum(x**2)
    sumY2 = sum(y**2)
    sumXY = sum(x * y)

    #m , b, r2
    m = (N * sumXY - sumX * sumY) / (N * sumX2 - sumX**2)
    b = (sumX2 * sumY - sumX * sumXY) / (N * sumX2 - sumX**2)
    r2 = (N * sumXY - sumX * sumY)**2 / ((N * sumX2 - sumX**2) * (N * sumY2 - sumY**2))

    #incertezas
    dM = abs(m) * np.sqrt(((1 / r2) - 1) / (N - 2))
    dB = dM * np.sqrt(sumX2 / N)

    return m, b, r2, dM, dB


def main():	

    #teste y=2x (m=2, b=0, r²=1)
    x = np.array([1, 2, 3, 4, 5])
    y = np.array([2, 4, 6, 8, 10])  

    m, b, r2, dm, db = regressao_linear(x, y)

    print(f"m = {m}")
    print(f"b = {b}")
    print(f"r² = {r2}")
    print(f"Δm = {dm}")
    print(f"Δb = {db}")

if __name__ == "__main__":
    main()