获取多项式的系数

时间:2019-05-05 17:47:25

标签: python polynomial-math polynomials

我正在做此作业,作为作业的一部分。我有144位二进制密钥,每个密钥对应一个特定的类。每个密钥被分成8个16位段,其中每个段对应于系数(c8-c0)之一。我在功能中对其进行了编码:

f(x) = c8*x^8 + c7*x^7 + c6*x^6 + c5*x^5 + c4*x^4 + c3*x^3 + c2*x^2 + c1*x + c0 

其中,x是对应于特定类的唯一整数。 所以每个x我都有一个fx值。

下面的代码是我用于编码的代码。

fx = [] 
n = 16
for j in range(0,len(train_unique_label)) :
    split = [kcrc[j][i:i+n] for i in range(0, len(kcrc[j]), n)]
    fx.append(int(split[8],2)*j**8 + int(split[7],2)*j**7 + int(split[6],2)*j**6 + int(split[5],2)*j**5 + int(split[4],2)*j**4
              + int(split[3],2)*j**3 + int(split[2],2)*j**2 + int(split[1],2)*j + int(split[0],2))
train_unique_label : a list of unique integers 
n :number of bits in each segment
kcrc : list of keys

我编码后创建了一个字典,其中x是键,fx是它的值,如下所示:

x = train_unique_label
g = dict(zip(x,fx))

我想做的是。每当我得到特定类别的值时,我都想基于x和fx计算系数,怎么办?

1 个答案:

答案 0 :(得分:0)

使用numpy包中的polyfit方法,可以很容易地使用点来查找多项式系数:

import numpy as np

x = np.arange(-4, 5)            # array([-4, -3, -2, -1,  0,  1,  2,  3,  4])
y = np.array([-1,1]*4 + [0])    # array([-1,  1, -1,  1, -1,  1, -1,  1,  0])

c = np.polyfit(x, y, 8)
#array([-6.32440476e-03,  9.92063492e-05,  1.77430556e-01, -1.38888889e-03,
#       -1.42100694e+00,  4.86111111e-03,  3.24990079e+00, -3.57142857e-03,
#       -1.00000000e+00])

如文档中所述,该方法将平方误差最小化。对于阶数为n的多项式,需要花费n+1点或更多。

从图形上讲,MCVE给出:

import matplotlib.pyplot as plt
t = np.linspace(-4.1, 4.1, 100)
p = np.poly1d(c)

fig, axe = plt.subplots()
axe.plot(x, y, 'o')
axe.plot(t, p(t))
axe.grid()

enter image description here