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
No related branches found
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.
Finish editing this message first!
Please register or to comment