From 629e1bc3ae1fbafd5c999617535efb4aec816240 Mon Sep 17 00:00:00 2001 From: "dario.genga" <dario.genga@etu.hesge.ch> Date: Wed, 8 Dec 2021 16:06:17 +0100 Subject: [PATCH] Add lagrange polynomial The prime number is not used for now. --- polynomial.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/polynomial.py b/polynomial.py index 6268848..09d8263 100644 --- a/polynomial.py +++ b/polynomial.py @@ -1,3 +1,4 @@ +import math from numbers import Number import itertools import json @@ -77,6 +78,7 @@ class Polynomial: str_value = "" for i, x in enumerate(reversed(self.value)): + x = math.ceil(x) if x == 0: continue if i != 0: @@ -135,7 +137,29 @@ def modular_inverse(a, n): def compute_lagrange_polynomial(points, prime_number): - pass + nb_points = len(points) + lagrange = Polynomial((0,)) + + # Create a polynomial for each points + for i in range(nb_points): + poly_li = Polynomial((1,)) + divider = 1 + + # Compute the lagrange polynomial + for k in range(nb_points): + if k != i: + dividend = Polynomial((-points[k][0], 1)) # x - value + + poly_li *= dividend + divider *= (points[i][0] - points[k][0]) + + divider = 1 / divider + point_yi = points[i][1] + poly_li = poly_li * Polynomial((divider,)) * Polynomial((point_yi,)) + + lagrange += poly_li + + return lagrange def reed_solomon(points, data_length, last_error_index, prime_number): -- GitLab