Skip to content

Instantly share code, notes, and snippets.

@Kamikadze4GAME
Created May 10, 2018 19:11
Show Gist options
  • Save Kamikadze4GAME/4edfcb8c04548f5d722d84e3275b70a3 to your computer and use it in GitHub Desktop.
Save Kamikadze4GAME/4edfcb8c04548f5d722d84e3275b70a3 to your computer and use it in GitHub Desktop.
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"from numpy import matlib\n",
"import random\n",
"import itertools\n",
"import pandas as pd\n",
"import math\n",
"from scipy.integrate import odeint, ode\n",
"from sklearn.linear_model import LinearRegression\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def rls(X,y):\n",
" n = X.shape[0]\n",
" h = matlib.empty((0,0))\n",
" a = 0\n",
" b = (X[:,0].transpose() * X[:,0])[0,0]\n",
" v = ((X[:,0].transpose() * y) / b)[0,0]\n",
" theta = v\n",
" H = 1.0/b \n",
"\n",
" h_list = [h]\n",
" a_list = [a]\n",
" b_list = [b]\n",
" v_list = [v]\n",
" theta_list = [theta]\n",
" H_list = [H]\n",
" \n",
" RSS_list = [(y.transpose()*y)[0,0]]\n",
" Cp_list = [RSS_list[-1]]\n",
" FPE_list = [RSS_list[-1]*(n+1)/float(n-1)]\n",
" \n",
" for s in range(X.shape[1] - 1):\n",
" if(s==0):\n",
" RSS_list.append(RSS_list[-1] - v**2 * b)\n",
" else:\n",
" RSS_list.append(RSS_list[-1] - v**2 * b[0,0])\n",
" Cp_list.append(RSS_list[-1] + 2*(s+1))\n",
" FPE_list.append(RSS_list[-1]*((n+s+1)/float(n-(s+1))))\n",
" \n",
" h = X[:, 0:s+1].transpose() * X[:,s+1]\n",
"\n",
" a = H * h\n",
" b = X[:,s+1].transpose() * X[:,s+1] - h.transpose() * H * h\n",
" v = ((X[:,s+1].transpose() * y - h.transpose() * theta) / b)[0,0]\n",
" theta = np.concatenate((theta - v*a, [[v]]), axis=0)\n",
"\n",
" r = np.concatenate(( - a/b, 1/b ), axis=0)\n",
" l = np.concatenate((H + (a*a.transpose())/b[0,0], r[0:-1].transpose()), axis=0)\n",
"\n",
" H = np.concatenate((l, r), axis=1)\n",
"\n",
" h_list.append(h)\n",
" H_list.append(H)\n",
" a_list.append(a)\n",
" b_list.append(b)\n",
" v_list.append(v)\n",
" theta_list.append(theta)\n",
" \n",
" RSS_list.append(RSS_list[-1] - v**2 * b[0,0])\n",
" Cp_list.append(RSS_list[-1] + 2*(s+1))\n",
" FPE_list.append(RSS_list[-1]*((n+s+1)/float(n-(s+1))))\n",
" \n",
" return {\"theta\":theta_list,\"RSS\":RSS_list,\"Cp\":Cp_list,\"FPE\":FPE_list}"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"x = np.linspace(-10,10,1000) \n",
"y = x**3 + 2*x**2 + 0.5*x+2+np.random.normal(scale=0.3,size=1000)\n",
"plt.plot(x,y)\n",
"print(LinearRegression(False).fit(np.hstack((np.ones((x.shape[0],1)),x.reshape(-1,1))),y).coef_)"
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"res = rls(np.matrix(np.hstack((np.ones((len(x),1)),x.reshape(-1,1),(x**2).reshape(-1,1),(x**3).reshape(-1,1)))),np.matrix(y.reshape(-1,1)))\n",
"res"
]
},
{
"cell_type": "raw",
"metadata": {},
"source": []
},
{
"cell_type": "raw",
"metadata": {
"collapsed": true
},
"source": [
"def rk4(f, x0, y0, x1, n):\n",
" vx = [0.] * (n + 1)\n",
" vy = [0.] * (n + 1)\n",
" h = (x1 - x0) / float(n)\n",
" vx[0] = x = x0\n",
" vy[0] = y = y0\n",
" for i in range(1, n + 1):\n",
" k1 = h * f(x, y)\n",
" k2 = h * f(x + 0.5 * h, y + 0.5 * k1)\n",
" k3 = h * f(x + 0.5 * h, y + 0.5 * k2)\n",
" k4 = h * f(x + h, y + k3)\n",
" vx[i] = x = x0 + i * h\n",
" vy[i] = y = y + (k1 + k2 + k2 + k3 + k3 + k4) / 6.0\n",
" return vx, vy"
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"space,N=rk4((lambda x,y: model(y,x,mu,k)),0,N0,5,100000)"
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"# plt.plot(space,f)\n",
"N_curr = N[::50000][:-1]\n",
"N_next = N[::50000][1:]\n",
"plt.plot(N_curr,N_next)"
]
},
{
"cell_type": "raw",
"metadata": {
"collapsed": true
},
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Mодель Фергюльста: $\\dot{N} = \\mu N (k - N)$"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def model(N, t, mu, k):\n",
" return mu * N * (k - N)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"N0 = 2\n",
"mu = 0.1\n",
"k = 10\n",
"\n",
"t_max = 10\n",
"h = 1e-3\n",
"t = [0]\n",
"while t[-1] < t_max:\n",
" t.append(t[-1]+h)\n",
"t = np.array(t)\n",
"# t = [i*h for i in range(n+1)] #np.arange(10,step=h) #np.linspace(0, 10, 1000)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": false
},
"outputs": [],
"source": [
"N = odeint(model, N0, t, args=(mu, k))\n",
"\n",
"plt.figure(figsize=(14, 8))\n",
"plt.plot(t, N)\n",
"plt.xlabel('t')\n",
"plt.ylabel('N(t)')\n",
"plt.grid()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": false
},
"outputs": [],
"source": [
"N.shape"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"step = 200\n",
"N_ = N[::step]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"N_.shape"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def find_params(N,precision_noise=None,size=None):\n",
" if size is not None:\n",
" N = N[:size,:]\n",
" if precision_noise is not None:\n",
" N = np.round(N,precision_noise)\n",
" \n",
" N_next = N[1:]\n",
" N_curr = N[:-1]\n",
"\n",
" y = np.matrix(N_next)\n",
" X = np.matrix(np.hstack((N_curr,N_curr**2)))\n",
"\n",
" res = rls(X,y)[\"theta\"]\n",
" theta = np.array(res[-1]).ravel()\n",
"\n",
" theta1,theta2 = theta[0],theta[1]\n",
" mu_hat = -theta2/(h*step)\n",
" k_hat = (1-theta1)/theta2\n",
"\n",
" return mu_hat,k_hat"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"N_.shape"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"print(\"mu_hat = %s; k_hat = %s\" % find_params(N_))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"noises = [5,2,0]\n",
"pd.DataFrame({\"Noise\":noises,\"mu_hat\":[find_params(N_,noise)[0] for noise in noises],\"k_hat\":[find_params(N_,noise)[1] for noise in noises]})"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"sizes = [50,20,5]\n",
"pd.DataFrame({\"Size\":sizes,\"mu_hat\":[find_params(N_,size=s)[0] for s in sizes],\"k_hat\":[find_params(N_,size=s)[1] for s in sizes]})\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Рівняння згасаючих коливань: $\\ddot{x} + 2 \\delta \\dot{x} + \\omega_0^2 x = 0 $"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def model(X, t, delta, omega0):\n",
" return [X[1], -omega0**2 * X[0] - 2*delta*X[1]]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"x0 = 1\n",
"x0_prime = -0.5\n",
"delta = 0.1\n",
"omega0 = 1.0\n",
"\n",
"t_max = 5\n",
"h = 1e-3\n",
"t = [0]\n",
"while t[-1] < t_max:\n",
" t.append(t[-1]+h)\n",
"t = np.array(t)\n",
"# t = np.linspace(0, 50, 10000)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"x = odeint(model, [x0, x0_prime], t, args=(delta, omega0))\n",
"\n",
"plt.figure(figsize=(14, 8))\n",
"plt.plot(t, x[:, 0])\n",
"plt.xlabel('t')\n",
"plt.ylabel('x(t)')\n",
"plt.grid()\n",
"plt.show()"
]
},
{
"cell_type": "raw",
"metadata": {
"collapsed": true
},
"source": [
"plt.figure(figsize=(14, 8))\n",
"plt.plot(x[:, 0], x[:, 1])\n",
"plt.xlabel('x(t)')\n",
"plt.ylabel(\"x'(t)\")\n",
"plt.grid()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"step = 100\n",
"\n",
"xx = x[:, 0].reshape(-1,1)\n",
"# x_ = xx[:20000]\n",
"x_ = xx[::step]\n",
"x_.shape"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def find_params(x,precision_noise=None,size=None):\n",
" if size is not None:\n",
" x = x[:size,:]\n",
" if precision_noise is not None:\n",
" x = np.round(x,precision_noise)\n",
" \n",
" x_next = x[2:]\n",
" x_curr = x[1:-1]\n",
" x_prev = x[:-2]\n",
"\n",
" y = np.matrix(x_next)\n",
" X = np.matrix(np.hstack((x_curr,x_prev)))\n",
"\n",
" res = rls(X,y)[\"theta\"]\n",
" theta = np.array(res[-1]).ravel()\n",
"\n",
" theta1,theta2 = theta[0],theta[1]\n",
" delta = 1.0/(h*step) - theta1/(2.0*h*step)\n",
" omega0 = np.sqrt((1-theta1-theta2)/((h*step)**2))\n",
"\n",
" return delta,omega0"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(\"delta = %s; omega0 = %s\" % find_params(x_))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"noises = [5,4,3]\n",
"pd.DataFrame({\"Noise\":noises,\"delta\":[find_params(x_,noise)[0] for noise in noises],\"omega0\":[find_params(x_,noise)[1] for noise in noises]})\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"sizes = [100,50,10]\n",
"pd.DataFrame({\"Size\":sizes,\"delta\":[find_params(x_,size=s)[0] for s in sizes],\"omega0\":[find_params(x_,size=s)[1] for s in sizes]})\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Дослідження закономірностей задачі структурно-параметричної ідентифікації"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def gen_X(n,m,a,b):\n",
" X = np.zeros((n,m))\n",
" for col in np.arange(m):\n",
" X[:,col] = np.random.uniform(a,b,n)#np.arange(a,b) \n",
" return X\n",
"\n",
"def gen_noise(n,sigma):\n",
" return np.random.normal(scale=sigma,size=n)\n",
"\n",
"def calc_y(true_theta,X,noise):\n",
" return X.dot(true_theta)+noise"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"n = 100\n",
"m = 5\n",
"# theta = np.array([1,2,3,4,5])\n",
"theta = np.array([3,-2,1,0,0])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"X = np.matrix(gen_X(n,m,0,2))\n",
"# X"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"sigma = 2\n",
"ksi = gen_noise(n,sigma**2)\n",
"y = np.matrix(calc_y(theta,X,ksi).reshape(-1,1))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"res = rls(X,y)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"for s,th in enumerate(res[\"theta\"]):\n",
" print(\"s = %s; theta = \\n%s\\n\"%(s+1,th))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"plt.figure(figsize=(14, 8))\n",
"plt.plot(np.arange(0,m+1), res[\"Cp\"],label=\"Cp\")\n",
"plt.plot(np.arange(0,m+1), res[\"FPE\"],label=\"FPE\")\n",
"plt.plot(np.arange(0,m+1), res[\"RSS\"],label=\"RSS\")\n",
"plt.grid()\n",
"plt.legend()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"# 3"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"def rls(X,y):\n",
" n = X.shape[0]\n",
" h = matlib.empty((0,0))\n",
" a = 0\n",
" b = (X[:,0].transpose() * X[:,0])[0,0]\n",
" v = ((X[:,0].transpose() * y) / b)[0,0]\n",
" theta = v\n",
" H = 1.0/b \n",
"\n",
" h_list = [h]\n",
" a_list = [a]\n",
" b_list = [b]\n",
" v_list = [v]\n",
" theta_list = [theta]\n",
" H_list = [H]\n",
" \n",
" RSS_list = [(y.transpose()*y)[0,0]]\n",
" Cp_list = [RSS_list[-1]]\n",
" FPE_list = [RSS_list[-1]*(n+1)/float(n-1)]\n",
" \n",
" bb = False\n",
" for s in range(X.shape[1] - 1):\n",
" bb = True\n",
" if(s==0):\n",
" RSS_list.append(RSS_list[-1] - v**2 * b)\n",
" else:\n",
" RSS_list.append(RSS_list[-1] - v**2 * b[0,0])\n",
" Cp_list.append(RSS_list[-1] + 2*(s+1))\n",
" FPE_list.append(RSS_list[-1]*((n+s+1)/float(n-(s+1))))\n",
" \n",
" h = X[:, 0:s+1].transpose() * X[:,s+1]\n",
"\n",
" a = H * h\n",
" b = X[:,s+1].transpose() * X[:,s+1] - h.transpose() * H * h\n",
" v = ((X[:,s+1].transpose() * y - h.transpose() * theta) / b)[0,0]\n",
" theta = np.concatenate((theta - v*a, [[v]]), axis=0)\n",
"\n",
" r = np.concatenate(( - a/b, 1/b ), axis=0)\n",
" l = np.concatenate((H + (a*a.transpose())/b[0,0], r[0:-1].transpose()), axis=0)\n",
"\n",
" H = np.concatenate((l, r), axis=1)\n",
"\n",
" h_list.append(h)\n",
" H_list.append(H)\n",
" a_list.append(a)\n",
" b_list.append(b)\n",
" v_list.append(v)\n",
" theta_list.append(theta)\n",
" \n",
" if(bb):\n",
" RSS_list.append(RSS_list[-1] - v**2 * b[0,0])\n",
" Cp_list.append(RSS_list[-1] + 2*(s+1))\n",
" FPE_list.append(RSS_list[-1]*((n+s+1)/float(n-(s+1))))\n",
" \n",
" return {\"theta\":theta_list,\"RSS\":RSS_list,\"Cp\":Cp_list,\"FPE\":FPE_list}"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def A1(X,y):\n",
" corrs = []\n",
" for i in np.arange(m):\n",
" corrs.append(\n",
" (i,np.abs(np.corrcoef(X[:,i],y.ravel())[0,1]))\n",
" )\n",
" corrs = sorted(corrs, key=lambda x: x[1])\n",
" corrs.reverse()\n",
"\n",
" sub = [t[0] for t in corrs]\n",
" \n",
" W_l,W_r = X[:,sub].T.dot(X[:,sub]),X[:,sub].T.dot(y) \n",
" W_l_sub = W_l[sub,:]\n",
" W_r_sub = W_r[sub]\n",
" \n",
" res = rls(np.matrix(W_l), np.matrix(W_r))\n",
" \n",
" y_hats = [X[:,sub][:,:(i+1)].dot(th) for i,th in enumerate(res[\"theta\"])]\n",
" s_star = np.argmin(res[\"Cp\"])\n",
" \n",
" return {\"Cps\":res[\"Cp\"],\"y_hats\":y_hats,\"s_star\":s_star,\"theta_star\":res[\"theta\"][s_star-1],\"theta\":res[\"theta\"],\"Cp_star\":np.min(res[\"Cp\"]),\"columns\":sub[:s_star]}"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {},
"outputs": [],
"source": [
"def get_indicies(m):\n",
" indices = list(range(m))\n",
" seq = []\n",
" for i in np.arange(m):\n",
" choice = random.choice(indices)\n",
" seq.append(choice)\n",
" indices.remove(choice)\n",
" return seq"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def A2(X,y,K):\n",
" set_of_indices = []\n",
" for i in np.arange(K): \n",
" set_of_indices.append(get_indicies(m))\n",
"# set_of_indices = random.sample((itertools.permutations(indices)),K)\n",
"\n",
" s_star = 0\n",
" Cp_star = 1e10\n",
" theta_star = None\n",
" idx = None\n",
"\n",
" for sub in set_of_indices:\n",
" sub = list(sub)\n",
" W_l,W_r = X[:,sub].T.dot(X[:,sub]),X[:,sub].T.dot(y) \n",
" W_l_sub = W_l[sub,:]\n",
" W_r_sub = W_r[sub]\n",
"\n",
" res = rls(np.matrix(W_l), np.matrix(W_r))\n",
"\n",
" Cp = np.min(res[\"Cp\"])\n",
" s = np.argmin(res[\"Cp\"])-1\n",
"\n",
" if(Cp < Cp_star):\n",
" Cp_star = Cp\n",
" s_star = s+1\n",
" theta_star = res[\"theta\"][s]\n",
" idx = sub[:s+1]\n",
" \n",
" return {\"s_star\":s_star,\"theta_star\":theta_star,\"Cp_star\":Cp_star,\"columns\":idx}"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def A3(X,y):\n",
" cols = []\n",
" s_star = None\n",
" theta_star = None\n",
" Cp_star = 1e10\n",
" indices = list(range(X.shape[1]))\n",
"\n",
" for k in np.arange(X.shape[1]):\n",
" best_col = None\n",
" for i in indices:\n",
" W_l,W_r = X[:,cols+[i]].T.dot(X[:,cols+[i]]),X[:,cols+[i]].T.dot(y) \n",
"\n",
" res = rls(np.matrix(X[:,cols+[i]]), np.matrix(y))\n",
" Cp = np.min(res[\"Cp\"])\n",
"\n",
" if(Cp < Cp_star):\n",
" Cp_star = Cp\n",
" theta_star = res[\"theta\"][-1]\n",
" best_col = i\n",
"\n",
" if(best_col is None): break\n",
" indices.remove(best_col)\n",
" cols.append(best_col)\n",
" s_star = k+1\n",
" \n",
" return {\"s_star\":s_star,\"theta_star\":theta_star,\"Cp_star\":Cp_star,\"columns\":cols}"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"n = 100\n",
"m = 5\n",
"sigma = np.sqrt(0.0)"
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"s0 = 3\n",
"theta0 = np.array([1,-2,3])\n",
"columns = [2,3,4]"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {
"collapsed": true,
"scrolled": true
},
"outputs": [],
"source": [
"X = (gen_X(n,m,0,1)) #np.matrix\n",
"# X"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {
"collapsed": true,
"scrolled": true
},
"outputs": [],
"source": [
"X_star = X[:,columns]\n",
"ksi = gen_noise(n,sigma)\n",
"y = (calc_y(theta0, X_star, ksi).reshape(-1,1)) #np.matrix"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'Cp': [198.10399482055334,\n",
" 125.28591100084792,\n",
" 114.24396780510868,\n",
" 102.97765903895251,\n",
" 89.474786823535666,\n",
" 8.000000000000199],\n",
" 'FPE': [202.10609572601908,\n",
" 125.7765354655115,\n",
" 114.74372159307231,\n",
" 102.97627712383617,\n",
" 88.26435239216363,\n",
" 2.1553129651389705e-13],\n",
" 'RSS': [198.10399482055334,\n",
" 123.28591100084792,\n",
" 110.24396780510868,\n",
" 96.97765903895251,\n",
" 81.474786823535666,\n",
" 1.9895196601282805e-13],\n",
" 'theta': [1.4590789928866073, matrix([[ 0.72272167],\n",
" [ 0.92911293]]), matrix([[ 0.18644536],\n",
" [ 0.55578988],\n",
" [ 1.10973086]]), matrix([[ 0.57691402],\n",
" [ 0.8833099 ],\n",
" [ 1.41990279],\n",
" [-1.2114845 ]]), matrix([[ 4.32986980e-15],\n",
" [ 2.88657986e-15],\n",
" [ 1.00000000e+00],\n",
" [ -2.00000000e+00],\n",
" [ 3.00000000e+00]])]}"
]
},
"execution_count": 77,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"res = rls(np.matrix(X),np.matrix(y))\n",
"res"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x1a1f263e10>"
]
},
"execution_count": 78,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAzkAAAHVCAYAAADSCzXJAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3Xd0VVX6xvHvviW9ESAJIZBGb4Ig\nCliCgG1krFjGgv7GMCCOothwdOxdRsWGgI4MFsAuVrqd3juEGkhIg/Se8/vjpgIChoSbhOez1llJ\n9jn33PfGs6KPe5/3GMuyEBERERERaSps7i5ARERERESkLinkiIiIiIhIk6KQIyIiIiIiTYpCjoiI\niIiINCkKOSIiIiIi0qQo5IiIiIiISJOikCMiIiIiIk2KQo6IiIiIiDQpCjkiIiIiItKkONxdAECL\nFi2sqKgod5dRKTc3F19fX3eXIY2MrhupDV03Uhu6bqQ2dN1IbTS062b58uVplmW1PNZxDSLkREVF\nsWzZMneXUWnhwoXExcW5uwxpZHTdSG3oupHa0HUjtaHrRmqjoV03xphdx3OclquJiIiIiEiTopAj\nIiIiIiJNikKOiIiIiIg0KQ3inhwREREREflziouLSUxMpKCgoN7eIzAwkI0bN9bb+f+Il5cXERER\nOJ3OWr1eIUdEREREpBFKTEzE39+fqKgojDH18h7Z2dn4+/vXy7n/iGVZpKenk5iYSHR0dK3OoeVq\nIiIiIiKNUEFBAc2bN6+3gOMuxhiaN29+QjNUCjkiIiIiIo1UUws4FU70cynkiIiIiIhIk6KQIyIi\nIiIitZacnMx1111HbGwsXbp04ZJLLmHLli1urUkhR0REREREasWyLK644gri4uJISEhgw4YNPPPM\nM+zfv9+tdam7moiIiIhII/f4rPVs2JdVp+fsEh7APXFtj3rMggULcDqdjBw5snKsZ8+eLFy4kHPP\nPZfmzZuzefNmzj33XN58801stpMzx6KZHBERERERqZV169bRu3fvI+5bsmQJ48ePZ+3atSQkJPDZ\nZ5+dtLo0kyMiIiIi0sg9OrRrvZw3Ozu71q/t27cvMTExAFx//fX88ssvXH311XVV2lFpJkdERERE\nRGqla9euLF++/Ij7Dm0DfTLbXSvkiIiIiIhIrZx//vkUFhYyefLkyrGlS5fy448/smTJEnbs2EFZ\n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\nQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1a1f19da90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(14, 8))\n",
"plt.plot(np.arange(0,m+1), res[\"Cp\"],label=\"Cp\")\n",
"plt.plot(np.arange(0,m+1), res[\"RSS\"],label=\"RSS\")\n",
"plt.plot(np.arange(0,m+1), res[\"FPE\"],label=\"FPE\")\n",
"plt.grid()\n",
"plt.legend()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"A1(X,y)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": false
},
"outputs": [],
"source": [
"A2(X,y,10)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"A3(X,y)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 109,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"n = 100\n",
"m = 15\n",
"sigma = np.sqrt(0.1)"
]
},
{
"cell_type": "code",
"execution_count": 110,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 13.90563608, 16.21805525, 19.25686139, 15.55456962,\n",
" 13.9118356 , 19.83273811, 11.01049048, 11.29020928,\n",
" 10.1534595 , 10.78321671])"
]
},
"execution_count": 110,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"theta0 = np.random.uniform(10,20,10)\n",
"theta0"
]
},
{
"cell_type": "code",
"execution_count": 111,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"s0 = 10\n",
"columns = [0,1,2,3,4,5,6,7,8,9]"
]
},
{
"cell_type": "code",
"execution_count": 112,
"metadata": {
"collapsed": true,
"scrolled": true
},
"outputs": [],
"source": [
"X = (gen_X(n,m,0,1)) #np.matrix\n",
"# X"
]
},
{
"cell_type": "code",
"execution_count": 113,
"metadata": {
"collapsed": true,
"scrolled": true
},
"outputs": [],
"source": [
"X_star = X[:,columns]\n",
"ksi = gen_noise(n,sigma)\n",
"y = (calc_y(theta0, X_star, ksi).reshape(-1,1)) #np.matrix"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 114,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"{'Cp_star': 22.885416325907499,\n",
" 'Cps': [189286695.59590623,\n",
" 1073762.0834924877,\n",
" 563528.28346329613,\n",
" 266251.0958213695,\n",
" 129233.04105729581,\n",
" 113202.96839660012,\n",
" 56440.560526095891,\n",
" 28351.505018091528,\n",
" 16408.774355197369,\n",
" 8992.0601898664299,\n",
" 22.885416325907499,\n",
" 24.88424253207199,\n",
" 26.883616134937871,\n",
" 26.965963644211737,\n",
" 28.567698390258617,\n",
" 27.999999539762783],\n",
" 'columns': [5, 3, 4, 2, 6, 0, 1, 9, 8, 7],\n",
" 's_star': 10,\n",
" 'theta': [133.2165889773421, matrix([[ 70.8089726 ],\n",
" [ 64.22002556]]), matrix([[ 40.98613616],\n",
" [ 46.22489905],\n",
" [ 47.68720817]]), matrix([[ 39.06229077],\n",
" [ 27.61612264],\n",
" [ 31.05040196],\n",
" [ 39.29792205]]), matrix([[ 35.61258987],\n",
" [ 24.61474287],\n",
" [ 29.96025427],\n",
" [ 31.37787803],\n",
" [ 15.17757877]]), matrix([[ 28.55833513],\n",
" [ 16.53598144],\n",
" [ 20.75805493],\n",
" [ 27.68110052],\n",
" [ 21.45818431],\n",
" [ 25.66932208]]), matrix([[ 20.49615896],\n",
" [ 17.97117368],\n",
" [ 25.84224648],\n",
" [ 22.07402659],\n",
" [ 17.58338649],\n",
" [ 16.97187019],\n",
" [ 19.28579121]]), matrix([[ 17.09993119],\n",
" [ 16.22408935],\n",
" [ 18.68062972],\n",
" [ 20.34691024],\n",
" [ 18.10388194],\n",
" [ 19.53117163],\n",
" [ 19.81983702],\n",
" [ 11.48301706]]), matrix([[ 18.30843988],\n",
" [ 16.61251968],\n",
" [ 17.66391961],\n",
" [ 24.33964133],\n",
" [ 11.77169501],\n",
" [ 14.99102734],\n",
" [ 17.49534809],\n",
" [ 9.04953378],\n",
" [ 11.37300369]]), matrix([[ 19.73552026],\n",
" [ 15.49190055],\n",
" [ 13.90610184],\n",
" [ 19.44465209],\n",
" [ 10.92765924],\n",
" [ 13.87641088],\n",
" [ 16.35577308],\n",
" [ 10.70941351],\n",
" [ 10.19779951],\n",
" [ 11.25471349]]), matrix([[ 1.97357871e+01],\n",
" [ 1.54922137e+01],\n",
" [ 1.39063271e+01],\n",
" [ 1.94440018e+01],\n",
" [ 1.09267189e+01],\n",
" [ 1.38747576e+01],\n",
" [ 1.63560511e+01],\n",
" [ 1.07077684e+01],\n",
" [ 1.01974791e+01],\n",
" [ 1.12544302e+01],\n",
" [ 4.04675157e-03]]), matrix([[ 1.97378317e+01],\n",
" [ 1.54927642e+01],\n",
" [ 1.39063276e+01],\n",
" [ 1.94453561e+01],\n",
" [ 1.09243827e+01],\n",
" [ 1.38743177e+01],\n",
" [ 1.63555442e+01],\n",
" [ 1.07091746e+01],\n",
" [ 1.01983382e+01],\n",
" [ 1.12551083e+01],\n",
" [ 4.30830863e-03],\n",
" [ -4.14160178e-03]]), matrix([[ 1.96325620e+01],\n",
" [ 1.55499747e+01],\n",
" [ 1.39979853e+01],\n",
" [ 1.94244119e+01],\n",
" [ 1.08600353e+01],\n",
" [ 1.38978394e+01],\n",
" [ 1.63832350e+01],\n",
" [ 1.06362849e+01],\n",
" [ 1.01153736e+01],\n",
" [ 1.12145226e+01],\n",
" [ -1.29704528e-02],\n",
" [ -1.09820974e-02],\n",
" [ 2.19751391e-01]]), matrix([[ 19.64774294],\n",
" [ 15.54755085],\n",
" [ 13.97910979],\n",
" [ 19.39956049],\n",
" [ 10.88204806],\n",
" [ 13.90699297],\n",
" [ 16.38739934],\n",
" [ 10.62731198],\n",
" [ 10.09040754],\n",
" [ 11.20100312],\n",
" [ -0.0332784 ],\n",
" [ -0.02280851],\n",
" [ 0.1968631 ],\n",
" [ 0.09311549]]), matrix([[ 19.6281084 ],\n",
" [ 15.57519277],\n",
" [ 14.00590124],\n",
" [ 19.40688435],\n",
" [ 10.82799131],\n",
" [ 13.93259394],\n",
" [ 16.32042451],\n",
" [ 10.61040392],\n",
" [ 10.09174392],\n",
" [ 11.18056879],\n",
" [ -0.03873716],\n",
" [ -0.06013 ],\n",
" [ 0.24391631],\n",
" [ 0.07421098],\n",
" [ 0.10484592]])],\n",
" 'theta_star': matrix([[ 19.73552026],\n",
" [ 15.49190055],\n",
" [ 13.90610184],\n",
" [ 19.44465209],\n",
" [ 10.92765924],\n",
" [ 13.87641088],\n",
" [ 16.35577308],\n",
" [ 10.70941351],\n",
" [ 10.19779951],\n",
" [ 11.25471349]]),\n",
" 'y_hats': [array([[ 8.75823869],\n",
" [ 82.32394788],\n",
" [ 97.51218656],\n",
" [ 108.66080462],\n",
" [ 10.94267064],\n",
" [ 8.98697335],\n",
" [ 46.77389621],\n",
" [ 101.52182149],\n",
" [ 43.65036013],\n",
" [ 89.61610848],\n",
" [ 49.70430585],\n",
" [ 59.92331469],\n",
" [ 84.38360965],\n",
" [ 95.87215012],\n",
" [ 106.06352472],\n",
" [ 81.79470945],\n",
" [ 40.37464412],\n",
" [ 82.15115089],\n",
" [ 44.55111623],\n",
" [ 29.47496762],\n",
" [ 111.40699075],\n",
" [ 108.4483913 ],\n",
" [ 54.12681929],\n",
" [ 4.68334401],\n",
" [ 64.05885812],\n",
" [ 76.91624419],\n",
" [ 77.11671856],\n",
" [ 99.60146644],\n",
" [ 38.17795679],\n",
" [ 109.8654635 ],\n",
" [ 112.60920457],\n",
" [ 79.72356583],\n",
" [ 79.87239913],\n",
" [ 30.7324289 ],\n",
" [ 53.41469282],\n",
" [ 107.46325051],\n",
" [ 108.94317892],\n",
" [ 120.27342496],\n",
" [ 116.78696287],\n",
" [ 119.92332958],\n",
" [ 68.70770812],\n",
" [ 15.60833732],\n",
" [ 81.06878766],\n",
" [ 118.3584302 ],\n",
" [ 73.18227398],\n",
" [ 83.53788888],\n",
" [ 127.68370331],\n",
" [ 45.98719226],\n",
" [ 0.95936898],\n",
" [ 87.22114329],\n",
" [ 66.5858608 ],\n",
" [ 34.38055041],\n",
" [ 131.4624863 ],\n",
" [ 65.58574038],\n",
" [ 76.94194546],\n",
" [ 112.7390526 ],\n",
" [ 95.16334539],\n",
" [ 38.57245878],\n",
" [ 26.00604764],\n",
" [ 102.56830007],\n",
" [ 94.70018222],\n",
" [ 52.43799661],\n",
" [ 79.63043041],\n",
" [ 52.43112424],\n",
" [ 90.36854111],\n",
" [ 82.30700253],\n",
" [ 2.82328812],\n",
" [ 35.26624552],\n",
" [ 1.34418005],\n",
" [ 89.4364679 ],\n",
" [ 108.80314905],\n",
" [ 31.17930638],\n",
" [ 2.36559871],\n",
" [ 1.68940538],\n",
" [ 43.76969737],\n",
" [ 101.71736547],\n",
" [ 44.34784393],\n",
" [ 8.02907355],\n",
" [ 25.13845141],\n",
" [ 3.0638246 ],\n",
" [ 11.82623038],\n",
" [ 124.34676375],\n",
" [ 125.66970878],\n",
" [ 42.38628192],\n",
" [ 55.7701473 ],\n",
" [ 29.11624709],\n",
" [ 122.639782 ],\n",
" [ 122.59742171],\n",
" [ 18.01463058],\n",
" [ 121.30302485],\n",
" [ 48.01267735],\n",
" [ 101.86955198],\n",
" [ 86.07502277],\n",
" [ 47.09363608],\n",
" [ 129.9562186 ],\n",
" [ 59.88620576],\n",
" [ 120.39488011],\n",
" [ 79.0310475 ],\n",
" [ 43.40280368],\n",
" [ 105.73653983]]), matrix([[ 22.36902123],\n",
" [ 44.05872348],\n",
" [ 81.00984375],\n",
" [ 109.97898032],\n",
" [ 27.61646279],\n",
" [ 52.88221933],\n",
" [ 32.91176341],\n",
" [ 55.2644672 ],\n",
" [ 57.85415905],\n",
" [ 88.40755373],\n",
" [ 43.72160563],\n",
" [ 34.83377623],\n",
" [ 49.54898046],\n",
" [ 57.56286899],\n",
" [ 84.90511452],\n",
" [ 99.08686917],\n",
" [ 67.03453821],\n",
" [ 95.93403161],\n",
" [ 60.55354486],\n",
" [ 66.18736197],\n",
" [ 114.33225947],\n",
" [ 78.30671568],\n",
" [ 88.41514975],\n",
" [ 57.78966519],\n",
" [ 93.00207206],\n",
" [ 55.00421039],\n",
" [ 52.55541926],\n",
" [ 75.85010821],\n",
" [ 27.75291538],\n",
" [ 69.81685083],\n",
" [ 113.08757835],\n",
" [ 90.57464208],\n",
" [ 57.53907107],\n",
" [ 29.35399025],\n",
" [ 86.36045904],\n",
" [ 105.34387972],\n",
" [ 107.11817952],\n",
" [ 71.78206901],\n",
" [ 67.65269196],\n",
" [ 114.11132029],\n",
" [ 94.82293362],\n",
" [ 25.73085119],\n",
" [ 73.5183326 ],\n",
" [ 115.67027462],\n",
" [ 88.20086807],\n",
" [ 90.01334979],\n",
" [ 83.06911611],\n",
" [ 37.54028049],\n",
" [ 57.82708529],\n",
" [ 79.14470623],\n",
" [ 90.36693044],\n",
" [ 59.05685693],\n",
" [ 113.73190337],\n",
" [ 74.91255706],\n",
" [ 85.63134205],\n",
" [ 117.49318412],\n",
" [ 97.65352551],\n",
" [ 65.73798042],\n",
" [ 76.7510601 ],\n",
" [ 73.2316518 ],\n",
" [ 102.73132669],\n",
" [ 60.55143256],\n",
" [ 76.78642398],\n",
" [ 62.00631248],\n",
" [ 73.74630909],\n",
" [ 107.01875362],\n",
" [ 17.66693231],\n",
" [ 19.67241037],\n",
" [ 23.12607687],\n",
" [ 110.79607984],\n",
" [ 120.29431391],\n",
" [ 56.80692382],\n",
" [ 17.49006533],\n",
" [ 52.00027849],\n",
" [ 34.33372922],\n",
" [ 77.08908274],\n",
" [ 34.03190448],\n",
" [ 50.2574588 ],\n",
" [ 20.7892996 ],\n",
" [ 34.70387773],\n",
" [ 11.03032806],\n",
" [ 115.57895306],\n",
" [ 127.5625534 ],\n",
" [ 37.22196202],\n",
" [ 55.72962671],\n",
" [ 33.67515112],\n",
" [ 68.0770919 ],\n",
" [ 123.75327745],\n",
" [ 31.9083445 ],\n",
" [ 73.86713069],\n",
" [ 57.7670963 ],\n",
" [ 95.03260103],\n",
" [ 98.11149648],\n",
" [ 52.20654403],\n",
" [ 91.25251089],\n",
" [ 61.81204206],\n",
" [ 121.5001468 ],\n",
" [ 47.88749126],\n",
" [ 60.5371763 ],\n",
" [ 84.36738809]]), matrix([[ 27.52798016],\n",
" [ 70.05337253],\n",
" [ 82.96518056],\n",
" [ 74.9158722 ],\n",
" [ 42.53522291],\n",
" [ 45.94155912],\n",
" [ 35.96573566],\n",
" [ 47.58102328],\n",
" [ 49.02935966],\n",
" [ 67.4839971 ],\n",
" [ 38.79239932],\n",
" [ 58.6558138 ],\n",
" [ 32.33840606],\n",
" [ 53.24976201],\n",
" [ 69.35249126],\n",
" [ 97.69461485],\n",
" [ 81.75347274],\n",
" [ 75.82606976],\n",
" [ 49.8314293 ],\n",
" [ 86.04971754],\n",
" [ 78.6632261 ],\n",
" [ 94.91925776],\n",
" [ 106.49397101],\n",
" [ 59.75840522],\n",
" [ 92.11231495],\n",
" [ 55.7443726 ],\n",
" [ 64.72102323],\n",
" [ 81.99182672],\n",
" [ 17.28713068],\n",
" [ 85.69440221],\n",
" [ 115.77710014],\n",
" [ 62.07016889],\n",
" [ 78.14164853],\n",
" [ 34.57364441],\n",
" [ 69.64206735],\n",
" [ 101.94709326],\n",
" [ 107.32022585],\n",
" [ 59.73363901],\n",
" [ 62.33003256],\n",
" [ 77.19914019],\n",
" [ 108.48369062],\n",
" [ 24.53298062],\n",
" [ 76.13351565],\n",
" [ 76.2228057 ],\n",
" [ 68.71255976],\n",
" [ 82.80628384],\n",
" [ 64.9773934 ],\n",
" [ 69.67971609],\n",
" [ 53.74518576],\n",
" [ 59.39705928],\n",
" [ 78.3089967 ],\n",
" [ 70.1980533 ],\n",
" [ 103.57720228],\n",
" [ 56.05329465],\n",
" [ 88.51403898],\n",
" [ 94.42860759],\n",
" [ 89.3689148 ],\n",
" [ 81.78239849],\n",
" [ 80.82494942],\n",
" [ 59.78526963],\n",
" [ 90.30791126],\n",
" [ 61.92663167],\n",
" [ 61.02156129],\n",
" [ 72.99125415],\n",
" [ 83.55762474],\n",
" [ 113.36529408],\n",
" [ 25.70662205],\n",
" [ 54.13147668],\n",
" [ 30.01334438],\n",
" [ 88.46345404],\n",
" [ 107.30576009],\n",
" [ 51.76586786],\n",
" [ 57.96496502],\n",
" [ 49.17197391],\n",
" [ 64.24268071],\n",
" [ 90.53002498],\n",
" [ 55.07874946],\n",
" [ 65.89926008],\n",
" [ 16.46720411],\n",
" [ 69.12242685],\n",
" [ 9.81332121],\n",
" [ 111.14646268],\n",
" [ 112.45858466],\n",
" [ 62.78807191],\n",
" [ 71.25458893],\n",
" [ 55.19659428],\n",
" [ 56.44238158],\n",
" [ 86.43696448],\n",
" [ 29.66516991],\n",
" [ 89.41844876],\n",
" [ 70.00239882],\n",
" [ 79.68375386],\n",
" [ 104.35704377],\n",
" [ 81.18858417],\n",
" [ 91.72833047],\n",
" [ 79.4748866 ],\n",
" [ 102.31949102],\n",
" [ 73.4483649 ],\n",
" [ 63.49798498],\n",
" [ 78.07519097]]), matrix([[ 43.57677969],\n",
" [ 89.70967495],\n",
" [ 79.78414023],\n",
" [ 75.26563512],\n",
" [ 57.75311026],\n",
" [ 49.40723665],\n",
" [ 30.49010173],\n",
" [ 41.93824075],\n",
" [ 48.29120033],\n",
" [ 75.82267718],\n",
" [ 34.38435251],\n",
" [ 62.91979959],\n",
" [ 57.72358767],\n",
" [ 63.625634 ],\n",
" [ 64.25852223],\n",
" [ 107.25755428],\n",
" [ 80.69263354],\n",
" [ 66.64541297],\n",
" [ 55.29817138],\n",
" [ 84.61808182],\n",
" [ 87.58557908],\n",
" [ 75.79208802],\n",
" [ 101.74783719],\n",
" [ 50.52686814],\n",
" [ 70.07020496],\n",
" [ 69.01952712],\n",
" [ 52.43850257],\n",
" [ 74.76297759],\n",
" [ 43.52824383],\n",
" [ 69.03230762],\n",
" [ 97.12266963],\n",
" [ 54.06465067],\n",
" [ 61.60474783],\n",
" [ 55.95208915],\n",
" [ 68.66568081],\n",
" [ 111.38610569],\n",
" [ 93.38940116],\n",
" [ 62.31752455],\n",
" [ 51.81766864],\n",
" [ 77.54379841],\n",
" [ 108.23272031],\n",
" [ 55.89112961],\n",
" [ 64.13978327],\n",
" [ 82.7677393 ],\n",
" [ 83.83194262],\n",
" [ 79.51705366],\n",
" [ 81.95578957],\n",
" [ 70.28081918],\n",
" [ 53.47559786],\n",
" [ 74.57250467],\n",
" [ 83.98395724],\n",
" [ 49.33733568],\n",
" [ 109.88321889],\n",
" [ 56.09187852],\n",
" [ 84.97726833],\n",
" [ 70.3714148 ],\n",
" [ 91.1988035 ],\n",
" [ 55.4016751 ],\n",
" [ 75.45208827],\n",
" [ 67.67617712],\n",
" [ 78.30550998],\n",
" [ 79.72997343],\n",
" [ 53.26555278],\n",
" [ 83.56700724],\n",
" [ 70.64758422],\n",
" [ 99.30284731],\n",
" [ 53.99757771],\n",
" [ 74.99258399],\n",
" [ 43.11362211],\n",
" [ 82.76820512],\n",
" [ 97.3746394 ],\n",
" [ 52.89170558],\n",
" [ 40.9417378 ],\n",
" [ 45.57081385],\n",
" [ 60.95974554],\n",
" [ 94.0525062 ],\n",
" [ 64.41630288],\n",
" [ 77.39567171],\n",
" [ 35.63719611],\n",
" [ 56.479958 ],\n",
" [ 9.41494612],\n",
" [ 96.94939431],\n",
" [ 115.4753266 ],\n",
" [ 51.10248878],\n",
" [ 68.12488542],\n",
" [ 47.91437312],\n",
" [ 67.93847161],\n",
" [ 68.14522523],\n",
" [ 40.28381481],\n",
" [ 92.07845066],\n",
" [ 62.08938199],\n",
" [ 93.39317072],\n",
" [ 91.90041645],\n",
" [ 93.33786176],\n",
" [ 83.9069111 ],\n",
" [ 74.81365281],\n",
" [ 79.5589445 ],\n",
" [ 93.1019828 ],\n",
" [ 72.04835184],\n",
" [ 70.31272355]]), matrix([[ 43.7661479 ],\n",
" [ 88.91454277],\n",
" [ 82.36464489],\n",
" [ 76.4872923 ],\n",
" [ 64.62061782],\n",
" [ 50.99380517],\n",
" [ 29.26837298],\n",
" [ 45.26803172],\n",
" [ 55.40796733],\n",
" [ 74.55078457],\n",
" [ 33.48312922],\n",
" [ 71.1396278 ],\n",
" [ 50.66145734],\n",
" [ 70.52018428],\n",
" [ 57.74206604],\n",
" [ 107.82431054],\n",
" [ 85.39203002],\n",
" [ 69.42049877],\n",
" [ 61.2510703 ],\n",
" [ 83.52636908],\n",
" [ 85.28806554],\n",
" [ 75.3304671 ],\n",
" [ 101.28993227],\n",
" [ 58.64147093],\n",
" [ 64.06596303],\n",
" [ 64.09901527],\n",
" [ 54.57632736],\n",
" [ 78.92466588],\n",
" [ 38.77224849],\n",
" [ 75.28805989],\n",
" [ 93.99185502],\n",
" [ 61.26696715],\n",
" [ 58.75221777],\n",
" [ 52.98948243],\n",
" [ 70.79967066],\n",
" [ 110.45171523],\n",
" [ 91.99991776],\n",
" [ 70.91707599],\n",
" [ 54.86856809],\n",
" [ 77.13264539],\n",
" [ 101.77647341],\n",
" [ 56.95708939],\n",
" [ 59.10073896],\n",
" [ 86.49884316],\n",
" [ 85.08059137],\n",
" [ 84.43367529],\n",
" [ 75.84982189],\n",
" [ 77.76571065],\n",
" [ 51.76917194],\n",
" [ 72.36690997],\n",
" [ 83.21614143],\n",
" [ 49.00554712],\n",
" [ 109.16221054],\n",
" [ 61.18590212],\n",
" [ 82.94128881],\n",
" [ 68.06628571],\n",
" [ 91.82431862],\n",
" [ 55.92908876],\n",
" [ 70.36238058],\n",
" [ 72.1578186 ],\n",
" [ 77.41188577],\n",
" [ 78.53348936],\n",
" [ 49.74384803],\n",
" [ 79.82453845],\n",
" [ 77.16557282],\n",
" [ 99.75276298],\n",
" [ 50.93658532],\n",
" [ 72.83454575],\n",
" [ 42.46219689],\n",
" [ 85.71944963],\n",
" [ 97.66707629],\n",
" [ 53.54173946],\n",
" [ 41.46818026],\n",
" [ 46.42299968],\n",
" [ 59.73365122],\n",
" [ 92.44426442],\n",
" [ 68.67394754],\n",
" [ 73.37213823],\n",
" [ 35.35286168],\n",
" [ 57.3841914 ],\n",
" [ 20.43799997],\n",
" [ 90.61703364],\n",
" [ 106.21821458],\n",
" [ 61.88299393],\n",
" [ 74.63866356],\n",
" [ 49.23494561],\n",
" [ 61.02498471],\n",
" [ 67.95587561],\n",
" [ 37.55603253],\n",
" [ 92.83427995],\n",
" [ 57.83858297],\n",
" [ 84.27082307],\n",
" [ 87.98330753],\n",
" [ 94.72991713],\n",
" [ 79.11281984],\n",
" [ 68.76060419],\n",
" [ 82.29273337],\n",
" [ 86.41057826],\n",
" [ 65.86021377],\n",
" [ 68.09740981]]), matrix([[ 47.00464735],\n",
" [ 80.28980711],\n",
" [ 75.56080373],\n",
" [ 73.56306188],\n",
" [ 68.24920029],\n",
" [ 66.17528393],\n",
" [ 32.72712739],\n",
" [ 48.04694949],\n",
" [ 63.18973951],\n",
" [ 74.46336821],\n",
" [ 48.33797266],\n",
" [ 65.04509684],\n",
" [ 52.45374106],\n",
" [ 75.73393881],\n",
" [ 65.40540762],\n",
" [ 96.91813073],\n",
" [ 98.85736894],\n",
" [ 59.54782025],\n",
" [ 58.35315973],\n",
" [ 76.31584543],\n",
" [ 80.88687419],\n",
" [ 68.40109228],\n",
" [ 99.46657981],\n",
" [ 55.69600514],\n",
" [ 70.66753784],\n",
" [ 55.42032384],\n",
" [ 49.48557775],\n",
" [ 85.77694771],\n",
" [ 54.27798217],\n",
" [ 88.01489046],\n",
" [ 83.23029333],\n",
" [ 56.35418436],\n",
" [ 69.09951328],\n",
" [ 62.77385215],\n",
" [ 61.45841708],\n",
" [ 95.0687936 ],\n",
" [ 82.14599531],\n",
" [ 85.89749466],\n",
" [ 48.98851659],\n",
" [ 85.29304054],\n",
" [ 100.46425529],\n",
" [ 68.80878518],\n",
" [ 63.95638749],\n",
" [ 88.31670911],\n",
" [ 77.67395202],\n",
" [ 92.802789 ],\n",
" [ 83.34051764],\n",
" [ 71.5771414 ],\n",
" [ 59.14946693],\n",
" [ 72.42066233],\n",
" [ 74.84815212],\n",
" [ 59.60166722],\n",
" [ 106.89089686],\n",
" [ 68.3043674 ],\n",
" [ 72.77958744],\n",
" [ 64.44028912],\n",
" [ 92.14475295],\n",
" [ 61.06719157],\n",
" [ 64.2023607 ],\n",
" [ 66.91098824],\n",
" [ 72.01164284],\n",
" [ 69.6338128 ],\n",
" [ 40.15173733],\n",
" [ 74.69523408],\n",
" [ 66.43905742],\n",
" [ 86.77540319],\n",
" [ 59.80673894],\n",
" [ 74.35558644],\n",
" [ 43.03299382],\n",
" [ 76.75455704],\n",
" [ 106.61736086],\n",
" [ 65.04868451],\n",
" [ 37.65068646],\n",
" [ 43.18321509],\n",
" [ 62.62927552],\n",
" [ 83.79143897],\n",
" [ 67.18587381],\n",
" [ 76.87232387],\n",
" [ 39.36083759],\n",
" [ 57.42434958],\n",
" [ 28.03371546],\n",
" [ 94.60826983],\n",
" [ 87.18632368],\n",
" [ 69.95334227],\n",
" [ 88.30157967],\n",
" [ 44.91678264],\n",
" [ 72.04121973],\n",
" [ 79.0406611 ],\n",
" [ 41.95999935],\n",
" [ 87.95691541],\n",
" [ 61.14216719],\n",
" [ 73.55488501],\n",
" [ 82.91158743],\n",
" [ 102.21622109],\n",
" [ 75.05214315],\n",
" [ 58.92634454],\n",
" [ 88.22838117],\n",
" [ 85.46068848],\n",
" [ 77.38687649],\n",
" [ 61.84889438]]), matrix([[ 43.5303972 ],\n",
" [ 74.54649835],\n",
" [ 68.89622251],\n",
" [ 64.31743058],\n",
" [ 75.70693672],\n",
" [ 65.05462428],\n",
" [ 42.92834435],\n",
" [ 39.09581255],\n",
" [ 71.07401734],\n",
" [ 74.88673758],\n",
" [ 48.02895027],\n",
" [ 76.28093184],\n",
" [ 57.98980113],\n",
" [ 67.70575296],\n",
" [ 71.83075615],\n",
" [ 95.85671429],\n",
" [ 89.95522085],\n",
" [ 62.63177873],\n",
" [ 67.45050308],\n",
" [ 76.62989088],\n",
" [ 68.21874662],\n",
" [ 76.55179434],\n",
" [ 95.7106287 ],\n",
" [ 55.36094626],\n",
" [ 62.73336713],\n",
" [ 51.90469512],\n",
" [ 61.56889296],\n",
" [ 84.79752264],\n",
" [ 45.17175975],\n",
" [ 78.78643669],\n",
" [ 81.26302664],\n",
" [ 64.77887782],\n",
" [ 63.89068738],\n",
" [ 55.46680353],\n",
" [ 61.49518103],\n",
" [ 97.58881792],\n",
" [ 75.25074955],\n",
" [ 77.85035071],\n",
" [ 60.47235198],\n",
" [ 86.57750717],\n",
" [ 104.63173598],\n",
" [ 69.17546726],\n",
" [ 66.85369886],\n",
" [ 81.26909288],\n",
" [ 69.58230394],\n",
" [ 90.52846005],\n",
" [ 83.31785726],\n",
" [ 67.34686821],\n",
" [ 54.69097377],\n",
" [ 74.68738339],\n",
" [ 76.39580211],\n",
" [ 72.14804645],\n",
" [ 93.45718514],\n",
" [ 58.70893144],\n",
" [ 77.50436736],\n",
" [ 68.58170696],\n",
" [ 89.33194997],\n",
" [ 57.93495677],\n",
" [ 67.82273616],\n",
" [ 60.2394094 ],\n",
" [ 69.35259795],\n",
" [ 79.21105509],\n",
" [ 45.26821649],\n",
" [ 76.46471209],\n",
" [ 71.79161807],\n",
" [ 86.39047473],\n",
" [ 66.49162927],\n",
" [ 73.13250431],\n",
" [ 49.88951397],\n",
" [ 71.80965992],\n",
" [ 104.78369787],\n",
" [ 61.96017031],\n",
" [ 42.33137265],\n",
" [ 51.87553943],\n",
" [ 67.23348297],\n",
" [ 78.65563918],\n",
" [ 69.88444091],\n",
" [ 75.29507373],\n",
" [ 49.74700131],\n",
" [ 65.14909822],\n",
" [ 25.44512339],\n",
" [ 88.67210684],\n",
" [ 92.08532545],\n",
" [ 71.24212444],\n",
" [ 90.98193989],\n",
" [ 55.79771517],\n",
" [ 66.70972136],\n",
" [ 82.77879488],\n",
" [ 41.9988943 ],\n",
" [ 79.92631815],\n",
" [ 65.71787468],\n",
" [ 72.05087289],\n",
" [ 86.73536238],\n",
" [ 98.53725722],\n",
" [ 79.12284137],\n",
" [ 57.20682977],\n",
" [ 88.3679143 ],\n",
" [ 82.46689817],\n",
" [ 78.24442686],\n",
" [ 68.46112895]]), matrix([[ 47.63384005],\n",
" [ 74.57478072],\n",
" [ 71.78693484],\n",
" [ 67.49138408],\n",
" [ 76.33831457],\n",
" [ 67.1152585 ],\n",
" [ 40.54054958],\n",
" [ 39.02791858],\n",
" [ 69.1228064 ],\n",
" [ 80.7073134 ],\n",
" [ 52.68810625],\n",
" [ 79.6736157 ],\n",
" [ 64.55693209],\n",
" [ 71.9108874 ],\n",
" [ 78.56490631],\n",
" [ 90.71003364],\n",
" [ 93.74362495],\n",
" [ 63.02828146],\n",
" [ 72.64452517],\n",
" [ 75.067311 ],\n",
" [ 64.8153636 ],\n",
" [ 78.67527941],\n",
" [ 86.70827733],\n",
" [ 57.27464747],\n",
" [ 66.85514988],\n",
" [ 50.97770086],\n",
" [ 65.3037224 ],\n",
" [ 89.07944316],\n",
" [ 45.04287648],\n",
" [ 79.03893844],\n",
" [ 79.77067844],\n",
" [ 72.63505467],\n",
" [ 58.36460568],\n",
" [ 60.23400931],\n",
" [ 57.00349005],\n",
" [ 98.13531264],\n",
" [ 74.92803534],\n",
" [ 74.53192422],\n",
" [ 60.68854772],\n",
" [ 84.65154567],\n",
" [ 104.17997656],\n",
" [ 73.61782026],\n",
" [ 67.00088241],\n",
" [ 78.35659322],\n",
" [ 67.29085777],\n",
" [ 87.65367598],\n",
" [ 81.4518479 ],\n",
" [ 66.99902271],\n",
" [ 62.7457265 ],\n",
" [ 74.26908912],\n",
" [ 73.24692906],\n",
" [ 69.77845444],\n",
" [ 91.67550133],\n",
" [ 61.71236446],\n",
" [ 71.86426425],\n",
" [ 71.3475908 ],\n",
" [ 92.1699887 ],\n",
" [ 53.63354129],\n",
" [ 70.50136032],\n",
" [ 55.14355763],\n",
" [ 72.10717394],\n",
" [ 73.0695912 ],\n",
" [ 46.22707709],\n",
" [ 79.46261756],\n",
" [ 69.6672621 ],\n",
" [ 83.16093882],\n",
" [ 69.27123413],\n",
" [ 70.63432299],\n",
" [ 48.26688035],\n",
" [ 67.84443476],\n",
" [ 99.72484501],\n",
" [ 68.44473512],\n",
" [ 44.05337794],\n",
" [ 51.11388006],\n",
" [ 65.65191882],\n",
" [ 72.03187646],\n",
" [ 65.64094591],\n",
" [ 80.04261016],\n",
" [ 49.05297577],\n",
" [ 66.01766224],\n",
" [ 33.74636002],\n",
" [ 91.21868879],\n",
" [ 84.86729669],\n",
" [ 69.28529891],\n",
" [ 86.06704752],\n",
" [ 56.51641638],\n",
" [ 68.48468834],\n",
" [ 83.10544606],\n",
" [ 42.38864978],\n",
" [ 79.19196524],\n",
" [ 60.49891349],\n",
" [ 76.39645729],\n",
" [ 88.81624409],\n",
" [ 98.63353439],\n",
" [ 71.27580687],\n",
" [ 56.75069165],\n",
" [ 84.28106453],\n",
" [ 75.64487298],\n",
" [ 74.50317061],\n",
" [ 67.78447082]]), matrix([[ 48.52088591],\n",
" [ 74.92381247],\n",
" [ 68.38152137],\n",
" [ 65.26818263],\n",
" [ 76.55722364],\n",
" [ 65.02487641],\n",
" [ 43.27400703],\n",
" [ 40.86388791],\n",
" [ 63.19089341],\n",
" [ 85.23897291],\n",
" [ 57.36246454],\n",
" [ 76.92394561],\n",
" [ 63.40552232],\n",
" [ 64.19966729],\n",
" [ 74.2165657 ],\n",
" [ 90.09910172],\n",
" [ 92.59202046],\n",
" [ 66.01428401],\n",
" [ 75.11916975],\n",
" [ 73.1929493 ],\n",
" [ 64.56893734],\n",
" [ 76.77644376],\n",
" [ 88.48667663],\n",
" [ 59.95421552],\n",
" [ 71.28373697],\n",
" [ 51.85321433],\n",
" [ 68.87313185],\n",
" [ 86.23094524],\n",
" [ 54.39752666],\n",
" [ 78.15854688],\n",
" [ 78.42977364],\n",
" [ 69.13580336],\n",
" [ 60.83081625],\n",
" [ 62.36955757],\n",
" [ 59.12703943],\n",
" [ 100.52303667],\n",
" [ 71.18934903],\n",
" [ 75.98457399],\n",
" [ 63.38373498],\n",
" [ 84.09475756],\n",
" [ 99.40574106],\n",
" [ 74.63210394],\n",
" [ 62.76777745],\n",
" [ 77.70985583],\n",
" [ 75.24917748],\n",
" [ 86.1244633 ],\n",
" [ 85.4681703 ],\n",
" [ 60.63289424],\n",
" [ 64.32568352],\n",
" [ 71.34641395],\n",
" [ 77.6155307 ],\n",
" [ 65.3325952 ],\n",
" [ 90.51474566],\n",
" [ 57.42977362],\n",
" [ 71.8290899 ],\n",
" [ 73.60269341],\n",
" [ 91.87916636],\n",
" [ 54.36933289],\n",
" [ 70.54665492],\n",
" [ 55.12105311],\n",
" [ 70.77922831],\n",
" [ 74.29435989],\n",
" [ 53.43311604],\n",
" [ 79.29769776],\n",
" [ 64.75610796],\n",
" [ 86.82886291],\n",
" [ 71.13685418],\n",
" [ 67.63057846],\n",
" [ 46.25793477],\n",
" [ 67.77342892],\n",
" [ 94.79167086],\n",
" [ 61.52355623],\n",
" [ 46.23809583],\n",
" [ 50.52363146],\n",
" [ 62.27022242],\n",
" [ 79.57792947],\n",
" [ 70.07603526],\n",
" [ 75.40923061],\n",
" [ 51.16850858],\n",
" [ 69.3330632 ],\n",
" [ 28.55979791],\n",
" [ 94.25830139],\n",
" [ 84.93812309],\n",
" [ 70.23777193],\n",
" [ 78.64940743],\n",
" [ 57.43072052],\n",
" [ 64.97404014],\n",
" [ 82.96973701],\n",
" [ 42.14865369],\n",
" [ 76.4565539 ],\n",
" [ 61.83124182],\n",
" [ 79.07848413],\n",
" [ 92.17080071],\n",
" [ 100.28157546],\n",
" [ 69.8195553 ],\n",
" [ 55.34552451],\n",
" [ 82.04911224],\n",
" [ 81.63458148],\n",
" [ 70.38432234],\n",
" [ 68.77664958]]), matrix([[ 46.04236729],\n",
" [ 76.11185907],\n",
" [ 67.94424752],\n",
" [ 67.99629902],\n",
" [ 70.20416937],\n",
" [ 61.00285127],\n",
" [ 50.57339215],\n",
" [ 43.7228979 ],\n",
" [ 59.18646954],\n",
" [ 86.50444579],\n",
" [ 61.30131139],\n",
" [ 81.69748603],\n",
" [ 60.28409617],\n",
" [ 67.12360751],\n",
" [ 72.40264484],\n",
" [ 88.55315887],\n",
" [ 90.70411724],\n",
" [ 70.63063011],\n",
" [ 73.37737282],\n",
" [ 76.51447186],\n",
" [ 65.34294181],\n",
" [ 73.24107379],\n",
" [ 83.12450501],\n",
" [ 55.64903124],\n",
" [ 77.29911301],\n",
" [ 53.16485635],\n",
" [ 69.17922295],\n",
" [ 82.33279708],\n",
" [ 58.36937931],\n",
" [ 82.89541758],\n",
" [ 77.19782881],\n",
" [ 72.48738943],\n",
" [ 65.88672237],\n",
" [ 63.07332189],\n",
" [ 57.48330618],\n",
" [ 101.15775915],\n",
" [ 71.39895846],\n",
" [ 78.38370775],\n",
" [ 62.90455549],\n",
" [ 88.74639888],\n",
" [ 99.51051355],\n",
" [ 68.598746 ],\n",
" [ 62.37543772],\n",
" [ 80.10284067],\n",
" [ 72.21685617],\n",
" [ 83.370282 ],\n",
" [ 79.33792083],\n",
" [ 64.62540888],\n",
" [ 62.09237552],\n",
" [ 76.55934209],\n",
" [ 78.82384463],\n",
" [ 69.32772535],\n",
" [ 89.04744667],\n",
" [ 64.66036631],\n",
" [ 67.86385662],\n",
" [ 72.67566928],\n",
" [ 93.89278229],\n",
" [ 54.77681927],\n",
" [ 74.00905459],\n",
" [ 50.92024662],\n",
" [ 71.98077817],\n",
" [ 76.23615478],\n",
" [ 54.75293638],\n",
" [ 73.45893295],\n",
" [ 65.36667485],\n",
" [ 84.11411822],\n",
" [ 66.23815972],\n",
" [ 62.4238789 ],\n",
" [ 49.43685937],\n",
" [ 66.04693423],\n",
" [ 92.50602164],\n",
" [ 62.16206575],\n",
" [ 41.80442366],\n",
" [ 47.8925694 ],\n",
" [ 60.31474782],\n",
" [ 73.12806742],\n",
" [ 71.65107276],\n",
" [ 77.05044311],\n",
" [ 57.22203587],\n",
" [ 72.4902269 ],\n",
" [ 34.13321028],\n",
" [ 90.08189517],\n",
" [ 86.12985714],\n",
" [ 67.08698438],\n",
" [ 79.7264286 ],\n",
" [ 58.65823892],\n",
" [ 64.26296429],\n",
" [ 80.15117974],\n",
" [ 45.92007943],\n",
" [ 73.97237877],\n",
" [ 65.29568723],\n",
" [ 81.23560784],\n",
" [ 90.14383408],\n",
" [ 95.3739171 ],\n",
" [ 64.94389028],\n",
" [ 60.24726218],\n",
" [ 83.19376077],\n",
" [ 82.89725446],\n",
" [ 64.13602399],\n",
" [ 69.9644247 ]]), matrix([[ 46.04220348],\n",
" [ 76.11250232],\n",
" [ 67.94508604],\n",
" [ 67.99651142],\n",
" [ 70.20237257],\n",
" [ 61.00247724],\n",
" [ 50.57356892],\n",
" [ 43.72456081],\n",
" [ 59.18598754],\n",
" [ 86.50553171],\n",
" [ 61.30244375],\n",
" [ 81.69750621],\n",
" [ 60.28511214],\n",
" [ 67.12292418],\n",
" [ 72.40087523],\n",
" [ 88.55316562],\n",
" [ 90.70334845],\n",
" [ 70.63068337],\n",
" [ 73.37788996],\n",
" [ 76.51238355],\n",
" [ 65.34367583],\n",
" [ 73.24099544],\n",
" [ 83.12582226],\n",
" [ 55.65049516],\n",
" [ 77.2991962 ],\n",
" [ 53.16560957],\n",
" [ 69.17914748],\n",
" [ 82.33104663],\n",
" [ 58.36803275],\n",
" [ 82.89305922],\n",
" [ 77.19837891],\n",
" [ 72.48619726],\n",
" [ 65.88777273],\n",
" [ 63.07305569],\n",
" [ 57.48357684],\n",
" [ 101.15574261],\n",
" [ 71.40095905],\n",
" [ 78.38299131],\n",
" [ 62.90494872],\n",
" [ 88.74519164],\n",
" [ 99.50829105],\n",
" [ 68.59959453],\n",
" [ 62.37655511],\n",
" [ 80.10386631],\n",
" [ 72.21851915],\n",
" [ 83.36892338],\n",
" [ 79.33724852],\n",
" [ 64.62621479],\n",
" [ 62.09157494],\n",
" [ 76.55808265],\n",
" [ 78.82451967],\n",
" [ 69.32816968],\n",
" [ 89.04474483],\n",
" [ 64.65947553],\n",
" [ 67.86548203],\n",
" [ 72.67484244],\n",
" [ 93.89275856],\n",
" [ 54.77569648],\n",
" [ 74.00947938],\n",
" [ 50.92257957],\n",
" [ 71.98204921],\n",
" [ 76.23588608],\n",
" [ 54.75544027],\n",
" [ 73.45788927],\n",
" [ 65.36608538],\n",
" [ 84.11370588],\n",
" [ 66.23816152],\n",
" [ 62.42417297],\n",
" [ 49.4366106 ],\n",
" [ 66.04675955],\n",
" [ 92.50530132],\n",
" [ 62.16215031],\n",
" [ 41.80469395],\n",
" [ 47.89524644],\n",
" [ 60.31644502],\n",
" [ 73.12657915],\n",
" [ 71.65071431],\n",
" [ 77.04952751],\n",
" [ 57.2236569 ],\n",
" [ 72.48898841],\n",
" [ 34.13115939],\n",
" [ 90.07903754],\n",
" [ 86.12944897],\n",
" [ 67.0875134 ],\n",
" [ 79.72641375],\n",
" [ 58.65934607],\n",
" [ 64.26406903],\n",
" [ 80.15105512],\n",
" [ 45.91997078],\n",
" [ 73.97368686],\n",
" [ 65.29836048],\n",
" [ 81.23364873],\n",
" [ 90.1437375 ],\n",
" [ 95.37239001],\n",
" [ 64.94365677],\n",
" [ 60.24944783],\n",
" [ 83.19578089],\n",
" [ 82.8959915 ],\n",
" [ 64.13754776],\n",
" [ 69.96682824]]), matrix([[ 46.04348562],\n",
" [ 76.11486471],\n",
" [ 67.94457965],\n",
" [ 67.99764614],\n",
" [ 70.201355 ],\n",
" [ 61.00149468],\n",
" [ 50.57487801],\n",
" [ 43.7229052 ],\n",
" [ 59.18487123],\n",
" [ 86.50545063],\n",
" [ 61.30138546],\n",
" [ 81.69806459],\n",
" [ 60.28511493],\n",
" [ 67.12261617],\n",
" [ 72.40197365],\n",
" [ 88.55169558],\n",
" [ 90.70449832],\n",
" [ 70.63080753],\n",
" [ 73.37796204],\n",
" [ 76.51256378],\n",
" [ 65.34391809],\n",
" [ 73.24271705],\n",
" [ 83.12467227],\n",
" [ 55.65025778],\n",
" [ 77.29955482],\n",
" [ 53.16678952],\n",
" [ 69.17999149],\n",
" [ 82.33123186],\n",
" [ 58.36731006],\n",
" [ 82.89311973],\n",
" [ 77.19863634],\n",
" [ 72.48502106],\n",
" [ 65.88917595],\n",
" [ 63.07233727],\n",
" [ 57.48166966],\n",
" [ 101.155992 ],\n",
" [ 71.40011568],\n",
" [ 78.38364608],\n",
" [ 62.90351922],\n",
" [ 88.74667775],\n",
" [ 99.51059283],\n",
" [ 68.60018507],\n",
" [ 62.37743574],\n",
" [ 80.10506926],\n",
" [ 72.21920089],\n",
" [ 83.36715697],\n",
" [ 79.33875229],\n",
" [ 64.62614481],\n",
" [ 62.09234944],\n",
" [ 76.55600261],\n",
" [ 78.8266147 ],\n",
" [ 69.32585058],\n",
" [ 89.04519334],\n",
" [ 64.65971445],\n",
" [ 67.86543788],\n",
" [ 72.67607675],\n",
" [ 93.89440736],\n",
" [ 54.77624555],\n",
" [ 74.01161803],\n",
" [ 50.92323775],\n",
" [ 71.98104805],\n",
" [ 76.23551826],\n",
" [ 54.75641465],\n",
" [ 73.45701682],\n",
" [ 65.36665219],\n",
" [ 84.11237768],\n",
" [ 66.23854598],\n",
" [ 62.4238328 ],\n",
" [ 49.43578758],\n",
" [ 66.04740413],\n",
" [ 92.50556429],\n",
" [ 62.16050196],\n",
" [ 41.80477564],\n",
" [ 47.89536471],\n",
" [ 60.31431068],\n",
" [ 73.12605168],\n",
" [ 71.65128059],\n",
" [ 77.04850527],\n",
" [ 57.22428351],\n",
" [ 72.49038898],\n",
" [ 34.12785008],\n",
" [ 90.07920507],\n",
" [ 86.12936072],\n",
" [ 67.08422608],\n",
" [ 79.72493362],\n",
" [ 58.65997261],\n",
" [ 64.26451819],\n",
" [ 80.15030592],\n",
" [ 45.92020484],\n",
" [ 73.97466711],\n",
" [ 65.29615784],\n",
" [ 81.23438958],\n",
" [ 90.14343345],\n",
" [ 95.37150719],\n",
" [ 64.9427182 ],\n",
" [ 60.24919321],\n",
" [ 83.19704143],\n",
" [ 82.89633315],\n",
" [ 64.13843015],\n",
" [ 69.96730756]]), matrix([[ 46.05092317],\n",
" [ 76.14231706],\n",
" [ 67.94280623],\n",
" [ 67.98843538],\n",
" [ 70.12375939],\n",
" [ 61.0025449 ],\n",
" [ 50.60284642],\n",
" [ 43.73803487],\n",
" [ 59.34222863],\n",
" [ 86.50187952],\n",
" [ 61.37391088],\n",
" [ 81.57248831],\n",
" [ 60.36046793],\n",
" [ 67.10334358],\n",
" [ 72.42936588],\n",
" [ 88.57047973],\n",
" [ 90.7542228 ],\n",
" [ 70.52132176],\n",
" [ 73.30304535],\n",
" [ 76.59684449],\n",
" [ 65.2791101 ],\n",
" [ 73.35071258],\n",
" [ 83.20363624],\n",
" [ 55.68793142],\n",
" [ 77.20173062],\n",
" [ 53.08747314],\n",
" [ 69.16688575],\n",
" [ 82.19973462],\n",
" [ 58.35336609],\n",
" [ 82.91838447],\n",
" [ 77.25961595],\n",
" [ 72.44890751],\n",
" [ 65.84077435],\n",
" [ 63.13361277],\n",
" [ 57.55046736],\n",
" [ 101.1398473 ],\n",
" [ 71.46346868],\n",
" [ 78.36003543],\n",
" [ 62.92503305],\n",
" [ 88.83176739],\n",
" [ 99.61557489],\n",
" [ 68.57791729],\n",
" [ 62.35644321],\n",
" [ 80.14203152],\n",
" [ 72.19008858],\n",
" [ 83.38416654],\n",
" [ 79.22121087],\n",
" [ 64.57517197],\n",
" [ 62.05021582],\n",
" [ 76.62298616],\n",
" [ 78.77207513],\n",
" [ 69.43270691],\n",
" [ 88.91685715],\n",
" [ 64.60827109],\n",
" [ 67.90390747],\n",
" [ 72.75838621],\n",
" [ 93.91165499],\n",
" [ 54.80049324],\n",
" [ 73.98514975],\n",
" [ 50.89272034],\n",
" [ 71.97907589],\n",
" [ 76.24997093],\n",
" [ 54.70197631],\n",
" [ 73.39322194],\n",
" [ 65.32148345],\n",
" [ 84.1765187 ],\n",
" [ 66.18289671],\n",
" [ 62.5194645 ],\n",
" [ 49.42101685],\n",
" [ 66.09237536],\n",
" [ 92.47823362],\n",
" [ 62.21858987],\n",
" [ 41.94658341],\n",
" [ 47.97553312],\n",
" [ 60.34685579],\n",
" [ 73.10010908],\n",
" [ 71.72557315],\n",
" [ 77.0462404 ],\n",
" [ 57.19327478],\n",
" [ 72.49179174],\n",
" [ 34.08116881],\n",
" [ 90.00140644],\n",
" [ 86.09227269],\n",
" [ 66.97638368],\n",
" [ 79.7054274 ],\n",
" [ 58.74776406],\n",
" [ 64.22701189],\n",
" [ 80.11743917],\n",
" [ 45.89237557],\n",
" [ 73.94051892],\n",
" [ 65.27478571],\n",
" [ 81.22452031],\n",
" [ 90.13782937],\n",
" [ 95.35733028],\n",
" [ 65.01997942],\n",
" [ 60.21892138],\n",
" [ 83.12270494],\n",
" [ 82.93218463],\n",
" [ 64.1905979 ],\n",
" [ 69.8462731 ]]), matrix([[ 46.04715997],\n",
" [ 76.14390486],\n",
" [ 67.9766168 ],\n",
" [ 67.97850947],\n",
" [ 70.16260278],\n",
" [ 61.05819222],\n",
" [ 50.60194979],\n",
" [ 43.74409635],\n",
" [ 59.35499728],\n",
" [ 86.42183859],\n",
" [ 61.36190958],\n",
" [ 81.5741915 ],\n",
" [ 60.37494174],\n",
" [ 67.10813197],\n",
" [ 72.46048082],\n",
" [ 88.55167055],\n",
" [ 90.72145563],\n",
" [ 70.48695042],\n",
" [ 73.28342051],\n",
" [ 76.59504407],\n",
" [ 65.27504759],\n",
" [ 73.38406258],\n",
" [ 83.14599996],\n",
" [ 55.70953811],\n",
" [ 77.20907712],\n",
" [ 53.07076855],\n",
" [ 69.1756935 ],\n",
" [ 82.20496296],\n",
" [ 58.34737558],\n",
" [ 82.92906037],\n",
" [ 77.25174727],\n",
" [ 72.42619398],\n",
" [ 65.85663508],\n",
" [ 63.13653401],\n",
" [ 57.57866961],\n",
" [ 101.11286042],\n",
" [ 71.43927187],\n",
" [ 78.36285054],\n",
" [ 62.95537435],\n",
" [ 88.80152387],\n",
" [ 99.61520789],\n",
" [ 68.54017751],\n",
" [ 62.35118452],\n",
" [ 80.13608212],\n",
" [ 72.20167724],\n",
" [ 83.39957441],\n",
" [ 79.23511272],\n",
" [ 64.58407176],\n",
" [ 62.05712171],\n",
" [ 76.66368888],\n",
" [ 78.78181704],\n",
" [ 69.4156587 ],\n",
" [ 88.91934474],\n",
" [ 64.63503387],\n",
" [ 67.87232113],\n",
" [ 72.71874063],\n",
" [ 93.86841335],\n",
" [ 54.80584671],\n",
" [ 73.98743865],\n",
" [ 50.92550052],\n",
" [ 72.01246006],\n",
" [ 76.28776044],\n",
" [ 54.73455 ],\n",
" [ 73.36324944],\n",
" [ 65.3156088 ],\n",
" [ 84.18808822],\n",
" [ 66.15858518],\n",
" [ 62.5112498 ],\n",
" [ 49.43649085],\n",
" [ 66.06767107],\n",
" [ 92.53382469],\n",
" [ 62.25381772],\n",
" [ 41.97114845],\n",
" [ 47.99094234],\n",
" [ 60.31428639],\n",
" [ 73.13746914],\n",
" [ 71.73787701],\n",
" [ 77.03844409],\n",
" [ 57.21734676],\n",
" [ 72.47239652],\n",
" [ 34.07709924],\n",
" [ 90.01946896],\n",
" [ 86.09137989],\n",
" [ 66.94202872],\n",
" [ 79.73802907],\n",
" [ 58.69602422],\n",
" [ 64.21256 ],\n",
" [ 80.12901242],\n",
" [ 45.90151033],\n",
" [ 73.95670864],\n",
" [ 65.25168351],\n",
" [ 81.24919212],\n",
" [ 90.11215593],\n",
" [ 95.34362577],\n",
" [ 65.00372395],\n",
" [ 60.22904055],\n",
" [ 83.16814589],\n",
" [ 82.86499086],\n",
" [ 64.1715696 ],\n",
" [ 69.83186442]]), matrix([[ 46.06668484],\n",
" [ 76.17073585],\n",
" [ 67.94390003],\n",
" [ 67.96234431],\n",
" [ 70.16305244],\n",
" [ 61.06323908],\n",
" [ 50.55934332],\n",
" [ 43.71441968],\n",
" [ 59.38293176],\n",
" [ 86.43471196],\n",
" [ 61.35742593],\n",
" [ 81.53890367],\n",
" [ 60.306315 ],\n",
" [ 67.11589719],\n",
" [ 72.49333117],\n",
" [ 88.49904098],\n",
" [ 90.75042432],\n",
" [ 70.432736 ],\n",
" [ 73.25622309],\n",
" [ 76.58445721],\n",
" [ 65.28778546],\n",
" [ 73.38791434],\n",
" [ 83.19002369],\n",
" [ 55.69808938],\n",
" [ 77.19444344],\n",
" [ 53.12780617],\n",
" [ 69.17555473],\n",
" [ 82.16627471],\n",
" [ 58.40866416],\n",
" [ 82.89986484],\n",
" [ 77.25853201],\n",
" [ 72.40167025],\n",
" [ 65.88228731],\n",
" [ 63.15470274],\n",
" [ 57.57295448],\n",
" [ 101.12454447],\n",
" [ 71.50447468],\n",
" [ 78.38582798],\n",
" [ 62.95280074],\n",
" [ 88.76002761],\n",
" [ 99.63767143],\n",
" [ 68.49689312],\n",
" [ 62.32434077],\n",
" [ 80.13046659],\n",
" [ 72.21700408],\n",
" [ 83.43147604],\n",
" [ 79.21629906],\n",
" [ 64.57409068],\n",
" [ 62.1267518 ],\n",
" [ 76.63334776],\n",
" [ 78.7791714 ],\n",
" [ 69.44929455],\n",
" [ 88.94458967],\n",
" [ 64.66079452],\n",
" [ 67.89081749],\n",
" [ 72.79593279],\n",
" [ 93.89786777],\n",
" [ 54.86135315],\n",
" [ 73.99312378],\n",
" [ 50.93559037],\n",
" [ 72.03630396],\n",
" [ 76.19625376],\n",
" [ 54.74811643],\n",
" [ 73.30137447],\n",
" [ 65.2693466 ],\n",
" [ 84.14805363],\n",
" [ 66.14785233],\n",
" [ 62.54754235],\n",
" [ 49.44804363],\n",
" [ 66.07754797],\n",
" [ 92.55939351],\n",
" [ 62.2095449 ],\n",
" [ 42.01264976],\n",
" [ 48.04385053],\n",
" [ 60.31841008],\n",
" [ 73.18807224],\n",
" [ 71.70005349],\n",
" [ 77.00400536],\n",
" [ 57.21087898],\n",
" [ 72.46876499],\n",
" [ 34.08269914],\n",
" [ 89.98591114],\n",
" [ 86.09609958],\n",
" [ 66.90436443],\n",
" [ 79.74744019],\n",
" [ 58.74003503],\n",
" [ 64.2194228 ],\n",
" [ 80.08419225],\n",
" [ 45.93592253],\n",
" [ 73.9379609 ],\n",
" [ 65.21796878],\n",
" [ 81.26370637],\n",
" [ 90.1183691 ],\n",
" [ 95.29961974],\n",
" [ 65.01458777],\n",
" [ 60.21288293],\n",
" [ 83.09953845],\n",
" [ 82.88909836],\n",
" [ 64.18179965],\n",
" [ 69.83597149]])]}"
]
},
"execution_count": 114,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A1(X,y)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 117,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'Cp_star': 22.983538807129662,\n",
" 'columns': [2, 1, 0, 5, 10, 6, 8, 7, 3, 9, 4],\n",
" 's_star': 11,\n",
" 'theta_star': matrix([[ 19.41889449],\n",
" [ 16.38521028],\n",
" [ 13.89324747],\n",
" [ 19.6291533 ],\n",
" [ 0.21747797],\n",
" [ 10.86372329],\n",
" [ 10.11290137],\n",
" [ 11.21221181],\n",
" [ 15.54897541],\n",
" [ 10.62785412],\n",
" [ 13.99778599]])}"
]
},
"execution_count": 117,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A2(X,y,50)"
]
},
{
"cell_type": "code",
"execution_count": 116,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"{'Cp_star': 29.250922538344298,\n",
" 'columns': [0, 6, 5, 2, 4, 1, 3, 9, 7, 8],\n",
" 's_star': 10,\n",
" 'theta_star': matrix([[ 13.90214828],\n",
" [ 10.9106186 ],\n",
" [ 19.70070289],\n",
" [ 19.43639678],\n",
" [ 13.96468166],\n",
" [ 16.36415817],\n",
" [ 15.54021027],\n",
" [ 10.67803299],\n",
" [ 11.22978783],\n",
" [ 10.16266936]])}"
]
},
"execution_count": 116,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A3(X,y)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment