import numpy as np

def converge_linear(d, k_target=1.0, m_target=1, x_target=1, alpha=0.01):
    k = 1.0    # slope (float)
    m = 1.0    # intercept (will become int)
    x = 1.0    # input (will become int)
    
    for _ in range(10000):
        y = k * x + m
        
        # Three separate errors
        err1 = d - y            # Equation: k*x + m = d (main)
        err2 = m_target - m     # m error: drive toward whole number target
        err3 = x_target - x     # x error: drive toward whole number target
        
        # Separate adjustments
        k += alpha * err1 / max(x, 0.001)  # k responds to equation error
        m += alpha * (err1 + err2)         # m responds to both errors
        x += alpha * (err1 + err3)         # x responds to both errors
    
    return k, int(round(m)), int(round(x))

k,m,x = converge_linear(11*7)
