#!/usr/bin/python3
import numpy as np
import matplotlib.pyplot as plt
import random as rand
from sklearn import svm
from scipy.optimize import curve_fit
n=500
X=[]
Y=[]
for i in range(n):
X.append(rand.uniform(0,2))
Y.append(X[i]**2+rand.gauss(0,1))
plt.plot(X,Y,'x')
X=np.array(X)
Xt=X.reshape((500,1))
def func(x,p1,p2,p3,p4,p5):
return p1*x**p2+p3*np.exp(x*p4)+p5
popt, pcov = curve_fit(func, X, Y)
p1 = popt[0]
p2 = popt[1]
p3 = popt[2]
p4 = popt[3]
p5 = popt[4]
print(popt)
ypred=func(X,p1,p2,p3,p4,p5)
print(np.sum(Y-ypred))
print(np.mean(Y-ypred))
plt.plot(X,ypred,'rx')
plt.show()
plt.plot(Y,Y-ypred,'ro')
plt.grid()
plt.show()