Ваша функция локально постоянна, поэтому многие методы оптимизации, которые для работы работают с небольшими приращениями m и t, не будут работать хорошо.
Если вы знаете некоторые границы для ваших переменных m и t, вы можете перебрать свой результат методом грубой силы, либо вручную (просто обведите два np.arange () для m и t и найдите минимум), либоиспользуя scipy.optimize.brute () .
Чтобы привести рабочий пример с вашими данными:
import numpy as np
import scipy.optimize as optimize
x_data_num = np.array([26, 73, 269, 361, 757])
y_data_num = np.array([7, 21, 77, 103, 216])
def test_func(x, m, t):
return np.round(m*x+t)
def func_to_minimize(p):
return np.sum(np.abs(test_func(x_data_num, p[0], p[1]) - y_data_num))
x0 = optimize.brute(func_to_minimize, ranges=[slice(-1.,1.,0.1),slice(-1.,1.,0.1)])
print(x0)
Обратите внимание, что это может быть очень медленным, если вашломтики большие / содержат много точек.