График из matplotlib не отображается так, как я хочу - PullRequest
0 голосов
/ 01 апреля 2020

Я новичок в matplotlib. Я пытаюсь проиллюстрировать линию полиномиальной регрессии некоторых данных с помощью ноутбуков Jupyter. Это данные:

x = np.array((1, 2, 2.5, 4, 6, 8, 8.5))
y = np.array((.4, .7, .8, 1, 1.2, 1.3, 1.4))

Затем я строю данные, используя этот код:

ax = plt.plot(x,y,'ro')
plt.grid()
plt.xlabel('x')
plt.ylabel('y')

Затем появляется этот график:

graph_1

Затем я ищу коэффициент уравнения полинома, используя правило Крамера, и это код:

n = len(x)
sx1 = x.sum()
sx2 = (x**2).sum()
sx3 = (x**3).sum()
sx4 = (x**4).sum()
sx5 = (x**5).sum()
sx6 = (x**6).sum()
sy = y.sum()
sxy = (x*y).sum()
sx2y = ((x**2)*y).sum()
sx3y = ((x**3)*y).sum()

A=[[n, sx1, sx2, sx3],[sx1, sx2, sx3, sx4],[sx2, sx3, sx4, sx5],[sx3, sx4, sx5, sx6]]
B=[sy, sxy, sx2y, sx3y]
C=[[n, sx1, sx2, sx3],[sx1, sx2, sx3, sx4],[sx2, sx3, sx4, sx5],[sx3, sx4, sx5, sx6]]
X=[]

for i in range(0,len(B)):
    for j in range(0,len(B)):
        C[j][i]=B[j]
        if i>0:
            C[j][i-1]=A[j][i-1]
    X.append(np.linalg.det(C)/np.linalg.det(A))
p = X[0]
q = X[1]
r = X[2]
s = X[3]

, поэтому полиномиальная функция:

def polinomFunction(x): return p + q*x + r*(x**2) + s*(x**3)

Тогда Я делаю связку x, чтобы построить линию с этим кодом:

xreg = np.array(np.arange(0,(x[-1]+1)*10))
xreg = xreg/10
yreg = polinomFunction(xreg)

Затем я достиг последнего шага, построив линию. Я использую этот код:

ax = plt.plot(x,y,'ro')
plt.plot(xreg,yreg,'b')
plt.title('Grafik Persamaan Polinomial')
plt.grid()
plt.xlabel('x')
plt.ylabel('y')

, но вдруг я получаю следующий график:

graph_2

Линия находится далеко от точка. После нескольких попыток изменить код и ничего не получить, я пытаюсь запустить новый блокнот jupyter, скопировать данные и коэффициент полиномиального уравнения, а затем сделать функцию, основанную на этом коэффициенте, и, как ни странно, она работает.

Это код, который я запускаю на новом ноутбуке:

x = np.array((1, 2, 2.5, 4, 6, 8, 8.5))
y = np.array((.4, .7, .8, 1, 1.2, 1.3, 1.4))
p= 0.0142
q= 0.4510
r= -0.0638
s= 0.0035

xreg = np.array(np.arange(0,(x[-1]+1)*10))
xreg = xreg/10
yreg = p + q*xreg + r*(xreg**2) + s*(xreg**3)

ax = plt.plot(x,y,'ro')
plt.plot(xreg,yreg,'b')
plt.grid()
plt.title('Grafik Persamaan Polinomial')
plt.xlabel('x')
plt.ylabel('y')

Это график, который я получаю:

graph_3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...