计算一些方程

时间:2014-03-22 09:16:30

标签: java function equations

具备以下功能:

f(x)= 4(x-1)(x-3)/(0-1)(0-3)
g(x)= 2(x-0)(x-3)/(1-0)(1-3)
h(x)= 3(x-0)(x-1)/(3-0)(3-1)

我想计算他们的总和mod p。供参考,p=7

然而,我最感兴趣的是最终结果中x的幂的系数。会告诉你我的意思

我的步骤:

f(x)=4(x-1)(x-3)/3
g(x)=-(x-0)(x-3)
h(x)=(x-0)(x-1)/2

f(x)+g(x)+h(x)=(8(x-1)(x-3)-6(x-0)(x-3)+3(x-0)(x-1))/6
=(8(x^2-4x+3)-6(x^2-3x)+3(x^2-x))/6
=(8x^2-32x+24-6x^2+18x+3x^2-3x)/6
=(5x^2-17x+24)/6

1/6 mod 7=6

所以,我们将乘以6而不是除以括号,它也将成为mod 7:

=(5x^2-17x+24)*6
=30x^2-102+144 

这也是mod 7,但如果我能得到系数,我可以分别为每个系数做。最终结果为2x^2+3x+4

所以,我感兴趣的是系数30,-102和144(或2,3,4,并不重要)。如果有更快或更简单的方法(我可能在计算中做了无用的步骤),我如何在java中计算从f + g + h获取它们?(

1 个答案:

答案 0 :(得分:1)

据我所知,你正在计算Lagrange polynomials

在3个数据点(x_0,y_0),(x_1,y_1),(x_2,y_2)的特定情况下 - 在您的示例中为(0,4),(1,2),(3,3) ),计算很容易。

f(x)= y_0 * l_0(x)= y_0 /((x_0-x_1)*(x_0-x_2))*(x ^ 2 + - (x_1 + x_2)* x +(x_1 * x_2) )

其他两个多项式可以类似地计算。

在它们的总和中,你只需要将相应的系数组合在一起,然后进行模运算。 (可以使用逆元素的乘法进行除法,并且在素数模数的情况下,可以在Fermat's little theorem的帮助下容易地计算逆元素作为^(p-2)。)