Skip to content
Permalink
master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# CompMech04-Linear Algebra Project\n",
"# Practical Linear Algebra for Finite Element Analysis\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this project we will perform a linear-elastic finite element analysis (FEA) on a support structure made of 11 beams that are riveted in 7 locations to create a truss as shown in the image below. \n",
"\n",
"![Mesh image of truss](../images/mesh.png)\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The triangular truss shown above can be modeled using a [direct stiffness method [1]](https://en.wikipedia.org/wiki/Direct_stiffness_method), that is detailed in the [extra-FEA_material](./extra-FEA_material.ipynb) notebook. The end result of converting this structure to a FE model. Is that each joint, labeled $n~1-7$, short for _node 1-7_ can move in the x- and y-directions, but causes a force modeled with Hooke's law. Each beam labeled $el~1-11$, short for _element 1-11_, contributes to the stiffness of the structure. We have 14 equations where the sum of the components of forces = 0, represented by the equation\n",
"\n",
"$\\mathbf{F-Ku}=\\mathbf{0}$\n",
"\n",
"Where, $\\mathbf{F}$ are externally applied forces, $\\mathbf{u}$ are x- and y- displacements of nodes, and $\\mathbf{K}$ is the stiffness matrix given in `fea_arrays.npz` as `K`, shown below\n",
"\n",
"_note: the array shown is 1000x(`K`). You can use units of MPa (N/mm^2), N, and mm. The array `K` is in 1/mm_\n",
"\n",
"$\\mathbf{K}=EA*$\n",
"\n",
"$ \\left[ \\begin{array}{cccccccccccccc}\n",
" 4.2 & 1.4 & -0.8 & -1.4 & -3.3 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 \\\\\n",
" 1.4 & 2.5 & -1.4 & -2.5 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 \\\\\n",
" -0.8 & -1.4 & 5.0 & 0.0 & -0.8 & 1.4 & -3.3 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 \\\\\n",
" -1.4 & -2.5 & 0.0 & 5.0 & 1.4 & -2.5 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 \\\\\n",
" -3.3 & 0.0 & -0.8 & 1.4 & 8.3 & 0.0 & -0.8 & -1.4 & -3.3 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 \\\\\n",
" 0.0 & 0.0 & 1.4 & -2.5 & 0.0 & 5.0 & -1.4 & -2.5 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 \\\\\n",
" 0.0 & 0.0 & -3.3 & 0.0 & -0.8 & -1.4 & 8.3 & 0.0 & -0.8 & 1.4 & -3.3 & 0.0 & 0.0 & 0.0 \\\\\n",
" 0.0 & 0.0 & 0.0 & 0.0 & -1.4 & -2.5 & 0.0 & 5.0 & 1.4 & -2.5 & 0.0 & 0.0 & 0.0 & 0.0 \\\\\n",
" 0.0 & 0.0 & 0.0 & 0.0 & -3.3 & 0.0 & -0.8 & 1.4 & 8.3 & 0.0 & -0.8 & -1.4 & -3.3 & 0.0 \\\\\n",
" 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 1.4 & -2.5 & 0.0 & 5.0 & -1.4 & -2.5 & 0.0 & 0.0 \\\\\n",
" 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & -3.3 & 0.0 & -0.8 & -1.4 & 5.0 & 0.0 & -0.8 & 1.4 \\\\\n",
" 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & -1.4 & -2.5 & 0.0 & 5.0 & 1.4 & -2.5 \\\\\n",
" 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & -3.3 & 0.0 & -0.8 & 1.4 & 4.2 & -1.4 \\\\\n",
" 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 1.4 & -2.5 & -1.4 & 2.5 \\\\\n",
"\\end{array}\\right]~\\frac{1}{m}$"
]
},
{
"cell_type": "code",
"execution_count": 479,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import pprint as pp\n",
"fea_arrays = np.load('./fea_arrays.npz')\n",
"K=fea_arrays['K']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this project we are solving the problem, $\\mathbf{F}=\\mathbf{Ku}$, where $\\mathbf{F}$ is measured in Newtons, $\\mathbf{K}$ `=E*A*K` is the stiffness in N/mm, `E` is Young's modulus measured in MPa (N/mm^2), and `A` is the cross-sectional area of the beam measured in mm^2. \n",
"\n",
"There are three constraints on the motion of the joints:\n",
"\n",
"i. node 1 displacement in the x-direction is 0 = `u[0]`\n",
"\n",
"ii. node 1 displacement in the y-direction is 0 = `u[1]`\n",
"\n",
"iii. node 7 displacement in the y-direction is 0 = `u[13]`\n",
"\n",
"We can satisfy these constraints by leaving out the first, second, and last rows and columns from our linear algebra description. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1. Calculate the condition of `K` and the condition of `K[2:13,2:13]`. \n",
"\n",
"a. What error would you expect when you solve for `u` in `K*u = F`? \n",
"\n",
"b. Why is the condition of `K` so large?\n",
"\n",
"c. What error would you expect when you solve for `u[2:13]` in `K[2:13,2:13]*u=F[2:13]`"
]
},
{
"cell_type": "code",
"execution_count": 480,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The errors will be based on the K condition output\n"
]
}
],
"source": [
"#a\n",
"print('The errors will be based on the K condition output')"
]
},
{
"cell_type": "code",
"execution_count": 481,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Because the K matrix is in inacurate\n"
]
}
],
"source": [
"#b\n",
"print('Because the K matrix is in inacurate')"
]
},
{
"cell_type": "code",
"execution_count": 482,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"K condition: 1.4577532625238035e+17\n",
"K[2:13, 2:13] condition: 52.24\n"
]
}
],
"source": [
"#c\n",
"cond_K = np.linalg.cond(K)\n",
"cond_K2 = np.linalg.cond(K[2:13, 2:13])\n",
"\n",
"print('K condition: {}'.format(cond_K))\n",
"print('K[2:13, 2:13] condition: {:.2f}'.format(cond_K2))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2. Apply a 100-N downward force to the central top node (n 4)\n",
"\n",
"a. Create the LU matrix for K[2:13,2:13]\n",
"\n",
"b. Use cross-sectional area of $0.1~mm^2$ and steel and almuminum moduli, $E=200~GPa~and~E=70~GPa,$ respectively. Solve the forward and backward substitution methods for \n",
"\n",
"* $\\mathbf{Ly}=\\mathbf{F}\\frac{1}{EA}$\n",
"\n",
"* $\\mathbf{Uu}=\\mathbf{y}$\n",
"\n",
"_your array `F` is zeros, except for `F[5]=-100`, to create a -100 N load at node 4._\n",
"\n",
"c. Plug in the values for $\\mathbf{u}$ into the full equation, $\\mathbf{Ku}=\\mathbf{F}$, to solve for the reaction forces\n",
"\n",
"d. Create a plot of the undeformed and deformed structure with the displacements and forces plotted as vectors (via `quiver`). Your result for aluminum should match the following result from [extra-FEA_material](./extra-FEA_material.ipynb). _note: The scale factor is applied to displacements $\\mathbf{u}$, not forces._\n",
"\n",
"![Deformed structure with loads applied](../images/deformed_truss.png)"
]
},
{
"cell_type": "code",
"execution_count": 483,
"metadata": {},
"outputs": [],
"source": [
"def solveLU(L,U,b):\n",
" '''solveLU: solve for x when LUx = b\n",
" x = solveLU(L,U,b): solves for x given the lower and upper \n",
" triangular matrix storage\n",
" uses forward substitution for \n",
" 1. Ly = b\n",
" then backward substitution for\n",
" 2. Ux = y\n",
" \n",
" Arguments:\n",
" ----------\n",
" L = Lower triangular matrix\n",
" U = Upper triangular matrix\n",
" b = output vector\n",
" \n",
" returns:\n",
" ---------\n",
" x = solution of LUx=b '''\n",
" n=len(b)\n",
" x=np.zeros(n)\n",
" y=np.zeros(n)\n",
" \n",
" # forward substitution\n",
" for k in range(0,n):\n",
" y[k] = b[k] - L[k,0:k]@y[0:k]\n",
" # backward substitution\n",
" for k in range(n-1,-1,-1):\n",
" x[k] = (y[k] - U[k,k+1:n]@x[k+1:n])/U[k,k]\n",
" return x"
]
},
{
"cell_type": "code",
"execution_count": 484,
"metadata": {},
"outputs": [],
"source": [
"def LUNaive(A):\n",
" '''LUNaive: naive LU decomposition\n",
" L,U = LUNaive(A): LU decomposition without pivoting.\n",
" solution method requires floating point numbers, \n",
" as such the dtype is changed to float\n",
" \n",
" Arguments:\n",
" ----------\n",
" A = coefficient matrix\n",
" returns:\n",
" ---------\n",
" L = Lower triangular matrix\n",
" U = Upper triangular matrix\n",
" '''\n",
" [m,n] = np.shape(A)\n",
" if m!=n: error('Matrix A must be square')\n",
" nb = n+1\n",
" # Gauss Elimination\n",
" U = A.astype(float)\n",
" L = np.eye(n)\n",
"\n",
" for k in range(0,n-1):\n",
" for i in range(k+1,n):\n",
" if U[k,k] != 0.0:\n",
" factor = U[i,k]/U[k,k]\n",
" L[i,k]=factor\n",
" U[i,:] = U[i,:] - factor*U[k,:]\n",
" return L,U"
]
},
{
"cell_type": "code",
"execution_count": 485,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[1000. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0.\n",
" 0. ]\n",
" [ 0. 1000. 0. 0. 0.\n",
" 0. 0. 0. 0. 0.\n",
" 0. ]\n",
" [-166.66666667 288.67513459 1000. 0. 0.\n",
" 0. 0. 0. 0. 0.\n",
" 0. ]\n",
" [ 288.67513459 -500. 123.71791483 1000. 0.\n",
" 0. 0. 0. 0. 0.\n",
" 0. ]\n",
" [-666.66666667 0. -178.57142857 -96.22504486 1000.\n",
" 0. 0. 0. 0. 0.\n",
" 0. ]\n",
" [ 0. 0. -185.57687224 -722.22222222 -82.47860988\n",
" 1000. 0. 0. 0. 0.\n",
" 0. ]\n",
" [ 0. 0. -428.57142857 128.30005982 -238.0952381\n",
" 334.255419 1000. 0. 0. 0.\n",
" 0. ]\n",
" [ 0. 0. 0. 0. 247.43582965\n",
" -789.47368421 184.26072421 1000. 0. 0.\n",
" 0. ]\n",
" [ 0. 0. 0. 0. -571.42857143\n",
" -91.16056882 -248.22695035 -216.50635095 1000. 0.\n",
" 0. ]\n",
" [ 0. 0. 0. 0. 0.\n",
" 0. -233.39691733 -875. -327.68528792 1000.\n",
" 0. ]\n",
" [ 0. 0. 0. 0. 0.\n",
" 0. -539.0070922 240.56261216 -594.59459459 288.67513459\n",
" 1000. ]]\n",
"\n",
"[[ 5.00000000e+00 0.00000000e+00 -8.33333333e-01 1.44337567e+00\n",
" -3.33333333e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n",
" 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n",
" [ 0.00000000e+00 5.00000000e+00 1.44337567e+00 -2.50000000e+00\n",
" 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n",
" 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n",
" [ 0.00000000e+00 0.00000000e+00 7.77777778e+00 9.62250449e-01\n",
" -1.38888889e+00 -1.44337567e+00 -3.33333333e+00 0.00000000e+00\n",
" 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n",
" [-2.16840434e-16 0.00000000e+00 0.00000000e+00 3.21428571e+00\n",
" -3.09294787e-01 -2.32142857e+00 4.12393049e-01 0.00000000e+00\n",
" 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n",
" [-2.08654805e-17 0.00000000e+00 0.00000000e+00 0.00000000e+00\n",
" 5.83333333e+00 -4.81125224e-01 -1.38888889e+00 1.44337567e+00\n",
" -3.33333333e+00 0.00000000e+00 0.00000000e+00]\n",
" [-1.58327936e-16 0.00000000e+00 0.00000000e+00 0.00000000e+00\n",
" 0.00000000e+00 3.01587302e+00 1.00807190e+00 -2.38095238e+00\n",
" -2.74928700e-01 0.00000000e+00 0.00000000e+00]\n",
" [ 7.57746398e-17 0.00000000e+00 0.00000000e+00 0.00000000e+00\n",
" 0.00000000e+00 0.00000000e+00 6.18421053e+00 1.13950711e+00\n",
" -1.53508772e+00 -1.44337567e+00 -3.33333333e+00]\n",
" [-1.33795162e-16 0.00000000e+00 0.00000000e+00 0.00000000e+00\n",
" 0.00000000e+00 0.00000000e+00 0.00000000e+00 2.55319149e+00\n",
" -5.52782173e-01 -2.23404255e+00 6.14202414e-01]\n",
" [-3.65145909e-17 0.00000000e+00 0.00000000e+00 0.00000000e+00\n",
" 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n",
" 2.56944444e+00 -8.41969143e-01 -1.52777778e+00]\n",
" [-1.11350493e-16 0.00000000e+00 0.00000000e+00 0.00000000e+00\n",
" 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n",
" 0.00000000e+00 2.43243243e+00 7.02182760e-01]\n",
" [ 8.34619222e-17 0.00000000e+00 0.00000000e+00 0.00000000e+00\n",
" 0.00000000e+00 0.00000000e+00 -4.33680869e-16 0.00000000e+00\n",
" 0.00000000e+00 -1.08420217e-16 1.11111111e+00]]\n"
]
}
],
"source": [
"#a\n",
"K1 = K[2:13,2:13]\n",
"L,U = LUNaive(K1)\n",
"L1 = L*1000\n",
"U1 = U*1000\n",
"print(L1)\n",
"print()\n",
"print(U1)\n"
]
},
{
"cell_type": "code",
"execution_count": 486,
"metadata": {},
"outputs": [],
"source": [
"#b \n",
"L1, U1 = LUNaive(K1)\n",
"A = 0.1e-3\n",
"E_alu = 70e3\n",
"E_ste = 200e3\n",
"F = np.zeros(11)\n",
"F[5] = -100 #N\n",
"F_alu = F/(E_alum*A)\n",
"F_ste = F/(E_steel*A)"
]
},
{
"cell_type": "code",
"execution_count": 487,
"metadata": {},
"outputs": [],
"source": [
"b_ste = F*(1/E_ste/A)\n",
"b_alu = F*(1/E_alu/A)\n",
"u_ste1 = solveLU(L,U,b_ste)*1e-3\n",
"u_alu1 = solveLU(L,U,b_alu)*1e-3\n",
"F_ste1 = A*E_steel*K1@u_ste1*1e3\n",
"F_alu1 = A*E_alum*K1@u_alu1*1e3"
]
},
{
"cell_type": "code",
"execution_count": 488,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"steel displacements:\n",
"----------------\n",
"2.0\n",
"-2.0\n",
"0.0\n",
"-4.0\n",
"1.0\n",
"-5.0\n",
"2.0\n",
"-4.0\n",
"0.0\n",
"-2.0\n",
"2.0\n",
"\n",
"steel forces:\n",
"----------------\n",
"0.0\n",
"-0.0\n",
"-0.0\n",
"0.0\n",
"-0.0\n",
"-100.0\n",
"0.0\n",
"0.0\n",
"-0.0\n",
"-0.0\n",
"0.0\n",
"\n",
"aluminum displacements:\n",
"----------------\n",
"6.0\n",
"-6.0\n",
"1.0\n",
"-11.0\n",
"3.0\n",
"-15.0\n",
"5.0\n",
"-11.0\n",
"1.0\n",
"-6.0\n",
"6.0\n",
"\n",
"aluminum forces:\n",
"----------------\n",
"0.0\n",
"-0.0\n",
"0.0\n",
"0.0\n",
"0.0\n",
"-100.0\n",
"-0.0\n",
"0.0\n",
"0.0\n",
"-0.0\n",
"0.0\n"
]
}
],
"source": [
"print('steel displacements:\\n----------------')\n",
"for i in range(len(u_ste1)):\n",
" print(np.around(u_ste1[i]))\n",
"print('\\nsteel forces:\\n----------------')\n",
"for i in range(len(F_ste1)):\n",
" print(np.around(F_ste1[i]))\n",
"print('\\naluminum displacements:\\n----------------')\n",
"for i in range(len(u_alu1)):\n",
" print(np.around(u_alu1[i]))\n",
"print('\\naluminum forces:\\n----------------')\n",
"for i in range(len(F_alu1)):\n",
" print(np.around(F_alu1[i]))"
]
},
{
"cell_type": "code",
"execution_count": 489,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"No handles with labels found to put in legend.\n"
]
},
{
"data": {
"text/plain": [
"Text(0, 0.5, 'y (mm)')"
]
},
"execution_count": 489,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"#d\n",
"l=300 \n",
"nodes = np.array([[1,0,0],[2,0.5,3**0.5/2],[3,1,0],[4,1.5,3**0.5/2],[5,2,0],[6,2.5,3**0.5/2],[7,3,0]])\n",
"nodes[:,1:3]*=l\n",
"elems = np.array([[1,1,2],[2,2,3],[3,1,3],[4,2,4],[5,3,4],[6,3,5],[7,4,5],[8,4,6],[9,5,6],[10,5,7],[11,6,7]])\n",
"ix = 2*np.block([[np.arange(0,5)],[np.arange(1,6)],[np.arange(2,7)],[np.arange(0,5)]])\n",
"iy = ix+1\n",
"r = np.block([n[1:3] for n in nodes])\n",
"ix=2*np.block([[np.arange(0,5)],[np.arange(1,6)],[np.arange(2,7)],[np.arange(0,5)]])\n",
"iy= ix+1\n",
"plt.plot(r[ix],r[iy],'-',color='k')\n",
"plt.plot(r[ix],r[iy],'o',color='b')\n",
"plt.plot(r[0],r[1],'^',color='r',markersize=30)\n",
"plt.plot(r[0],r[1],'>',color='k',markersize=30)\n",
"plt.plot(r[-2],r[-1],'^',color='r',markersize=30)\n",
"for n in nodes:\n",
" if n[2]>0.8*l: offset=0.1\n",
" else: offset=-l/5\n",
" plt.text(n[1]-l/3,n[2]+offset,'n {}'.format(int(n[0])),color='b') \n",
"s = 5\n",
"plt.legend(bbox_to_anchor=(1,0.5))\n",
"plt.title('Steel deformation Scale of = {:.1f}x'.format(s), size=20)\n",
"plt.xlabel('x (mm)', size=15)\n",
"plt.ylabel('y (mm)', size=15)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3. Determine cross-sectional area\n",
"\n",
"a. Using aluminum, what is the minimum cross-sectional area to keep total y-deflections $<0.2~mm$?\n",
"\n",
"b. Using steel, what is the minimum cross-sectional area to keep total y-deflections $<0.2~mm$?\n",
"\n",
"c. What are the weights of the aluminum and steel trusses with the chosed cross-sectional areas?\n",
"\n",
"d. The current price (2020/03) of [aluminum](https://tradingeconomics.com/commodity/aluminum) is 1545 dollars/Tonne and [steel](https://tradingeconomics.com/commodity/steel) is 476 dollars/Tonne [2]. Which material is cheaper to create the truss?"
]
},
{
"cell_type": "code",
"execution_count": 490,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The minimum cross sectional area for aluminum is: 10.0\n"
]
}
],
"source": [
"#a\n",
"A_1= np.linspace(0.1,10,1000) #guess and check for range answer will fall in\n",
"for i in range (0, 1000):\n",
" F_alu = F/(1/E_alu/A_1[i])\n",
" u_alu = solveLU(L1,U1,F_alu)\n",
" u_alu1 = u_alu[1::2]\n",
" if min(u_alu1)>-0.2:\n",
" print(A_1[i])\n",
"print('The minimum cross sectional area for aluminum is:', round(A_1[i]))"
]
},
{
"cell_type": "code",
"execution_count": 491,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The minimum cross sectional area for stell is: 10.0\n"
]
}
],
"source": [
"#b\n",
"A_11= np.linspace(0.1,10,1000) #guess and check for range answer will fall in\n",
"for i in range (0, 1000):\n",
" F_ste1 = F/(1/E_ste/A_11[i])\n",
" u_ste = solveLU(L1,U1,F_ste1)\n",
" u_ste1 = u_ste[1::2]\n",
" if min(u_ste1)>-0.2:\n",
" print(A_11[i])\n",
"print('The minimum cross sectional area for stell is:', round(A_11[i]))\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 492,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.025521696000000003 Aluminum in \"Newton\"\n",
"0.026039664000000007 Steel in \"Newton\"\n"
]
}
],
"source": [
"#c\n",
"d_alu=0.00271 #g/mm^3\n",
"d_ste=0.0079 #g/mm^3\n",
"\n",
"V_alu=3.2*l\n",
"V_ste=1.12*l\n",
"W_alu=d_alum*v_alum*9810\n",
"W_ste=d_st*v_st*9810\n",
"\n",
"print(W_alu*1e-6,'Aluminum in \"Newton\"')\n",
"print(W_ste*1e-6, 'Steel in \"Newton\"')\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 493,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.04019472000000001 for every aluminum beam\n",
"$ 0.012634944000000004 for every steel beam\n",
"0.027559776000000008 $ is how much steel is cheaper than aluminim\n"
]
}
],
"source": [
"#d\n",
"alu_price=1545\n",
"ste_price=476\n",
"m_alu=(W_alu/9810)*1e-5\n",
"m_ste=(W_ste/9810)*1e-5\n",
"price_alu=m_alu*alu_price\n",
"price_ste=m_ste*ste_price\n",
"print(price_alu,'for every aluminum beam')\n",
"print('$',price_ste,'for every steel beam')\n",
"print(price_alu-price_ste,'$','is how much steel is cheaper than aluminim')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 4. Future Predictions using past data\n",
"\n",
"The data from the price of aluminum and steel are in the data files `../data/al_prices.csv` and `../data/steel_price.csv`. If you're going to produce these supports for 5 years, how would you use the price history of steel and aluminum to compare how much manufacturing will cost?\n",
"\n",
"a. Separate the aluminum and steel data points into training and testing data (70-30%-split)\n",
"\n",
"b. Fit the training data to polynomial functions of order n. _Choose the highest order._\n",
"\n",
"c. Plot the error between your model and the training data and the error between your model and you testing data as a function of the polynomial function order, n. [Create the training-testing curves](../notebooks/03_Linear-regression-algebra.ipynb)\n",
"\n",
"d. Choose a polynomial function to predict the price of aluminum and steel in the year 2025. \n",
"\n",
"e. Based upon your price model would you change your answer in __3.b__?"
]
},
{
"cell_type": "code",
"execution_count": 494,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"import random \n",
"aluminum = pd.read_csv('../data/al_price.csv')\n",
"steel = pd.read_csv('../data/steel_price.csv')\n",
"x_steel = steel['Year'].values\n",
"y_steel = steel['dollars/MT'].values\n",
"x_alum = aluminum['Year'].values\n",
"y_alum = aluminum['dollars/MT'].values\n",
"np.random.seed(110)\n",
"train_per=0.7"
]
},
{
"cell_type": "code",
"execution_count": 495,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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PffkoIMOYuutt17mMYsWLWL33XfnrLPO4lOf+hQXXnghJ5100nJjZya33norP/zhD/nCF77A9ddfz9e//nXGjh3LVVddxR133MFOO+3UbW0HH3zw0l29++23H2eddRYA999/Pz/72c9Ya621OPXUU/n973/PzTffzNChQ/nqV7/KkCFDuPPOO7n77rt5z3vew3333QfAb3/7W26//XbWW2+9Xr9OXTU7X/jriJgKXA68sKQxM+escgWSJGnN0DX0rah9FWy++ea87W1vW3r/sssu44ILLqCzs5NHH32Ue+65Z7ngt84667D//vsD8Na3vpVf/vKXDcf++7//+6V9HnzwQQB+9atf8W//9m8A7LDDDmyzzTbd1tbdrt7Jkycvs0v6wAMPZOjQoUvH//SnPw3ANttsw0YbbcS8efMA2Hffffsk9EHzwe+d1fUX6toS2KtPqpAkSe1vRTNz48fXdu929cY3wk039Wkpw4cPX3r7vvvu45xzzuHWW29l1KhRHHrooQ2/5qT+ZJCOjg46Ozsbjr322msv1ycz+7Tmrvd7Gr/r41ZFU1/nkpl7NrgY+iRJ0mvOPBOGDVu2bdiwWns/evbZZxkxYgTrrrsujz32GDfccEOfr2PSpElcccUVANx5553cc889fTr+brvtxvTp0wGYO3cujz32GFtssUWfrgOanPGLiJHAacBuVdMvgC9k5qI+r0iSJA1MS07g6KOzepu10047sfXWW7Ptttvypje9iV133bXP13Hcccdx2GGHsf3227PTTjux7bbbMnLkyIZ964/xGzNmTFNB9LjjjuNjH/sY2223HYMHD+Y73/lOU19X01vRzNRlRFwF3AVcUjV9BNghM/++zytqQxMnTsxZs2a1ugxJkla7uXPnstVWW7W6jJbr7Oyks7OToUOHct9997Hvvvty3333rfLXq6yqRtsnImZn5sRG/ZutdvPM/GDd/TMioofTeiRJktYczz//PHvvvTednZ1kJt/+9rdbHvpWRrMVvxQRkzLzVwARsSvwUv+VJUmS1D5GjRrF7NmzW13GKms2+B0LfKc61g/gL8Dh/VOSJEmS+kMzv9yxFrBlZu4QEesCZOaz/V6ZJEmS+tQKv84lMxcDn6huP2vokyRJGpia+h4/4CcRcWJEbBIR6y+59GtlkiRJ6lPNBr8jgY8DNwOzq4vfbyJJkvrNwoULmTBhAhMmTGDs2LFsvPHGS++/8sorTY9z4YUX8vjjjy+9f8QRR3Dvvfeucn2dnZ10dHQsrWnChAn8x3/8xyqP25+aPcbv0Mz89WqoR5IkDVBjx47liSeeWK59zJgxywSvZo0ePZrbb699e9zpp5/O6173Ok488cRej3PhhRey0047MXbsWAAuuuiiXo/RnREjRiytsTudnZ3LfPVL1/vNPq4vNHuM33/26VolSdIap1Ho66l9VVxyySXsvPPOTJgwgX/+539m8eLFdHZ28pGPfITtttuObbfdlnPPPZfLL7+c22+/nYMPPnjpTOGkSZO4/fbb6ezsZNSoUZx00knssMMO7LLLLixYsACo/f7v29/+dnbeeWc+97nPMWrUqF7VN27cOL74xS+y6667MnPmTCZNmsQpp5zCbrvtxtSpU/nTn/7Ennvuyfbbb88+++zD/PnzATj00EP513/9V/bcc08++9nP9vnr1myM/HFEfBD4fvbFrxRLkqQB54QTTljh7FZ39thjj4btEyZM4Oyzz+7VWHfddRczZ87kN7/5DYMGDeKYY45hxowZbL755jz11FPceeedADzzzDOMGjWKr3/960ydOpUJEyYsN9aiRYvYfffdOeuss/jUpz7FhRdeyEknncRxxx3HiSeeyOTJk5k6dWq3tTz33HPLjHvqqady0EEHATB8+HB+/evaDtNzzjmHZ599lptvvhmA/fffn49+9KNMmTKFadOmccIJJ3DllVcCcP/99/Ozn/2MtdZq9oi85jUb/D4FDANejYiXgQAyM9ft84pWo4h4E3AKMDIzD2p1PZIkacV++tOfcttttzFxYu1XyV566SU22WQT/u7v/o57772X448/nve85z3su+++KxxrnXXWYf/99wfgrW99K7/85S8BuOWWW7j22msB+Id/+AdOPfXUho/vaVfvwQcfvMz9Qw45ZOntW265hWuuuQaAww47jM997nNLl02ePLlfQh80H/xGAlOAzTLzCxGxKfCGZh4YER3UTgT5c2a+r8HyUcD5wLZAAkdm5m+brKvrWBcC7wMWZOa2de37AecAHcD5mXkWQGY+ABwVEVeuzPokSSrJimbmIqLbZTfddFOf1ZGZHHnkkXzxi19cbtkf/vAHrrvuOs4991yuuuoqpk2b1uNYQ4YMWXq7o6ODzs7OPqtz+PDhPd5v9nF9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\n",
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"#a,b,c,d\n",
"e_rand = np.random.randint(0,len(x_steel),size=len(x_steel))\n",
"\n",
"x_train_st = x_steel[e_rand[:int(len(x_steel)*train_per)]]\n",
"y_train_st = y_steel[e_rand[:int(len(x_steel)*train_per)]]\n",
"x_test_st = x_steel[e_rand[int(len(x_steel)*train_per):]]\n",
"y_test_st = y_steel[e_rand[int(len(x_steel)*train_per):]]\n",
"Z_train_st = np.block([[x_train_st**0]]).T\n",
"Z_test_st = np.block([[x_test_st**0]]).T\n",
"x_steel_n = (x_steel-x_steel.min())/(st_year.max()-st_year.min())\n",
"ste_train = e_rand[:int(0.7*len(x_steel_n))]\n",
"ste_test = e_rand[int(0.7*len(x_steel_n)):]\n",
"ste_year_train = x_steel_n[np.sort(ste_train)]\n",
"ste_year_test = x_steel_n[np.sort(ste_test)]\n",
"ste_price_train = y_steel[np.sort(ste_train)]\n",
"ste_price_test = y_steel[np.sort(ste_test)]\n",
"\n",
"max_Na=8\n",
"SSE_train_st = np.zeros(max_Na)\n",
"SSE_test_st = np.zeros(max_Na)\n",
"for i in range(1,max_Na):\n",
" Z_train_st =np.hstack((Z_train_st,x_train_st.reshape(-1,1)**i))\n",
" Z_test_st = np.hstack((Z_test_st,x_test_st.reshape(-1,1)**i))\n",
" A_s = np.linalg.solve(Z_train_st.T@Z_train_st,Z_train_st.T@y_train_st)\n",
" SSE_train_st[i] = np.sum((y_train_st-Z_train_st@A_s)**2)/len(y_train_st)\n",
" SSE_test_st[i] = np.sum((y_test_st-Z_test_st@A_s)**2)/len(y_test_st)\n",
"plt.figure(figsize=(10,10))\n",
"plt.semilogy(np.arange(2,max_Na,1),SSE_train_st[2:],'o-',color='red',label='Training Error')\n",
"plt.semilogy(np.arange(2,max_Na,1),SSE_test_st[2:],'s-',color='black', label='Testing Error')\n",
"plt.title('steel testing training error vs. order')\n",
"plt.xlabel('Order of Polynomial')\n",
"plt.ylabel('error')\n",
"plt.legend();"
]
},
{
"cell_type": "code",
"execution_count": 496,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAoQAAAJcCAYAAABg2rUNAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nOzde3zV1Z3v/9eHAAaQi8hNVNQCtSIqKnq8Y7FVtNUwzlhrdeyoo+3M2FPP1Dn6OHVq7egc65yZsa3+atVqL1qprULQKkpbrdeK6ACCaEHrhUELKiAIBUPW74+9E0PYCQm57IT1ej4eeWTv717ftT5770DeWd/1/e5IKSFJkqR89Sh3AZIkSSovA6EkSVLmDISSJEmZMxBKkiRlzkAoSZKUOQOhJElS5gyE0g4iIn4UEVd3UN+LIuL4jui7q4iIsyPi4XLX0ZSIuCki/rm926r9RESKiDHlrkPaHuF1CKXuJSIeBQ4CRqSUNjbY/iNgWUrpijKV1uHa6zlGxN7AH4FeKaWatle2zfFeA/42pfTrjh5L5RMRCRibUlpa7lqk1nKGUOpGikHmWCABp5W1GLWbiOhZ7hraWxT02Na2FvTT5V6b9q6pKz5H5cdAKHUv5wK/B34EfLGpRhHxNxHxRKNt9YezioeX/7+IeDAi1kXEkxExIiKuj4hVEfFSRBzcYN/XIuJTxdvfjIi7I+InEbG2eDh5YqlxGox1dfH28RGxLCL+d0SsiIi3ImJqRJwSEX+IiPci4v808ZwuAs4G/nex5vuK20dGxD0RsTIi/hgR/7PBPodHxNyIeD8i/hQR/1F86LHi99XFvo5s/JoVn8eXI2JJ8TW5MSKi+FhFRPx7RLxTHPPiYvutfrFHxE+BUcB9xbH+d0TsXWx/QUS8Afy22PYXEfF2RKyJiMciYv9tvI5fa/A6nredbXeNiPuKr9GzEXF145+dRs/niIh4KiJWR8T8aLCUICIejYhrIuJJYD3wsSa2jYyImcX3e2lEXNigj29GxC8j4o6IeB/4mxLjvx0RFQ22/UVELNjGe96siNip+PO/vPh1fUTs1Og1vCwi3gZuL27/p+LruTwizi/R3/+LiDeKddwUEX2a608qJwOh1L2cC9xZ/DopIoa3oa/PAVcAQ4CNwNPA88X7vwSa+0V6GjANGATMBG5oxbgjgEpgd+AbwC3AOcChFGY/vxERH2u8U0rpZgrP+7qU0s4ppVOjMNt0HzC/2N8JwCURcVJxt+8A30kpDQBGA3cXtx9X/D6o2NfTTdT6WeAwCofoPwfU9XshcDIwATgEmNrUk00p/TXwBnBqcazrGjw8CdivQb8PAmOBYRTeizub6pfC6ziw+LwvAG6MiF22o+2NwAfFNl+k+T80dgd+BVwNDAYuBe6JiKENmv01cBHQH3i9iW13AcuAkcBfAf8aESc06KOKws/goMavQUrp98V6JzfY/AXgZ8XbTb3n2/J14AgK7+lBwOEU/n3UGVF8znsBF0XElOLz/zSF9+xTjfr7NvDxYn9j+OjnvWR/LaxR6jAGQqmbiIhjKPzyuDul9BzwCoVfhNtrekrpuZTSn4HpwJ9TSj9JKW0Gfg4c3My+T6SUHii2/SmFX6At9SFwTUrpQwqhcgiFX+BrU0qLgEXAgS3s6zBgaErpWymlTSmlVykEzM83GGtMRAxJKa0rhonWuDaltDql9AbwCIVf7lAIh99JKS1LKa0Crm1lv3W+mVL6IKW0ASCldFvxddgIfBM4KCIGNrHvh8C3UkofppQeANYB+7ambXGW7S+BK1NK61NKLwI/bqbec4AHiu99bUppNjAXOKVBmx+llBallGqK7/EW2ygEoWOAy1JKf04pzQNupRAa6zydUppRHGNDiTruAs4CiIj+xfHvavBct+c9P7v4Gq1IKa0ErmpUUy2F12ljsabPAbenlBamlD6g8H5RrCko/NHwv1JK76WU1gL/ykc/l6X6k8rKQCh1H18EHk4pvVO8/zOamc1pgT81uL2hxP2dm9n37Qa31wOVpQ6XNuHdYpCsG6dULc2N3dBewMji4cvVEbEa+D9A3czpBRRmaV4qHg79bAv7rdP4edbVNRJ4s8FjDW+3Rv1+xcPQ10bEK8VDpa8VHxrSxL7vNjohpmF9LW07FOhJy5/LXsAZjV7vY4DdtrF/w20jgbqQVOd1CjNoLakBCj/7pxcP6Z4OPJ9SqpuN3N73fCQfzWjW1TSywf2VxT+eGrZ/s1H7OkOBvsBzDV6nWcXtTfUnlZULWaVuoLj26HNARXHNEcBOwKCIOCilNL/RLh9Q+IVUt/+IzqkUKISNvg3uj6BweLA9NL4swpvAH1NKY0s2TmkJcFbx0PLpwC8jYtcS/bTWW8AeDe7vuY32TY3XcPsXKBwq/RSFMDgQWAXE9pXYIiuBGgrP5Q/Fbc09lzeBn6aULmymTann2nDbcmBwRPRvEApHAf+9jT4+ejClFyPidQqH7RseLm7yPS/O4jVnOYXAu6hBTcubqekttnytRjW4/Q6FP2z2Tyn9N6V5iQ91Kc4QSt3DVGAzMI7CYcsJFNaePU5hXWFj84H9I2JCRFTS4HBWJ5gHfKE44zWFwjq59vInoOH6wjnA+8XF+X2KY46PiMMAIuKciBiaUqoFVhf32UwhCNU26qs17ga+GhG7R8Qg4LJW1l1KfwprOd+lEKj/dTtra7HiTO29wDcjom9EfILSP0917gBOjYiTiq91ZfEEiT2a2afxmG8CTwH/t7j/gRRm9ZpbL1nKz4D/SWE96C/qNjbznm/LXcAVETE0IoZQWO93RzPt7wb+JiLGRURf4Mq6B4pj3wL8Z0QMK9a1e4O1rVKXYyCUuocvUliv9EZK6e26Lwonc5zd+HBtSukPwLeAXwNLgCbPGu0AXwVOpfDL+GxgRjv2/UNgXPEw3IxioDmVQkD+I4WZmVspzK4BTAEWRcQ6CicbfL64bm09cA3wZLGvI1pZxy3Aw8AC4L+AByjMtDUVPP4vhbCxOiIubaLNTygcdvxv4EUKZ5N3hospvF5vU1gPeheFYLqVYpironBYfiWFGcN/ovW/S84C9qYwAzedwlq62a3s4y7geOC3DZZRQBPvOUAUzvI+ton+rqawHnIB8AKFk3qavNB7SulB4HoKZ4gvLX5v6LLi9t8XlwD8mqbXeEpl54WpJamNIuJk4KaU0l7lrqWtIuLbFC563pb1qZK6GWcIJamVioenT4mInsVLsVxJYaar24mIT0TEgVFwOIXDt93yuUjafgZCSWq9oHBZklUUDhkvZstrzHUn/SmsI/yAwrq4fweqy1qRpE7nIWNJkqTMOUMoSZKUOa9D2EZDhgxJe++9d7nLkCRJ2qbnnnvunZTS0MbbDYRttPfeezN37txylyFJkrRNxYu6b8VDxpIkSZkzEEqSJGXOQChJkpQ5A6EkSVLmDISSJEmZMxBKkiRlzkAoSZKUOQOhJElS5gyEkiRJmTMQSpIkZc5AKEmSlDkDoSRJUuYMhJIkSZkzEEqSJGXOQChJkpQ5A6EkSVLmDISSJEmZMxBKkiRlzkAoSZKUOQOhJElS5gyEUmvdeSfsvTf06FH4fued5a5IkqQ2MRB2ZQaPrufOO+Gii+D11yGlwveLLvK9kSR1az3LXYCaUBc81q8v3K8LHgBnn12+uhpLCTZvhpqa0t+be6w99+ms8V54AT78cMvXYP16uOACuOUW6NWrbV89e7a9j1J9VVRARHl+RjrDnXfC178Ob7wBo0bBNdd0rX8nOfI96Zp8X7qeLvKeGAi7qq9//aMwWGf9evj7vy+Ekq4Stmpry/P6bEtFReGrZ8/mv2+rTa9e0KfPR/eff770eBs3FsLxBx8UAmNLvzrz9euKQXV7v3o0OLjRXf54yonvSdfk+9L1dKH3JFJKnTrgjmbixIlp7ty57d9xjx6FgFFK794tCzutDT/ttU9nj9d4W48eHTcbtvfehX+wje21F7z2Wuv7q639KBzW1LQuTG7rqz37a2lfnfX/SY8eH4XL9etLj1tRAbvv3vI+2/Izs7377qhjvvZa4WemsZ494WMf+6ifhv013rat7521z45U44MPwoYNbKVvXzjllK23N9San5vW/ox1VN/doY7p0wsTCY1t7++UFpUTz6WUJjbe7gxhVzVqVPsGD7WPa67Z8q85KPxnes0129dfjx6w006Frx3B5s2dG1Q//BD+8z+brmXy5JbV3ZYgu737dqcxW7vf0qWlt9fUwMEHb91n3e2Wfu+sfVq7b91XV62xVBiEwv9nL75Y+rHGY2xLa39WOqrv7lJHqTAIhcPHncxA2FW1d/BQ+6ibwu8C6z26pLoZ28rKzhvz3nub/uPp9ts7rw595Mknm35Ppk3r/HpU0NwRjkWLOr0c0fR7MmpUp5fiWcZd1dlnw803F/6hRhS+33yzwaMrOPvswixtbW3hu+9JeV1zTeGPpYb846m8fE+6Jt+XrqcLvScGwq7M4CFtm388dT2+J12T70vX04XeE08qaaMOO6lEkiSpnTV1UokzhJIkSZkzEEqSJGXOQChJkpQ5A6EkSVLmDISSJEmZMxBKkiRlzkAoSZKUOQOhJElS5gyEkiRJmTMQSpIkZc5AKEmSlDkDoSRJUuYMhJIkSZkzEEqSJGXOQChJkpQ5A6EkSVLmDISSJEmZMxBKkiRlzkAoSZKUOQOhJElS5gyEkiRJmTMQSpIkZc5AKEmSlDkDYRMi4viIeDwiboqI48tdjyRJUkcpSyCMiMqImBMR8yNiUURcVaLNnhHxSEQsLrb5ahvHvC0iVkTEwkbbp0TEyxGxNCIub/BQAtYBlcCytowtSZLUlZVrhnAjMDmldBAwAZgSEUc0alMDfC2ltB9wBPAPETGuYYOIGBYR/RttG9PEmD8CpjRqWwHcCJwMjAPOajDG4ymlk4HLgK0CqyRJ0o6iLIEwFawr3u1V/EqN2ryVUnq+eHstsBjYvVFXk4DqiKgEiIgLge82MeZjwHuNNh8OLE0pvZpS2gRMA6qK7WuLbVYBOzXuLyJOjYib16xZ04JnLEmS1HWVbQ1hRFRExDxgBTA7pfRMM233Bg4GtmiTUvoFMAuYFhFnA+cDn2tFGbsDbza4v6y4jYg4PSJ+APwUuKHxjiml+1JKFw0cOLAVw0mSJHU9Pcs1cEppMzAhIgYB0yNifEppYeN2EbEzcA9wSUrp/RL9XBcR04DvA6MbzDy2RJQqrdjvvcC9rehLkiSpWyr7WcYppdXAozRa3wcQEb0ohME7iwFtKxFxLDAemA5c2crhlwF7Nri/B7C8lX1IkiR1a+U6y3hocWaQiOgDfAp4qVGbAH4ILE4p/UcT/RwM3EJh3d95wOCIuLoVpTwLjI2IfSKiN/B5YGZrn48kSVJ3Vq4Zwt2ARyJiAYVQNjuldD9ARDwQESOBo4G/BiZHxLzi1ymN+ukLnJFSeqV4EsgXgddLDRgRdwFPA/tGxLKIuCClVANcDDxE4aSVu1NKi9r/6UqSJHVdkVLadis1aeLEiWnu3LnlLkOSJGmbIuK5lNLExtvLvoZQkiRJ5WUglCRJypyBUJIkKXMGQkmSpMwZCCVJkjJnIJQkScqcgVCSJClzBkJJkqTMGQglSZIyZyCUJEnKnIFQkiQpcwZCSZKkzBkIJUmSMmcglCRJypyBUJIkKXMGQkmSpMwZCCVJkjJnIJQkScqcgVCSJClzBkJJkqTMGQglSZIyZyCUJEnKnIFQkiQpcwZCSZKkzBkIJUmSMmcglCRJypyBUJIkKXMGQkmSpMwZCCVJkjJnIJQkScqcgVCSJClzBkJJkqTMGQglSZIyZyCUJEnKnIFQkiQpcwZCSZKkzBkIJUmSMmcglCRJypyBUJIkKXMGQkmSpMwZCCVJkjJnIJQkScqcgVCSJClzBkJJkqTMGQglSZIyZyCUJEnKnIFQkiQpcwZCSZKkzBkIJUmSMmcglCRJypyBUJIkKXMGQkmSpMwZCCVJkjJnIJQkScqcgVCSJClzBkJJkqTMGQglSZIyZyCUJEnKnIFQkiQpcwZCSZKkzBkIJUmSMmcglCRJypyBUJIkKXMGQkmSpMwZCCVJkjJnIJQkScqcgbCEiDg+Ih6PiJsi4vhy1yNJktSROiwQRkRlRMyJiPkRsSgirmqi3W0RsSIiFjba/lpEvBAR8yJibhtraWqMKRHxckQsjYjLGzyUgHVAJbCsLWNLkiR1dR05Q7gRmJxSOgiYAEyJiCNKtPsRMKWJPj6ZUpqQUppY6sGIGBYR/RttG9OSMSKiArgROBkYB5wVEeOKDz+eUjoZuAwoGWQlSZJ2FB0WCFPBuuLdXsWvVKLdY8B72znMJKA6IioBIuJC4LstHONwYGlK6dWU0iZgGlBVbF9bbLMK2Gk7a5MkSeoWenZk58VZuOeAMcCNKaVnWrF7Ah6OiAT8IKV081YNUvpFROwDTIuIXwDnA59uYf+7A282uL8M+B/Fuk8HTgIGATeU2jkiTgVOHTOm1ISkJElS99GhJ5WklDanlCYAewCHR8T4Vux+dErpEAqHdP8hIo5rYozrgD8D3wdOazAruS1Rqrtin/emlL6UUjozpfRoE+Pel1K6aODAgS0cTpIkqWvqlLOMU0qrgUdpeq1gqX2WF7+vAKZTOMS7lYg4FhhfbHNlK8paBuzZ4P4ewPJW7C9JkrRD6MizjIdGxKDi7T7Ap4CXWrhvv7qTRSKiH3AisLBEu4OBWyis/TsPGBwRV7ewxGeBsRGxT0T0Bj4PzGzhvpIkSTuMjpwh3A14JCIWUAhfs1NK9wNExAMRMbJ4+y7gaWDfiFgWERcAw4EnImI+MAf4VUppVokx+gJnpJReKZ4I8kXg9caNSo2RUqoBLgYeAhYDd6eUFrXrKyBJktQNREpbnfirVpg4cWKaO7dNl0mUJEnqFBHxXKnL+flJJZIkSZkzEEqSJGXOQChJkpQ5A6EkSVLmDISSJEmZMxBKkiRlzkAoSZKUOQOhJElS5gyEkiRJmTMQSpIkZc5AKEmSlDkDoSRJUuYMhJIkSZkzEEqSJGXOQChJkpQ5A6EkSVLmDISSJEmZMxBKkiRlzkAoSZKUOQOhJElS5gyEkiRJmTMQSpIkZc5AKEmSlDkDoSRJUuYMhJIkSZkzEEqSJGXOQChJkpQ5A6EkSVLmDISSJEmZMxBKkiRlzkAoSZKUOQOhJElS5gyEkiRJmTMQSpIkZc5AKEmSlDkDoSRJUuYMhJIkSZkzEEqSJGXOQChJkpQ5A6EkSVLmDISSJEmZMxBKkiRlzkAoSZKUOQOhJElS5gyEkiRJmTMQSpIkZc5AKEmSlDkDoSRJUuYMhJIkSZkzEEqSJGXOQChJkpQ5A6EkSVLmDISSJEmZMxBKkiRlzkAoSZKUOQOhJElS5gyEkiRJmTMQSpIkZc5AKEmSlDkDoSRJUuYMhJIkSZkzEEqSJGXOQChJkpQ5A6EkSVLmDISSJEmZMxBKkiRlzkAoSZKUOQOhJElS5gyETYiI4yPi8Yi4KSKOL3c9kiRJHaUsgTAiKiNiTkTMj4hFEXFVE+1ui4gVEbGwHcYs2VdETImIlyNiaURc3uChBKwDKoFlbR1fkiSpqyrXDOFGYHJK6SBgAjAlIo4o0e5HwJSmOomIYRHRv9G2MU0036qviKgAbgROBsYBZ0XEuOLDj6eUTgYuA0oGVkmSpB1BWQJhKlhXvNur+JVKtHsMeK+ZriYB1RFRCRARFwLfbWLMUn0dDixNKb2aUtoETAOqiu1ri21WATs17i8iTo2Im9esWdNMeZIkSV1f2dYQRkRFRMwDVgCzU0rPtLaPlNIvgFnAtIg4Gzgf+FwrutgdeLPB/WXFbUTE6RHxA+CnwA0lxr4vpXTRwIEDW1u2JElSl9KzXAOnlDYDEyJiEDA9IsanlFq9VjCldF1ETAO+D4xuMPPYElGqy2K/9wL3trYeSZKk7qbsZxmnlFYDj9LMWsHmRMSxwHhgOnBlK3dfBuzZ4P4ewPLtqUOSJKm7KtdZxkOLM4NERB/gU8BL29HPwcAtFNb9nQcMjoirW9HFs8DYiNgnInoDnwdmtrYOSZKk7qxcM4S7AY9ExAIKoWx2Sul+gIh4ICJGFm/fBTwN7BsRyyLigkb99AXOSCm9UjwJ5IvA66UGLNVXSqkGuBh4CFgM3J1SWtTuz1aSJKkLi5S2OrlXrTBx4sQ0d+7ccpchSZK0TRHxXEppYuPtZV9DKEmSpPIyEEqSJGXOQChJkpQ5A6EkSVLmDISSJEmZMxBKkiRlzkAoSZKUOQOhJElS5gyEkiRJmTMQSpIkZc5AKEmSlDkDoSRJUuYMhJIkSZkzEEqSJGXOQChJkpQ5A6EkSVLmDISSJEmZMxBKkiRlzkAoSZKUOQOhJElS5gyEkiRJmTMQSpIkZc5AKEmSlDkDoSRJUuYMhJIkSZkzEEqSJGXOQChJkpQ5A6EkSVLmDISSJEmZMxBKkiRlzkAoSZKUOQOhJElS5gyEkiRJmTMQSpIkZc5AKEmSlDkDoSRJUuYMhJIkSZkzEEqSJGXOQChJkpQ5A6EkSVLmDISSJEmZMxBKkiRlzkAoSZKUuW0GwoioiIj/1RnFSJIkqfNtMxCmlDYDVZ1QiyRJksqgZwvbPRkRNwA/Bz6o25hSer5DqpIkSVKnaWkgPKr4/VsNtiVgcvuWI0mSpM7WokCYUvpkRxciSZKk8mjRWcYRMTAi/iMi5ha//j0iBnZ0cZIkSep4Lb3szG3AWuBzxa/3gds7qihJkiR1npauIRydUvrLBvevioh5HVGQJEmSOldLZwg3RMQxdXci4mhgQ8eUJEmSpM7U0hnCLwM/abBucBXwxY4pSZIkSZ1pm4EwInoA+6aUDoqIAQAppfc7vDJJkiR1ipZ8UkktcHHx9vuGQUmSpB1LS9cQzo6ISyNiz4gYXPfVoZVJkiSpU7R0DeH5xe//0GBbAj7WvuVIkiSps7V0DeE5KaUnO6EeSZIkdbKWriH8f51QiyRJksqgpWsIH46Iv4yI6NBqJEmS1OlauobwH4G+wOaI+DMQQEopDeiwyiRJktQpWhoIBwJnA/uklL4VEaOA3TquLEmSJHWWlh4yvhE4AjireH8tcEOHVCRJkqRO1dIZwv+RUjokIv4LIKW0KiJ6d2BdkiRJ6iQtnSH8MCIqKFx7kIgYCtR2WFWSJEnqNC0NhN8FpgPDIuIa4AngXzusKkmSJHWaFh0yTindGRHPASdQOMN4akppcYdWJkmSpE7R0jWEpJReAl7qwFokSZJUBi09ZCxJkqQdlIGwhIg4PiIej4ibIuL4ctcjSZLUkTosEEZEZUTMiYj5EbEoIq5qot2UiHg5IpZGxOUNtr8WES9ExLyImNvGWm6LiBURsbAlY1M4m3odUAksa8vYkiRJXV1HzhBuBCanlA4CJgBTIuKIhg2Kl7K5ETgZGAecFRHjGjT5ZEppQkppYqkBImJYRPRvtG1MiaY/Aqa0YuzHU0onA5cBJYOsJEnSjqLDAmEqWFe826v4lRo1OxxYmlJ6NaW0CZgGVLVimElAdURUAkTEhRQukdO4lseA91o6dkqp7hqLq4CdSg0cEadGxM1r1qxpRbmSJEldT4euIYyIioiYB6wAZqeUnmnUZHfgzQb3lxW3QSE8PhwRz0XERaX6Tyn9ApgFTIuIs4Hzgc+1sLwmx46I0yPiB8BPaeIj+lJK96WULho4cGALh5MkSeqaWnzZme2RUtoMTIiIQcD0iBifUmq4ji9K7Vb8fnRKaXlEDANmR8RLxZm+xmNcFxHTgO8DoxvMSm5Lk2OnlO4F7m1hP5IkSd1ap5xlnFJaDTxKo3V8FGbl9mxwfw9geXGfuu8rKHxKyuGl+o6IY4HxxTZXtqKsJseWJEnKSUeeZTy0ODNIRPQBPsXWF7Z+FhgbEftERG/g88DMiOhXd7JIRPQDTgQWNtqXiDgYuIXC2r/zgMERcXULSyw5dmufpyRJUnfXkTOEuwGPRMQCCuFrdkrpfoCIeCAiRqaUaoCLgYeAxcDdKaVFwHDgiYiYD8wBfpVSmlVijL7AGSmlV4ongnwReL1xo4i4C3ga2DcilkXEBc2MLUmSlJVIqfGJv2qNiRMnprlz23SZREmSpE4REc+Vupyfn1QiSZKUOQOhJElS5gyEkiRJmTMQSpIkZc5AKEmSlDkDoSRJUuYMhJIkSZkzEEqSJGXOQChJkpQ5A6EkSVLmDISSJEmZMxBKkiRlzkAoSZKUOQOhJElS5gyEkiRJmTMQSpIkZc5AKEmSlDkDoSRJUuYMhJIkSZkzEEqSJGXOQChJkpQ5A6EkSVLmDISSJEmZMxBKkiRlzkAoSZKUOQOhJElS5gyEkiRJmTMQSpIkZc5AKEmSlDkDoSRJUuYMhJIkSZkzEEqSJGXOQChJkpQ5A6EkSVLmDISSJEmZMxBKkiRlzkAoSZKUOQOhJElS5gyEkiRJmTMQSpIkZc5AKEmSlDkDoSRJUuYMhJIkSZkzEEqSJGXOQChJkpQ5A6EkSVLmDISSJEmZMxBKkiRlzkAoSZKUOQOhJElS5gyEkiRJmTMQSpIkZc5AKEmSlDkDoSRJUuYMhJIkSZkzEEqSJGXOQChJkpQ5A6EkSVLmDISSJEmZMxBKkiRlzkAoSZKUOQOhJElS5gyEkiRJmTMQSpIkZc5AKEmSlDkDoSRJUuYMhJIkSZkzEEqSJGXOQChJkpQ5A6EkSVLmDIQlRMTxEfF4RNwUEceXux5JkqSO1GUDYURURsSciJgfEYsi4qo29HVbRKyIiIUlHpsSES9HxNKIuLy4OQHrgEpg2faOK0mS1B102UAIbAQmp5QOAiYAUyLiiIYNImJYRPRvtG1Mib5+BExpvDEiKoAbgZOBccBZETEOeDyldDJwGbDdQVSSJKk76LKBMBWsK97tVfxKjZpNAqojohIgIi4Evluir8eA90oMcziwNKX0akppEzANqEop1RYfXwXsVKq+iDg1Im5es2ZNK5+ZJElS19JlAyEUZvAiYh6wApidUnqm4eMppV8As4BpEXE2cD7wuVYMsTvwZoP7y4DdI+L0iPgB8FPghlI7ppTuSyldNHDgwFYMJ0mS1MaDkO0AACAASURBVPX0LHcBzUkpbQYmRMQgYHpEjE8pLWzU5rqImAZ8HxjdYFaxJaL0sOle4N7tLlySJKkb6dIzhHVSSquBRym9DvBYYDwwHbiylV0vA/ZscH8PYPn2VSlJktQ9ddlAGBFDizODREQf4FPAS43aHAzcAlQB5wGDI+LqVgzzLDA2IvaJiN7A54GZ7VG/JElSd9FlAyGwG/BIRCygENxmp5Tub9SmL3BGSumV4okgXwReb9xRRNwFPA3sGxHLIuICgJRSDXAx8BCwGLg7pbSow56RJElSFxQpNT5xV60xceLENHfu3HKXIUmStE0R8VxKaWLj7V15hlCSJEmdwEAoSZKUOQOhJElS5gyEkiRJmTMQSpIkZc5AKEmSlDkDoSRJUuYMhJIkSZkzEEqSJGXOQChJkpQ5A6EkSVLmDISSJEmZMxBKkiRlzkAoSZKUOQOhJElS5gyEkiRJmTMQSpIkZc5AKEmSlDkDoSRJUuYMhJIkSZkzEEqSJGXOQChJkpQ5A6EkSVLmDISSJEmZMxBKkiRlzkAoSZKUOQOhJElS5gyEkiRJmTMQSpIkZc5AKEmSlDkDoSRJUuYMhJIkSZkzEEqSJGXOQChJkpQ5A6EkSVLmDISSJEmZMxBKkiRlzkAoSZKUOQOhJElS5gyEkiRJmTMQSpIkZc5AKEmSlDkDoSRJUuYMhJIkSZkzEEqSJGXOQChJkpQ5A6EkSVLmDISSJEmZMxBKkiRlzkAoSZKUOQOhJElS5gyEkiRJmTMQSpIkZc5AKEmSlDkDoSRJUuYMhJIkSZkzEEqSJGXOQChJkpQ5A6EkSVLmDISSJEmZMxBKkiRlzkAoSZKUOQOhJElS5gyEkiRJmTMQSpIkZc5AKEmSlDkDoSRJUuYMhJIkSZkzEEqSJGXOQChJkpQ5A6EkSVLmDIQlRMTxEfF4RNwUEceXux5JkqSO1GGBMCL2jIhHImJxRCyKiK820e6rEbGw2OaSBttfi4gXImJeRMxtYy23RcSKiFjYaPuUiHg5IpZGxOUNHkrAOqASWNaWsSVJkrq6jpwhrAG+llLaDzgC+IeIGNewQUSMBy4EDgcOAj4bEWMbNPlkSmlCSmliqQEiYlhE9G+0bUyJpj8CpjRqVwHcCJwMjAPOalDf4ymlk4HLgKta8mQlSZK6qw4LhCmlt1JKzxdvrwUWA7s3arYf8PuU0vqUUg3wO+AvWjHMJKA6IioBIuJC4LslankMeK/R5sOBpSmlV1NKm4BpQFWxfW2xzSpgp1IDR8SpEXHzmjVrWlGuJElS19MpawgjYm/gYOCZRg8tBI6LiF0joi9wCrBn8bEEPBwRz0XERaX6TSn9ApgFTIuIs4Hzgc+1sKzdgTcb3F9W3EZEnB4RPwB+CtzQxNj3pZQuGjhwYAuHkyRJ6pp6dvQAEbEzcA9wSUrp/YaPpZQWR8S3gdkU1uzNp3CoGeDolNLyiBgGzI6Il4ozfTTq47qImAZ8HxidUlrX0tJKbEvFPu8F7m1hP5IkSd1ah84QRkQvCmHwzmLI2kpK6YcppUNSSsdROKy7pLh9efH7CmA6hUO8pcY4FhhfbHNlK8pbxkezkQB7AMtbsb8kSdIOoSPPMg7gh8DilNJ/NNNuWPH7KOB04K6I6Fd3skhE9ANOpHB4ufG+BwO3UFj7dx4wOCKubmGJzwJjI2KfiOgNfB6Y2dLnJ0mStKPoyBnCo4G/BiYXLx0zLyJOAYiIByJiZLHdPRHxInAf8A8ppVXAcOCJiJgPzAF+lVKaVWKMvsAZKaVXiieCfBF4vXGjiLgLeBrYNyKWRcQFxZNYLgYeonDCy90ppUXt+PwlSZK6hUgplbuGbm3ixIlp7tw2XSZRkiSpU0TEc6Uu5+cnlUiSJGXOQChJkpQ5A6EkSVLmDISSJEmZMxBKkiRlzkAoSZKUOQOhJElS5gyEkiRJmTMQSpIkZc5AKEmSlDkDoSRJUuYMhJIkSZkzEEqSJGXOQChJkpQ5A6EkSVLmDISSJEmZMxBKkiRlzkAoSWpXI0aMICK2+hoxYkS5S5PUBAOhJKld/elPf2rVdknl17PcBUiSurcNGzawcuVKVqxYwYoVK5pte/PNNzNw4EAGDhzIgAEDtri9884706OH8xRSORgIJUlb2LRpU33Aaxj0mtq2bt26Fvf9pS99qcnHIoIBAwZsFRTrbpcKkaVu9+rVqz1eBikrBkJJ2sHV1NTwzjvvtCjcrVixgjVr1pTsp1evXgwbNoyhQ4cybNgwxo4dW3+77vuwYcM44ogjmqzlzTff5P3332fNmjWsWbNmm7dXrFjB0qVL67dv3Lhxm8+3srKyVQGyVOjs168fEbHdr7nU3RgIJambqa2t5b333mtRuFuxYgXvvfdeyX4qKioYMmRIfZA79NBDtwp3DW8PGDCgzSFpjz32aNP+GzdurA+LDQPktsLl22+/XX/7/fff3+Y4FRUVzc5WtvR2z57+mlX34E+qJJVZSonVq1e3KNytXLmSd955h9ra2q36iQh23XXX+hB3wAEHlAx3dd932WWXDlmzN3z48JInkAwfPrzNfe+0004MHTqUoUOHbncftbW1rF27tkUzlQ3vL1++nJdeeql++4cffrjNsfr27duiGcnmbvfp06ddZitHjBjR5Pvy9ttvt7l/tV5Xek8ipdSpA+5oJk6cmObOnVvuMiR1ISkl1q5d26JwV/e9pqamZF+DBg1qMtA1vj148GBnpDpJSomNGze2+NB3U7dbsv6yZ8+ebZqpHDhwIP3792/2Z8MsUB7NBf2Oek8i4rmU0sTG2/2fQ5JaYP369S0OdytWrGhyrVv//v3rQ9xee+3FxIkTmwx8Q4YMoXfv3p38TNUSEUFlZSWVlZVtmvncvHlz/WHs1gTKN998k4ULF9bf37x5c5uez6GHHrrFc2uo4f2WPmYfLW/XVRgIJXVr23vIZePGjS0OdytWrGD9+vUl++nTp099oBsxYgQHHnhgkzN4Q4cOpbKyst2eu7q/iooKdtllF3bZZZft7iOlxIYNG7a5rvKqq65qso+RI0fW99W4723d7ojHWttH3bZy19Hadl2Jh4zbyEPGUnk195f29ddf32Tga+rEgt69ezcb6Bpv69evX0c9NaldlePwpJrnIWNJagdNzdrVueSSS6ioqNgiyB1++OHNBr72OJNWkrobA6GkbmXlypXcf//9VFdX8/DDDzfb9t1332XQoEF++oVEx579re3Tld4TA6GkLm/p0qVUV1dTXV3Nk08+SW1tLXvssQfnn38+N954Y5P7DR48uBOrlLo2Ly3T9XSl98Q1hG3kGkKp/dXW1jJ37lyqq6uZMWMGL774IgAHHnggU6dOpaqqioMPPpiIcF2UJLWCawgldWkbN27kkUceYcaMGcycOZO33nqLiooKjjvuOC666CJOO+009tlnn63260qHXCSpuzIQSiqbVatW8cADD1BdXc2sWbNYu3Yt/fr1Y8qUKUydOpVTTjllm4d9u9IhF0nqrgyEkjrVG2+8Ub8e8He/+x01NTUMHz6cs846i6qqKiZPnuy1+iSpkxkIJXWolBLz58+vXw84b948APbbbz8uvfRSqqqqOPzwwz0TWJLKyEAoqd19+OGHPPbYY1RXVzNz5kxef/11IoKjjjqK6667jqqqKj7+8Y+Xu0xJUpGBUFK7WLt2LbNmzaK6uppf/epXrF69msrKSj796U/zjW98g89+9rMMGzas3GVKkkowEErabm+99RYzZ85kxowZ/Pa3v2XTpk3suuuu9ZeG+fSnP+1Hu0lSN2Ag7KJGjBjR5KU0PKtS5ZJSYvHixcyYMYPq6mrmzJkDwOjRo7n44oupqqriqKOOomdP/2uRpO7E/7W7qFJhsLntUkfZvHkzTz31VP2ZwUuXLgXgsMMO4+qrr6aqqor999/fz/+VpG7MQNgNvfLKK+yzzz6elakOs379embPnk11dTX33Xcf77zzDr169eKEE07ga1/7Gqeeeiq77757ucuUJLUTA2E3NGbMGPr168cBBxzAgQceWP91wAEHMGjQoHKXp25q5cqV3H///cyYMYPZs2ezYcMGBg4cyGc+8xmqqqqYMmUKAwYMKHeZkqQO4GcZt1FHfZZxc4ffbr31VhYsWMCCBQuYP38+q1atqn9s1KhRW4TEAw88kLFjx7qmSyUtWbKk/lDwU089RW1tLXvuuSdVVVVUVVUxadIkevXqVe4yJUntpKnPMjYQtlE5AmHD9yylxPLly+sDYt3XSy+9RE1NDQA77bQT+++//1ZBcejQoe1et7q22tpann322fqLRC9evBiAgw46iKqqKqZOncqECRNcDyhJOygDYQfpqEDY1rOMN27cyEsvvbTFTOKCBQu26HO33XbbKiR+4hOfoHfv3u36XFReGzdu5Le//S0zZszgvvvu46233qKiooJJkyZRVVXFaaedxt57713uMiVJncBA2EE6KhB2lD/96U+88MILW8wmLlq0iE2bNgHQs2dP9ttvv62C4m677easUTeyatUqfvWrX1FdXc2sWbNYt24dO++8M1OmTKGqqopTTjmFwYMHl7tMSVInMxB2kO4WCEv58MMPWbJkyVaHnd988836NrvuuutWIXH//fenT58+ZaxcDb3++uv16wF/97vfsXnzZkaMGMFpp51GVVUVkydPprKystxlStpBfPjhhyxbtow///nP5S5FJVRWVrLHHntstQ7cQNhBdoRA2JRVq1ZtNZv4wgsvsH79egB69OjB2LFjOeigg7YIiqNGjXI2sROklJg3b179esD58+cDsN9++9V/Ushhhx3m5YkkdYg//vGP9O/fn1133dX/87uYlBLvvvsua9euZZ999tniMQNhB9mRA2EptbW1vPrqq1usS1ywYAGvvvpqfZsBAwZsNZs4fvx4+vfvX8bKdwwffvghv/vd76iurmbmzJm88cYbRARHH310/ZnBY8eOLXeZkjKwePFiPvGJTxgGu6iUEi+99BL77bffFtubCoRei0St0qNHD8aMGcOYMWM4/fTT67evXbuWhQsXbjGbeMcdd/D+++/Xt/nYxz62VVAcPXq0M1jb8P777zNr1iyqq6t54IEHWL16NZWVlZx44olceeWVfPazn2XYsGHlLlNShgyDXVdr3xsDodpF//79OfLIIznyyCPrt6WUeOONN7Zamzhz5kxqa2sB6Nu3L+PHj+fAAw+sP/R8wAEHsMsuu5TrqXQJy5cvZ+bMmcyYMYNHHnmETZs2MWTIEKZOncrUqVP59Kc/Td++fctdpiRpB2EgVIeJCPbaay/22msvTj311PrtGzZs4MUXX9zikjjTp0/n1ltvrW+z5557bjWb+PGPf3yHvcB2SolFixbVnxTy7LPPAjB69Gi+8pWvUFVVxVFHHUVFRUWZK5Wk7XTnnfD1r8Mbb8CoUXDNNXD22dvd3bvvvssJJ5wAwNtvv01FRUX99XXnzJnTokuonXfeeVx++eXsu+++Tba58cYbGTRoEGe3odY6xxxzDCtXrqw/IXPffffl5z//eZv7bQ+uIWyj3NYQdpSUEm+99dZWs4mLFy/e4gLb48aN2yoodtfDpZs3b+bJJ5+sD4GvvPIKAIcffnj9esBx48Z5SEZSl7R48eKt1qc16c474aKLoHhSIgB9+8LNN7cpFNb55je/yc4778yll166xfaUEimlLrM06ZhjjuGGG25gwoQJTbapqanZYvKj8f2W7gel3yPXEKpLiwhGjhzJyJEjmTJlSv32TZs2bXGB7QULFvDwww/z4x//uL7N8OHDtwqJ++23HzvttFM5nkqz1q9fz8MPP0x1dTX33Xcf7777Lr1792by5MlceumlnHbaaYwcObLcZUpS61xyCcyb1/Tjv/89bNy45bb16+GCC+CWW0rvM2ECXH99q0tZunQpU6dO5ZhjjuGZZ57h/vvv56qrruL5559nw4YNnHnmmXzjG98APgpo48ePZ8iQIXz5y1/mwQcfpG/fvlRXVzNs2DCuuOIKhgwZwiWXXMIxxxzDMcccw29/+1vWrFnD7bffzlFHHcUHH3zAueeey9KlSxk3bhxLlizh1ltvbTb4NXTOOecwfPhwnn/+eQ477DB69+7NypUrefXVVxkxYgQ333wzX/7yl3n++efp1asX119/Pccddxy33norv/71r1m3bh0bN25k9uzZrX696hgI1aX17t27PuQ1tHLlyq0uiXPDDTewsfgfTs+ePdl33323uiTOyJEjO33GbcWKFdx3331UV1cze/Zs/vznPzNo0CA+85nPUFVVxUknncSAAQM6tSZJ6lSNw+C2trfRiy++yO23385NN90EwLXXXsvgwYOpqanhk5/8JH/1V3/FuHHjtthnzZo1TJo0iWuvvZZ//Md/5LbbbuPyyy/fqu+UEnPmzGHmzJl861vfYtasWXzve99jxIgR3HPPPcyfP59DDjmkydrOPPPM+kPGU6ZM4dprrwXglVde4Te/+Q09evTgiiuu4L/+67947LHHqKys5Nvf/ja9e/fmhRdeYNGiRZxyyiksWbIEgKeffpp58+a1ee29gVDd0tChQ5k8eTKTJ0+u31ZTU7PVBbafeOIJfvazn9W3GTx4cMkLbLf3CRp/+MMf6g8FP/XUU6SUGDVqFBdeeCFVVVUcd9xxW10sVJK6rW3N5O29N7z++tbb99oLHn203csZPXo0hx12WP39u+66ix/+8IfU1NSwfPlyXnzxxa0CYZ8+fTj55JMBOPTQQ3n88cdL9l13hY1DDz2U1157DYAnnniCyy67DCh8Nvz+++/fZG0///nPS84cnnHGGVsc2q6qqqr/MIEnnniCf/qnfwJg//33Z+TIkSxduhSAE088sV1OxDQQaodR97F7++23H2eeeWb99tWrV281m/jDH/6QDz74ACgcrh47duxWQXHvvffeajaxuc+YnjFjRn0IXLx4MQATJkzgG9/4BlOnTuWggw5yPaCkPF1zTek1hNdc0yHD9evXr/72kiVL+M53vsOcOXMYNGgQ55xzTslPV2l4EkpFRUX9+vXG6pYjNWzTHudjNKy58f3m+m+83/YyEGqHN2jQII499liOPfbY+m21tbX88Y9/3CIkzps3j3vuuaf+H17//v054IAD6gPiQQcdVDIMQuEzoo888kgqKiqYNGkSf/d3f8dpp53GXnvt1SnPUZK6tLoTR9rxLOOWev/99+nfvz8DBgzgrbfe4qGHHtpirXp7OOaYY7j77rs59thjeeGFF3jxxRfbtf/jjjuOO++8k+OOO47Fixfz1ltvMWbMGJ566ql2G8NAqCz16NGD0aNHM3r0aP7iL/6ifvu6detYtGjRFkHxrrvuql+H0pw77riDU045JftrKEpSSWef3SkBsLFDDjmEcePGMX78eD72sY9x9NFHt/sYX/nKVzj33HM58MADOeSQQxg/fjwDBw4s2bbhGsLhw4fz0EMPtaj/L33pSxxwwAH06tWLn/zkJy26rE5reNmZNvKyMzu+lBJvvvkmCxYs2OJ6iqXaSVIuWnXZmR1cTU0NNTU1VFZWsmTJEk488USWLFlS9mvnetkZqR1FBKNGjWLUqFHlLkWS1AWtW7eOE044gZqaGlJK/OAHPyh7GGyt7lWtJElSFzNo0CCee+65cpfRJl3j0t1SNzF8+PBWbZckqTtwhlBqhbfffrvcJUiS1O6cIZQkScqcgVCSJClzBkJJktShRowYQURs9TVixIjt7vPdd99lwoQJTJgwgREjRrD77rvX39+0aVOL+7ntttu2WA503nnn8fLLL293XXVqamqoqKior2nChAn827/9W5v77SiuIZQkSR2quU952l677ror8+bNA+Cb3/wmO++8M5deemmr+7nttts45JBD6sPp7bffvt01Nda/f//6GptSU1OzxSVqGt9v6X5tZSCUJEltcskll2wz+DTl+OOPL7l9woQJXH/99dvV549//GNuvPFGNm3axFFHHcUNN9xAbW0t5513HvPmzSOlxEUXXcTw4cOZN29e/aeHzJkzh8mTJ3PDDTcwfvx4hgwZwpe//GUefPBB+vbtS3V1NcOGDWPJkiWcc845pJQ46aST+N73vsfq1atbXN8ee+zBl770JWbNmsUll1zCd77zHSZNmsTjjz/O6aefTlVVFeeffz7vvvsuw4cP5/bbb2ePPfbgnHPOYfjw4Tz//PMcdthhXHfdddv1+pTiIWNJkrTDWLhwIdOnT+epp55i3rx51NTUMG3aNJ577jneeecdXnjhBRYuXMi5557LmWeeyYQJE/j5z3/OvHnztvo4uDVr1jBp0iTmz5/PkUceyW233QYUPkru0ksvZc6cOc1edmzt2rVbHDL+5S9/Wf9Yv379ePLJJznjjDOAwmcuP/bYY1xyySX8/d//PX/7t3/LggULOOOMM7jkkkvq93vllVf4zW9+065hEJwhlCRJbbStmbyIaPKxRx99tF1r+fWvf82zzz7LxImFT2fbsGEDe+65JyeddBIvv/wyX/3qVznllFM48cQTt9lXnz59OPnkkwE49NBDefzxxwF45plneOCBBwD4whe+wBVXXFFy/+YOGZ955plb3P/85z9ff/uZZ57h/vvvB+Dcc8/ln//5n+sfO+OMM+jRo/3n8wyEkiRph5FS4vzzz+df/uVftnpswYIFPPjgg3z3u9/lnnvu4eabb262r4YzhhUVFdTU1LRbnf369Wv2fkv3ay8eMm5CRBwfEY9HxE0RcXy565EkqbvqzE95+tSnPsXdd9/NO++8AxTORn7jjTdYuXIlKSXOOOMMrrrqKp5//nmgMIu3du3aVo1x+OGHM336dACmTZvWvk8AOOKII7j77rsBuOOOOzjuuOPafYzGyhIII2LPiHgkIhZHxKL/v737D7Kyuu84/v4EabZohFTRYVwTbWItE9iC7pBSG6SK5nca03RqaqyJBdtOWjGdsbXaDs1MdcZ2oillaoqCqBC1CCRDS02sRkymQ4pLVISNUUxaCBEIsSqYhEQ+/eM54OVyIbsh+Nzd+3nN7PDc85znnO+zZ4DvPef5IWn2IerNlvRkqXNVqzqD6HOhpO2Snmwqf5ekpyQ9I+mahl0GdgFdwJYj6TsiIqKTPffcc9g+6OdovP1p4sSJzJkzhxkzZtDT08OFF17Itm3b2Lx5M9OmTWPSpEnMmjWLG264AageMzNz5sxBPa5m7ty53HjjjUyZMoXt27czevTolvWaryG87rrrBtT+vHnzmD9/Pj09Pdx7773cfPPNAzv5IyDbR72TgzqVxgHjbK+T9AagD/ig7Y0NdSYA9wBTgD3A/cCf2H66oc5JwA9sv9RQ9lbbz7TocxpVgnen7QmlbATwTeACqqRvLfAR2xslvc72XkknAzfZvqTVufT29vrRRx89ot9HRETEUNPf38/48ePrDqMWu3fvZtSoUUhi8eLFrFixgmXLltUd1kFajZGkPtu9zXVrmSG0/V3b68r2S0A/cEpTtfHAGtsv2/4JsBq4qKnOucAXJHUBSJoFzD1En48A328qngI8Y/tZ23uoEtDfLvX3ljrPA69vbk/S+yXNf+GFFwZyyhERETFMrF27lsmTJ9PT08Ott97a1g+cHqjabyqRdBowGfha064ngeslnQD8AHgPcMBUnO2lkk4H7pG0FLicarZvoE4BNjd83gK8vcT1IeCdwBhgXvOBtlcCK3t7e2cNor+IiIgY4qZPn/4zP3exXdWaEEo6DlgGXGX7xcZ9tvsl3Qg8QLXU+zhw0O09tv9e0j3ALcBbbO8aTAgtylzaXQ4sH0RbERERHcX2YR8pE/UZ7CWBtd1lLGkkVTK4pCRfB7G9wPZZtqdRLfc+3VxH0juACcAKYM4gw9gCnNrwuRvYOsg2IiIiOk5XVxc7d+4cdOIRR59tdu7cSVdX14CPqWWGUNXXiQVAv+2bDlPvJNvbJb0J+BAwtWn/ZOBW4L3At4DFkv7OdusnRB5sLXBGWXb+DnAx8PuDPqGIiIgO093dzZYtW9ixY0fdoUQLXV1ddHd3D7h+XUvG5wCXAusl7VuEv9b2KkmrgJm2twLLyjWEPwY+Yfv5pnZGAb9rexOApMuAj7XqUNLdwHTgRElbgDm2F0j6U+CLwAhgoe0NP88TjYiIGI5GjhzJ6aefXncY8XNSy2NnhpM8diYiIiKGirZ67ExEREREtI8khBEREREdLkvGR0jSDuB/jnI3JwLfO8p9xOBlXNpPxqT9ZEzaU8al/bxWY/Jm22ObC5MQDgGSHm213h/1yri0n4xJ+8mYtKeMS/upe0yyZBwRERHR4ZIQRkRERHS4JIRDw/y6A4iWMi7tJ2PSfjIm7Snj0n5qHZNcQxgRERHR4TJDGBEREdHhkhBGREREdLgkhG1M0qmSviypX9IGSbPrjqnTSeqS9N+SHi9j8qm6Y4qKpBGSvi7p3+qOJSqSvi1pvaTHJOUdn21C0hhJ90n6Rvn/ZWrdMXUySWeWvyP7fl6UdNVrHkeuIWxfksYB42yvk/QGoA/4oO2NNYfWsSQJONb2Lkkjga8Cs22vqTm0jifpz4Fe4Hjb76s7nqgSQqDXdh6A3EYk3QF8xfZtkn4BGGX7/+qOK6ovtsB3gLfbPtovvThAZgjbmO3v2l5Xtl8C+oFT6o2qs7myq3wcWX7yrapmkrqB9wK31R1LRDuTdDwwDVgAYHtPksG2cj6w6bVOBiEJ4ZAh6TRgMvC1eiOJsjT5GLAdeMB2xqR+nwH+AthbdyBxAANfktQn6Yq6gwkAfhnYAdxeLrG4TdKxdQcV+10M3F1Hx0kIhwBJxwHLgKtsv1h3PJ3O9iu2JwHdwBRJE+qOqZNJeh+w3XZf3bHEQc6xfRbwbuATkqbVHVBwDHAWcIvtycBu4Jp6QwqAsnz/AWBpHf0nIWxz5Tq1ZcAS28vrjideVZZZHgbezTLq5QAABQlJREFUVXMone4c4APlerV7gPMkLa43pACwvbX8uR1YAUypN6IAtgBbGlY27qNKEKN+7wbW2d5WR+dJCNtYuYFhAdBv+6a64wmQNFbSmLL9i8AM4Bv1RtXZbP+V7W7bp1Ettzxk+6M1h9XxJB1bboajLEleCDxZb1Rh+zlgs6QzS9H5QG5UbA8foablYqimjqN9nQNcCqwv16wBXGt7VY0xdbpxwB3lTrDXAf9qO485iTjYycCK6nstxwCfs31/vSFF8WfAkrJE+Szw8Zrj6XiSRgEXAH9UWwx57ExEREREZ8uScURERESHS0IYERER0eGSEEZERER0uCSEERERER0uCWFEREREh0tCGBHDjqRuSV+Q9LSkTZL+sTxiYyDHLpL04aMQ0+sl/aekxyT9Xos+v1X2rZM0tY4YB0LSqn3P4jxMnW9LOvG1iikijlwSwogYVsoD3ZcDn7d9BvArwHHA9S3qHvGzWAfRxmRgpO1Jtu9tsf/q8krEa4B/OdK4jhbb7ylv6YmIYSQJYUQMN+cBP7R9O1TvngY+CVwuaZSkj0laKmkl8CVV5knaKOnfgZP2NSTpbEmrJfVJ+qKkcaX8YUk3SFoNzG7sXNIvSfq8pCckrZHUI+kkYDEwqcwCvuUw8T8CvLW0Nam08YSkFZLe2NTX+ZJWNHy+QNLysr1L0vWSHi9tnFzK3yzpwdLmg5LeVMoXSbpF0pclPSvpXEkLJfVLWtTQx/7Zv3KefZI2SLpiEGMUEW0mCWFEDDdvA/oaC2y/CPwvJdECpgKX2T4PuAg4E5gIzAJ+A/a/R/yfgA/bPhtYyIGzjGNsn2v70039fwr4uu0e4FrgzvIu35nAV8oM4abDxP9+YH3ZvhP4y9LWemBOU92HgPGSxpbPHwduL9vHAmts/xpVkjmrlM8rMfUAS4C5De29kSqh/iSwEriZ6vc5UdKkFrFeXn43vcCVkk44zHlFRBtLQhgRw42AVq9gaix/wPb3y/Y04G7br9jeSpVkQZUkTgAeKK+O/Gugu6G9Vsu+AL8J3AVg+yHgBEmjBxD3P5R+rgD+sBwzxvbqsv+OEut+rl41dRfw0XJd31TgP8ruPcC+1yr2AaeV7anA58r2XSXefVaWNtcD22yvt70X2NBwfKMrJT0OrAFOBc4YwHlGRBvKu4wjYrjZAPxOY4Gk46kSlk3A2cDupmMOlUBusH2oGzya22g8rtlA3hF6te379jcysCQSqhnBlcAPgaW2f1LKf+xX3036Cof+974xth+VP/c2bO/7fMDxkqYDM4Cptl+W9DDQNcCYI6LNZIYwIoabB4FRkv4AQNII4NPAItsvt6j/CHCxpBHlGsHfKuVPAWP33fEraaSktw2g/0eAS8ox04HvlSXrQbH9AvC8pHeUokuB1S3qbQW2Us1gLhpA0/8FXFy2LwG+OtjYitHA8yUZ/FXg13/GdiKiDWSGMCKGFduWdBHwz5L+huqL7yqq6/laWUF13dx64JuUpMv2nvJol7lltu4Y4DNUM5CH87fA7ZKeAF4GLjuC07kM+KykUcCzVNcItrIEGGt74wDavBJYKOlqYMdh2vxp7gf+uJznU1TLxhExROnVFYWIiBiKJM2jupFlQd2xRMTQlIQwImIIk9RHdT3jBbZ/9NPqR0S0koQwIiIiosPlppKIiIiIDpeEMCIiIqLDJSGMiIiI6HBJCCMiIiI6XBLCiIiIiA73/2pP356hHhUgAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"e_rand = np.random.randint(0,len(x_alum),size=len(x_alum))\n",
"x_train_al = x_alum[e_rand[:int(len(x_alum)*train_per)]]\n",
"y_train_al = y_alum[e_rand[:int(len(x_alum)*train_per)]]\n",
"x_test_al = x_alum[e_rand[int(len(x_alum)*train_per):]]\n",
"y_test_al = y_alum[e_rand[int(len(x_alum)*train_per):]]\n",
"x_alum_n= (x_alum-x_alum.min())/(al_year.max()-al_year.min())\n",
"Z_train_al = np.block([[x_train_al**0]]).T\n",
"Z_test_al = np.block([[x_test_al**0]]).T\n",
"\n",
"alu_train = e_rand[:int(0.7*len(x_alum_n))]\n",
"alu_test = e_rand[int(0.7*len(x_alum_n)):]\n",
"alu_year_train = x_alum_n[np.sort(alu_train)]\n",
"alu_year_test = x_alum_n[np.sort(alu_test)]\n",
"alu_price_train = y_alum[np.sort(alu_train)]\n",
"alu_price_test = y_alum[np.sort(alu_test)]\n",
"\n",
"max_Na=8\n",
"SSE_train_al = np.zeros(max_Na)\n",
"SSE_test_al = np.zeros(max_Na)\n",
"for i in range(1,max_Na):\n",
" Z_train_al =np.hstack((Z_train_al,x_train_al.reshape(-1,1)**i))\n",
" Z_test_al = np.hstack((Z_test_al,x_test_al.reshape(-1,1)**i))\n",
" A_al = np.linalg.solve(Z_train_al.T@Z_train_al,Z_train_al.T@y_train_al)\n",
" SSE_train_al[i] = np.sum((y_train_al-Z_train_al@A_al)**2)/len(y_train_al)\n",
" SSE_test_al[i] = np.sum((y_test_al-Z_test_al@A_al)**2)/len(y_test_al)\n",
"plt.figure(figsize=(10,10))\n",
"plt.semilogy(np.arange(2,max_Na,1),SSE_train_al[2:],'o-',color='red',label='Training Error')\n",
"plt.semilogy(np.arange(2,max_Na,1),SSE_test_al[2:],'s-',color='black',label='Testing Error')\n",
"plt.title('Aluminum testing training error vs. order')\n",
"plt.xlabel('Order of Polynomial')\n",
"plt.ylabel('error')\n",
"plt.legend();"
]
},
{
"cell_type": "code",
"execution_count": 497,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(10,10))\n",
"plt.plot(alu_year_train,alu_price_train,'o', color = 'red', label = 'data')\n",
"plt.title('Price for Aluminum')\n",
"plt.xlabel('time')\n",
"plt.ylabel('Price (dollars/ MT)')\n",
"plt.legend();"
]
},
{
"cell_type": "code",
"execution_count": 498,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(10,10))\n",
"plt.plot(st_year_train,st_price_train,'o', color = 'red', label = 'data')\n",
"plt.title('Price for steel')\n",
"plt.xlabel('Time ')\n",
"plt.ylabel('Price (dollars/ MT)')\n",
"plt.legend();"
]
},
{
"cell_type": "code",
"execution_count": 499,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"I would not change the price for 3b because still will always be cheaper than aluminum\n"
]
}
],
"source": [
"#e \n",
"print('I would not change the price for 3b because still will always be cheaper than aluminum')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# References\n",
"\n",
"1. <https://en.wikipedia.org/wiki/Direct_stiffness_method>\n",
"\n",
"2. Aluminum and steel price history on <https://tradingeconomics.com>"
]
}
],
"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.7.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}