Skip to content
Snippets Groups Projects
Commit 7c3b173a authored by abivarma.kandiah's avatar abivarma.kandiah
Browse files

Lagrange compute don't work with mod

parent f4a4715f
Branches
No related tags found
1 merge request!10Resolve "Create Lagrange method"
......@@ -38,7 +38,7 @@ class polynome():
coeff_poly_res = [0] * (len(self.coefs) + len(poly_2.coefs) - 1)
for index_1, value_1 in enumerate(self.coefs):
for index_2, value_2 in enumerate(poly_2.coefs):
coeff_poly_res[index_1 + index_2] += value_1 * value_2
coeff_poly_res[index_1 + index_2] += value_1 * value_2 % self.prime_mod
return polynome(coeff_poly_res)
def evaluate(self, x):
......@@ -46,4 +46,4 @@ class polynome():
res = 0
for i in range(len(self.coefs) - 1, -1, -1):
res = (res * x + self.coefs[i])
return res
return res % self.prime_mod
......@@ -23,34 +23,27 @@ def get_possibilities(l: list):
return p
def lagrange_compute(l: list) -> polynome:
poly = [0] * len(l)
for x_i, y_i in l:
#Produit des coeffs
coeff = [0] * len(l)
denominator = 1
for j in range(len(l)):
if x_i != j:
denominator *= x_i - l[j][0]
coeff[0] = 1 / denominator #Produit de chaque denominateur
for k in range(len(l)):
new_coeff = [0] * (len(l)+1)
if x_i != k:
for j in range(k+1 if k<x_i else k, 0, -1):
new_coeff[j+1] += coeff[j]
new_coeff[j] -= l[k][0] * coeff[j]
coeff = new_coeff
#Somme des coeffs
for s in range(len(l)):
poly[s] += y_i * coeff[s]
poly_l = [0] * len(l)
poly = polynome(poly_l)
for x_i, y_i in enumerate(l):
poly_n = polynome([1])
for x_k, y_k in enumerate(l):
if x_k != x_i:
#print(f"value : {x_i - x_k}")
d = inverse_mult(x_i-x_k, poly_n.prime_mod)
#print(f"inverse : {d}")
#poly_n = poly_n.mul(polynome([-x_k / (x_i-x_k), 1 / (x_i-x_k)]))
poly_n = poly_n.mul(polynome([-x_k * d % poly_n.prime_mod, d % poly_n.prime_mod]))
#poly_n.show()
poly_n = poly_n.mul(polynome([y_i[1] % poly_n.prime_mod]))
poly = poly.add(poly_n)
return poly
def check_nb_error(l: list, p: polynome) -> int:
pass
if __name__ == '__main__':
list_ = [(0, 1), (1, 2), (2, 3)]
list_ = [(0, 2), (1, 4), (2, 8)]
poly = lagrange_compute(list_)
print(poly)
poly.show()
print(poly.evaluate(1))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment