%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
from IPython.display import HTML
from numpy import linalg as LA
import matplotlib.animation as animation
### Create data
x = np.linspace(-10,10,1000)
y = np.exp(x)
n = 1
a1,M1 = fitpade(x,y,n)
out1 = getpade(a1,x,n)
n = 2
a2,M2 = fitpade(x,y,n)
out2 = getpade(a2,x,n)
n = 3
a3,M3 = fitpade(x,y,n)
out3 = getpade(a3,x,n)
n = 4
a4,M4 = fitpade(x,y,n)
out4 = getpade(a4,x,n)
n = 5
a5,M5 = fitpade(x,y,n)
out5 = getpade(a5,x,n)
def getpade(a,x,n):
for i in range(0,n):
num = a[i]*(x**i)
for i in range(1,n+1):
den = a[i+n]*x**(i+n-n)
return(num/(1+den))
fig=plt.figure(figsize=(8, 5), dpi= 180, facecolor='w', edgecolor='k')
ax = fig.gca()
ax.plot(x,y,'k',linewidth = 2,label = 'e^x')
ax.plot(x,out1,label = 'order 1,1')
ax.plot(x,out2,label = 'order 2,2')
ax.plot(x,out3,label = 'order 3,3')
ax.plot(x,out4,label = 'order 4,4')
ax.plot(x,out5,label = 'order 5,5')
handles, labels = ax.get_legend_handles_labels()
plt.legend(handles, labels)
plt.ylim(-10, 10)
plt.xlim(-10, 10)
def fitpade(x,y,n):
# create pade matrix
m = x.shape[0]
M = np.ones((m,2*n+1))
for i in range(0,n+1):
M[:,i] = x**i
for i in range(1,n+1):
M[:,n+i] = -(x**i)*y
#invert matrix
u,s,v = LA.svd(M,full_matrices=False)
s = np.diag(s)
# fit data
a = np.dot(np.dot(v.T,np.dot(LA.inv(s),u.T)),y)
return(a,M)
def RBF(x,n,knots):
# create vandermonde
m = x.shape[0]
M = np.ones((m,n))
for i in range(1,n):
M[:,i] = np.abs(x-knots[i])**3
return(M)
def vandermonde(x,n):
# create vandermonde
m = x.shape[0]
M = np.ones((m,n))
for i in range(1,n):
M[:,i] = x**i
return(M)
def fitvandermonde(x,y,n):
# create vandermonde
m = x.shape[0]
M = np.ones((m,n))
for i in range(1,n):
M[:,i] = x**i
#invert matrix
u,s,v = LA.svd(M,full_matrices=False)
s = np.diag(s)
# fit data
a = np.dot(np.dot(v.T,np.dot(LA.inv(s),u.T)),y)
return(a,M)
def fitRBF(x,y,n,knots):
# create vandermonde
m = x.shape[0]
M = np.ones((m,n))
for i in range(1,n):
M[:,i] = np.abs(x-knots[i])**3
#invert matrix
u,s,v = LA.svd(M,full_matrices=False)
s = np.diag(s)
# fit data
a = np.dot(np.dot(v.T,np.dot(LA.inv(s),u.T)),y)
return(a,M)
# create data
x = np.linspace(-10,10,20)
y = np.sign(x)
# fit data
av5, Mv5 = fitvandermonde(x,y,5)
av10, Mv10 = fitvandermonde(x,y,10)
av15, Mv15 = fitvandermonde(x,y,15)
fig=plt.figure(figsize=(8, 5), dpi= 180, facecolor='w', edgecolor='k')
ax = fig.gca()
ax.plot(y,'k',linewidth = 4)
ax.plot(np.dot(Mv5,av5),'b',linewidth = 3,alpha = 0.6,label = '5')
ax.plot(np.dot(Mv10,av10),'orange',linewidth = 3,alpha = 0.7,label = '10')
ax.plot(np.dot(Mv15,av15),'r',linewidth = 3,alpha = 0.9, label = '15')
handles, labels = ax.get_legend_handles_labels()
plt.legend(handles, labels)
plt.ylim(-2, 2)
plt.title('fitting step function with vandermonde matrix')
# create data
x = np.linspace(-10,10,20)
y = np.sign(x)
c5 = np.linspace(-10,10,5)
c10 = np.linspace(-10,10,10)
c15 = np.linspace(-10,10,15)
# fit data
ar5, Mr5 = fitRBF(x,y,5,c5)
ar10, Mr10 = fitRBF(x,y,10,c10)
ar15, Mr15 = fitRBF(x,y,15,c15)
fig=plt.figure(figsize=(8, 5), dpi= 180, facecolor='w', edgecolor='k')
ax = fig.gca()
ax.plot(y,'k',linewidth = 4)
ax.plot(np.dot(Mr5,ar5),'b',linewidth = 3,alpha = 0.6,label = '5')
ax.plot(np.dot(Mr10,ar10),'orange',linewidth = 3,alpha = 0.7,label = '10')
ax.plot(np.dot(Mr15,ar15),'r',linewidth = 3,alpha = 0.9, label = '15')
handles, labels = ax.get_legend_handles_labels()
plt.legend(handles, labels)
plt.ylim(-2, 2)
plt.title('fitting step function with RBF matrix')
Mr5 = RBF(np.linspace(-10.5,10.5,20),5,np.linspace(-10.5,10.5,5))
Mr10 = RBF(np.linspace(-10.5,10.5,20),10,np.linspace(-10.5,10.5,10))
Mr15 = RBF(np.linspace(-10.5,10.5,20),15,np.linspace(-10.5,10.5,15))
Mv5 = vandermonde(np.linspace(-10.5,10.5,20),5)
Mv10 = vandermonde(np.linspace(-10.5,10.5,20),10)
Mv15 = vandermonde(np.linspace(-10.5,10.5,20),15)
fig=plt.figure(figsize=(8, 5), dpi= 180, facecolor='w', edgecolor='k')
ax = fig.gca()
ax.plot(y,'k',linewidth = 4)
ax.plot(np.dot(Mr5,ar5),'b',linewidth = 2,alpha = 0.6,label = 'rbf 5')
ax.plot(np.dot(Mr10,ar10),'orange',linewidth = 2,alpha = 0.7,label = 'rbf 10')
ax.plot(np.dot(Mr15,ar15),'r',linewidth = 2,alpha = 0.9, label = 'rbf 15')
ax.plot(np.dot(Mv5,av5),'b',linewidth = 2,alpha = 1,label = 'vand 5',linestyle = '--')
ax.plot(np.dot(Mv10,av10),'orange',linewidth = 2,alpha = 1,label = 'vand 10',linestyle = '--')
ax.plot(np.dot(Mv15,av15),'r',linewidth = 2,alpha = 1, label = 'vand 15',linestyle = '--')
handles, labels = ax.get_legend_handles_labels()
plt.legend(handles, labels)
plt.ylim(-2, 2)
plt.title('fitting step function with RBF matrix')
errorV = np.array((np.sum((y-np.dot(Mv5,av5))**2),np.sum((y-np.dot(Mv10,av10))**2)
,np.sum((y-np.dot(Mv15,av15))**2)))
errorR = np.array((np.sum((y-np.dot(Mr5,ar5))**2),np.sum((y-np.dot(Mr10,ar10))**2)
,np.sum((y-np.dot(Mr15,ar15))**2)))
fig=plt.figure(figsize=(8, 5), dpi= 180, facecolor='w', edgecolor='k')
ax = fig.gca()
ax.semilogy([5,10,15],errorV,'ko-',label = 'vandermonde fit')
ax.semilogy([5,10,15],errorR,'ro-',label = 'RBF fit')
plt.xlabel('order of fit')
plt.ylabel('sum squared error')
handles, labels = ax.get_legend_handles_labels()
plt.legend(handles, labels)
plt.title('sum squared error for generalization')
def LFSR(x):
#outbit = (np.sum([x[1],x[4]])%2)
outbit = (x[1]+x[4])%2
y = ([outbit,x[0],x[1],x[2],x[3]])
return(outbit,y)
outbits = np.zeros(100)
inbits = ([0,1,1,1,1])
bits = ([0,1,1,1,1])
for i in range(0,100):
outbits[i],inbits = LFSR(inbits)
bits = np.vstack([bits,inbits])
import tensorflow
from keras.models import Sequential
from keras.layers import Dense, Activation