Линия наилучшего соответствия

Линией наилучшего соответствия называется прямая, проходящая на наименьшем удалении от набора из n точек. В данном упражнении мы предположим, что каждая точка в коллекции обладает координатами x и y. Символы x̅ и y̅ мы будем использовать для подсчета средних значений по осям x и y соответственно. Линия наилучшего соответствия представлена формулой y = mx+b, где m и b вычисляются по следующим формулам:

Напишите программу, которая будет запрашивать у пользователя координаты коллекции точек. При этом пользователь должен вводить сначала координату x, а затем y. Ввод координат может продолжаться до тех пор, пока пользователь не оставит пустым ввод координаты x. Отобразите формулу, характеризующую линию наилучшего соответствия, вида y = mx + b путем замены переменных m и b на значения, вычисленные по предыдущим формулам. Например, если пользователь введет три точки (1, 1), (2, 2.1) и (3, 2.9), итоговая формула должна приобрести вид y = 0,95x + 0,1.

from statistics import mean
list_x = []
list_y = []
sum_sq = 0
sum_pr = 0 
while True:
    x = input("Введите значение x (пропуск для завершения): ")
    if x == '':
        break
    x = float(x)
    sum_sq += x * x # подсчет суммы квадратов для формулы
    list_x.append(x)
    y = float(input('Введите значение y: '))
    list_y.append(y)
    sum_pr += x * y # накопление суммы произведений
average_x = mean(list_x) # среднее значение и суммы
average_y = mean(list_y)
sum_x = sum(list_x)
sum_y = sum(list_y)
m = round((sum_pr - (sum_x * sum_y)/len(list_x)) /
           (sum_sq - sum_x ** 2 / len(list_x)), 2)
b = round(average_y - m * average_y, 2)
print(f'y={m}x+{b}')
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: