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": 54,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.00416667, 0.00144338, -0.00083333, -0.00144338, -0.00333333,\n",
" 0. , 0. , 0. , 0. , 0. ,\n",
" 0. , 0. , 0. , 0. ],\n",
" [ 0.00144338, 0.0025 , -0.00144338, -0.0025 , 0. ,\n",
" 0. , 0. , 0. , 0. , 0. ,\n",
" 0. , 0. , 0. , 0. ],\n",
" [-0.00083333, -0.00144338, 0.005 , 0. , -0.00083333,\n",
" 0.00144338, -0.00333333, 0. , 0. , 0. ,\n",
" 0. , 0. , 0. , 0. ],\n",
" [-0.00144338, -0.0025 , 0. , 0.005 , 0.00144338,\n",
" -0.0025 , 0. , 0. , 0. , 0. ,\n",
" 0. , 0. , 0. , 0. ],\n",
" [-0.00333333, 0. , -0.00083333, 0.00144338, 0.00833333,\n",
" 0. , -0.00083333, -0.00144338, -0.00333333, 0. ,\n",
" 0. , 0. , 0. , 0. ],\n",
" [ 0. , 0. , 0.00144338, -0.0025 , 0. ,\n",
" 0.005 , -0.00144338, -0.0025 , 0. , 0. ,\n",
" 0. , 0. , 0. , 0. ],\n",
" [ 0. , 0. , -0.00333333, 0. , -0.00083333,\n",
" -0.00144338, 0.00833333, 0. , -0.00083333, 0.00144338,\n",
" -0.00333333, 0. , 0. , 0. ],\n",
" [ 0. , 0. , 0. , 0. , -0.00144338,\n",
" -0.0025 , 0. , 0.005 , 0.00144338, -0.0025 ,\n",
" 0. , 0. , 0. , 0. ],\n",
" [ 0. , 0. , 0. , 0. , -0.00333333,\n",
" 0. , -0.00083333, 0.00144338, 0.00833333, 0. ,\n",
" -0.00083333, -0.00144338, -0.00333333, 0. ],\n",
" [ 0. , 0. , 0. , 0. , 0. ,\n",
" 0. , 0.00144338, -0.0025 , 0. , 0.005 ,\n",
" -0.00144338, -0.0025 , 0. , 0. ],\n",
" [ 0. , 0. , 0. , 0. , 0. ,\n",
" 0. , -0.00333333, 0. , -0.00083333, -0.00144338,\n",
" 0.005 , 0. , -0.00083333, 0.00144338],\n",
" [ 0. , 0. , 0. , 0. , 0. ,\n",
" 0. , 0. , 0. , -0.00144338, -0.0025 ,\n",
" 0. , 0.005 , 0.00144338, -0.0025 ],\n",
" [ 0. , 0. , 0. , 0. , 0. ,\n",
" 0. , 0. , 0. , -0.00333333, 0. ,\n",
" -0.00083333, 0.00144338, 0.00416667, -0.00144338],\n",
" [ 0. , 0. , 0. , 0. , 0. ,\n",
" 0. , 0. , 0. , 0. , 0. ,\n",
" 0.00144338, -0.0025 , -0.00144338, 0.0025 ]])"
]
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"import math as math\n",
"import matplotlib.pyplot as plt\n",
"\n",
"fea_arrays = np.load('./fea_arrays.npz')\n",
"K=fea_arrays['K']\n",
"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": 55,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"a.) You would expect an error based on the output provided by the K condition.\n",
"b.) The condition of K is so large because the K matrix is so inaccurate.\n",
"c.) The K condition is: 1.4577532625238035e+17 and the K[2:13, 2:13] condition is: 52.24\n"
]
}
],
"source": [
"print('a.) You would expect an error based on the output provided by the K condition.')\n",
"print('b.) The condition of K is so large because the K matrix is so inaccurate.')\n",
"\n",
"cond_K = np.linalg.cond(K)\n",
"cond_K2 = np.linalg.cond(K[2:13, 2:13])\n",
"\n",
"print('c.) The K condition is: {}'.format(cond_K),'and the K[2:13, 2:13] condition is: {:.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": 56,
"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": 57,
"metadata": {},
"outputs": [],
"source": [
"def LUNaive(A):\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\n"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"a.) The Lower Triangular Matrix (L1) is:\n",
"\n",
"[[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",
"\n",
"and The Upper Triagulation Matrix (U1) is:\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": [
"K1 = K[2:13,2:13]\n",
"L,U = LUNaive(K1)\n",
"L1 = L*1000\n",
"U1 = U*1000\n",
"\n",
"print('a.) The Lower Triangular Matrix (L1) is:')\n",
"print()\n",
"print(L1)\n",
"print()\n",
"print()\n",
"print('and The Upper Triagulation Matrix (U1) is:')\n",
"print()\n",
"print(U1)"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [],
"source": [
"L1, U1 = LUNaive(K1)\n",
"Area = 0.1e-3\n",
"E_alum = 70e3\n",
"E_steel = 200e3\n",
"F = np.zeros(11)\n",
"F[5] = -100 #N\n",
"F_alum = F/(E_alum*Area)\n",
"F_steel = F/(E_steel*Area)"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [],
"source": [
"b_steel = F*(1/E_steel/Area)\n",
"b_alum = F*(1/E_alum/Area)\n",
"u_steel1 = solveLU(L,U,b_steel)*1e-3\n",
"u_alum1 = solveLU(L,U,b_alum)*1e-3\n",
"F_steel1 = Area*E_steel*K1@u_steel1*1e3\n",
"F_alum1 = Area*E_alum*K1@u_alum1*1e3"
]
},
{
"cell_type": "code",
"execution_count": 64,
"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_steel1)):\n",
" print(np.around(u_steel1[i]))\n",
"print('\\nSteel Forces:\\n----------------')\n",
"for i in range(len(F_steel1)):\n",
" print(np.around(F_steel1[i]))\n",
"print('\\nAluminum Displacements:\\n----------------')\n",
"for i in range(len(u_alum1)):\n",
" print(np.around(u_alum1[i]))\n",
"print('\\nAluminum Forces:\\n----------------')\n",
"for i in range(len(F_alum1)):\n",
" print(np.around(F_alum1[i]))"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'y (mm)')"
]
},
"execution_count": 72,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"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",
"s = 5\n",
"u_alum1= np.zeros(2*len(nodes))\n",
"plt.figure(figsize = (10,5))\n",
"plt.plot(r[ix],r[iy],'-',color='k')\n",
"plt.plot(r[ix]+u_alum1[ix]*s,r[iy]+u_alum1[iy]*s,'o',color='b')\n",
"plt.quiver(r[ix],r[iy],u_alum1[ix],u_alum1[iy],color=(1,0,0,1),label='applied forces')\n",
"plt.quiver(r[ix],r[iy],u_alum1[ix],u_alum1[iy],color=(0,0,1,1),label='displacements')\n",
"plt.xlabel('x (mm)')\n",
"plt.ylabel('y (mm)')"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"u_steel1 = np.zeros(2*len(nodes))\n",
"plt.figure(figsize = (10,5))\n",
"plt.plot(r[ix],r[iy],'-',color='k')\n",
"plt.plot(r[ix]+u_steel1[ix]*s,r[iy]+u_steel1[iy]*s,'o',color='b')\n",
"plt.quiver(r[ix],r[iy],u_steel1[ix],u_steel1[iy],color=(1,0,0,1),label='applied forces')\n",
"plt.quiver(r[ix],r[iy],u_steel1[ix],u_steel1[iy],color=(0,0,1,1),label='displacements')\n",
"plt.xlabel('x (mm)')\n",
"plt.ylabel('y (mm)');"
]
},
{
"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": 109,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"7.681081081081081\n",
"7.690990990990992\n",
"7.700900900900901\n",
"7.710810810810811\n",
"7.720720720720721\n",
"7.730630630630631\n",
"7.740540540540541\n",
"7.750450450450451\n",
"7.760360360360361\n",
"7.770270270270271\n",
"7.780180180180181\n",
"7.79009009009009\n",
"7.800000000000001\n",
"7.80990990990991\n",
"7.819819819819821\n",
"7.82972972972973\n",
"7.83963963963964\n",
"7.84954954954955\n",
"7.85945945945946\n",
"7.86936936936937\n",
"7.87927927927928\n",
"7.88918918918919\n",
"7.899099099099099\n",
"7.90900900900901\n",
"7.918918918918919\n",
"7.92882882882883\n",
"7.938738738738739\n",
"7.948648648648649\n",
"7.958558558558559\n",
"7.968468468468469\n",
"7.978378378378379\n",
"7.988288288288289\n",
"7.998198198198199\n",
"8.00810810810811\n",
"8.018018018018019\n",
"8.027927927927928\n",
"8.03783783783784\n",
"8.04774774774775\n",
"8.057657657657659\n",
"8.067567567567568\n",
"8.077477477477478\n",
"8.087387387387388\n",
"8.097297297297299\n",
"8.107207207207209\n",
"8.117117117117118\n",
"8.127027027027028\n",
"8.136936936936937\n",
"8.146846846846847\n",
"8.156756756756756\n",
"8.166666666666668\n",
"8.176576576576577\n",
"8.186486486486487\n",
"8.196396396396397\n",
"8.206306306306306\n",
"8.216216216216218\n",
"8.226126126126127\n",
"8.236036036036037\n",
"8.245945945945946\n",
"8.255855855855856\n",
"8.265765765765765\n",
"8.275675675675677\n",
"8.285585585585586\n",
"8.295495495495496\n",
"8.305405405405406\n",
"8.315315315315315\n",
"8.325225225225227\n",
"8.335135135135136\n",
"8.345045045045046\n",
"8.354954954954955\n",
"8.364864864864865\n",
"8.374774774774774\n",
"8.384684684684686\n",
"8.394594594594595\n",
"8.404504504504505\n",
"8.414414414414415\n",
"8.424324324324324\n",
"8.434234234234236\n",
"8.444144144144145\n",
"8.454054054054055\n",
"8.463963963963964\n",
"8.473873873873874\n",
"8.483783783783784\n",
"8.493693693693695\n",
"8.503603603603604\n",
"8.513513513513514\n",
"8.523423423423424\n",
"8.533333333333333\n",
"8.543243243243245\n",
"8.553153153153154\n",
"8.563063063063064\n",
"8.572972972972973\n",
"8.582882882882883\n",
"8.592792792792794\n",
"8.602702702702704\n",
"8.612612612612613\n",
"8.622522522522523\n",
"8.632432432432433\n",
"8.642342342342342\n",
"8.652252252252254\n",
"8.662162162162163\n",
"8.672072072072073\n",
"8.681981981981982\n",
"8.691891891891892\n",
"8.701801801801803\n",
"8.711711711711713\n",
"8.721621621621622\n",
"8.731531531531532\n",
"8.741441441441442\n",
"8.751351351351351\n",
"8.761261261261263\n",
"8.771171171171172\n",
"8.781081081081082\n",
"8.790990990990991\n",
"8.800900900900901\n",
"8.810810810810812\n",
"8.820720720720722\n",
"8.830630630630631\n",
"8.840540540540541\n",
"8.85045045045045\n",
"8.86036036036036\n",
"8.870270270270272\n",
"8.880180180180181\n",
"8.89009009009009\n",
"8.9\n",
"8.90990990990991\n",
"8.919819819819821\n",
"8.929729729729731\n",
"8.93963963963964\n",
"8.94954954954955\n",
"8.95945945945946\n",
"8.96936936936937\n",
"8.97927927927928\n",
"8.98918918918919\n",
"8.9990990990991\n",
"9.00900900900901\n",
"9.018918918918919\n",
"9.02882882882883\n",
"9.03873873873874\n",
"9.04864864864865\n",
"9.058558558558559\n",
"9.068468468468469\n",
"9.078378378378378\n",
"9.08828828828829\n",
"9.0981981981982\n",
"9.108108108108109\n",
"9.118018018018018\n",
"9.127927927927928\n",
"9.13783783783784\n",
"9.147747747747749\n",
"9.157657657657658\n",
"9.167567567567568\n",
"9.177477477477478\n",
"9.187387387387387\n",
"9.197297297297299\n",
"9.207207207207208\n",
"9.217117117117118\n",
"9.227027027027027\n",
"9.236936936936937\n",
"9.246846846846848\n",
"9.256756756756758\n",
"9.266666666666667\n",
"9.276576576576577\n",
"9.286486486486487\n",
"9.296396396396396\n",
"9.306306306306308\n",
"9.316216216216217\n",
"9.326126126126127\n",
"9.336036036036036\n",
"9.345945945945946\n",
"9.355855855855857\n",
"9.365765765765767\n",
"9.375675675675677\n",
"9.385585585585586\n",
"9.395495495495496\n",
"9.405405405405405\n",
"9.415315315315317\n",
"9.425225225225226\n",
"9.435135135135136\n",
"9.445045045045045\n",
"9.454954954954955\n",
"9.464864864864866\n",
"9.474774774774776\n",
"9.484684684684686\n",
"9.494594594594595\n",
"9.504504504504505\n",
"9.514414414414414\n",
"9.524324324324326\n",
"9.534234234234235\n",
"9.544144144144145\n",
"9.554054054054054\n",
"9.563963963963964\n",
"9.573873873873875\n",
"9.583783783783785\n",
"9.593693693693695\n",
"9.603603603603604\n",
"9.613513513513514\n",
"9.623423423423423\n",
"9.633333333333335\n",
"9.643243243243244\n",
"9.653153153153154\n",
"9.663063063063063\n",
"9.672972972972973\n",
"9.682882882882884\n",
"9.692792792792794\n",
"9.702702702702704\n",
"9.712612612612613\n",
"9.722522522522523\n",
"9.732432432432434\n",
"9.742342342342344\n",
"9.752252252252253\n",
"9.762162162162163\n",
"9.772072072072072\n",
"9.781981981981982\n",
"9.791891891891893\n",
"9.801801801801803\n",
"9.811711711711713\n",
"9.821621621621622\n",
"9.831531531531532\n",
"9.841441441441443\n",
"9.851351351351353\n",
"9.861261261261262\n",
"9.871171171171172\n",
"9.881081081081081\n",
"9.890990990990991\n",
"9.900900900900902\n",
"9.910810810810812\n",
"9.920720720720722\n",
"9.930630630630631\n",
"9.94054054054054\n",
"9.950450450450452\n",
"9.960360360360362\n",
"9.970270270270271\n",
"9.98018018018018\n",
"9.99009009009009\n",
"10.0\n",
"\n",
"\n",
"a.) The minimum cross-sectional area the Aluminum can have is 7.6811 mm^2\n"
]
}
],
"source": [
"A3 = np.linspace(.1,10,1000);\n",
"for i in range (0,1000):\n",
" F_al = F/(E_alum*A3[i]);\n",
" U_al = solveLU(L,U,F_al);\n",
" U_al3 = U_al[1::2];\n",
" if min(U_al3)>-.2:\n",
" print(A3[i])\n",
" \n",
"print()\n",
"print()\n",
"print('a.) The minimum cross-sectional area the Aluminum can have is 7.6811 mm^2')"
]
},
{
"cell_type": "code",
"execution_count": 110,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2.6963963963963966\n",
"2.7063063063063066\n",
"2.7162162162162167\n",
"2.7261261261261267\n",
"2.7360360360360363\n",
"2.7459459459459463\n",
"2.7558558558558564\n",
"2.765765765765766\n",
"2.775675675675676\n",
"2.785585585585586\n",
"2.795495495495496\n",
"2.8054054054054056\n",
"2.8153153153153156\n",
"2.8252252252252257\n",
"2.8351351351351357\n",
"2.8450450450450453\n",
"2.8549549549549553\n",
"2.8648648648648654\n",
"2.8747747747747754\n",
"2.884684684684685\n",
"2.894594594594595\n",
"2.904504504504505\n",
"2.9144144144144146\n",
"2.9243243243243247\n",
"2.9342342342342347\n",
"2.9441441441441447\n",
"2.9540540540540543\n",
"2.9639639639639643\n",
"2.9738738738738744\n",
"2.9837837837837844\n",
"2.993693693693694\n",
"3.003603603603604\n",
"3.013513513513514\n",
"3.0234234234234236\n",
"3.0333333333333337\n",
"3.0432432432432437\n",
"3.0531531531531537\n",
"3.0630630630630633\n",
"3.0729729729729733\n",
"3.0828828828828834\n",
"3.0927927927927934\n",
"3.102702702702703\n",
"3.112612612612613\n",
"3.122522522522523\n",
"3.132432432432433\n",
"3.1423423423423427\n",
"3.1522522522522527\n",
"3.1621621621621627\n",
"3.1720720720720723\n",
"3.1819819819819823\n",
"3.1918918918918924\n",
"3.2018018018018024\n",
"3.211711711711712\n",
"3.221621621621622\n",
"3.231531531531532\n",
"3.241441441441442\n",
"3.2513513513513517\n",
"3.2612612612612617\n",
"3.2711711711711717\n",
"3.2810810810810813\n",
"3.2909909909909913\n",
"3.3009009009009014\n",
"3.3108108108108114\n",
"3.320720720720721\n",
"3.330630630630631\n",
"3.340540540540541\n",
"3.350450450450451\n",
"3.3603603603603607\n",
"3.3702702702702707\n",
"3.3801801801801807\n",
"3.3900900900900908\n",
"3.4000000000000004\n",
"3.4099099099099104\n",
"3.4198198198198204\n",
"3.42972972972973\n",
"3.43963963963964\n",
"3.44954954954955\n",
"3.45945945945946\n",
"3.4693693693693697\n",
"3.4792792792792797\n",
"3.4891891891891897\n",
"3.4990990990990998\n",
"3.5090090090090094\n",
"3.5189189189189194\n",
"3.5288288288288294\n",
"3.538738738738739\n",
"3.548648648648649\n",
"3.558558558558559\n",
"3.568468468468469\n",
"3.5783783783783787\n",
"3.5882882882882887\n",
"3.5981981981981987\n",
"3.608108108108109\n",
"3.6180180180180184\n",
"3.6279279279279284\n",
"3.6378378378378384\n",
"3.6477477477477485\n",
"3.657657657657658\n",
"3.667567567567568\n",
"3.677477477477478\n",
"3.6873873873873877\n",
"3.6972972972972977\n",
"3.7072072072072078\n",
"3.717117117117118\n",
"3.7270270270270274\n",
"3.7369369369369374\n",
"3.7468468468468474\n",
"3.7567567567567575\n",
"3.766666666666667\n",
"3.776576576576577\n",
"3.786486486486487\n",
"3.7963963963963967\n",
"3.8063063063063067\n",
"3.8162162162162168\n",
"3.826126126126127\n",
"3.8360360360360364\n",
"3.8459459459459464\n",
"3.8558558558558564\n",
"3.8657657657657665\n",
"3.875675675675676\n",
"3.885585585585586\n",
"3.895495495495496\n",
"3.9054054054054057\n",
"3.9153153153153157\n",
"3.9252252252252258\n",
"3.935135135135136\n",
"3.9450450450450454\n",
"3.9549549549549554\n",
"3.9648648648648654\n",
"3.9747747747747755\n",
"3.984684684684685\n",
"3.994594594594595\n",
"4.004504504504505\n",
"4.014414414414415\n",
"4.024324324324325\n",
"4.034234234234234\n",
"4.044144144144145\n",
"4.054054054054054\n",
"4.063963963963964\n",
"4.0738738738738745\n",
"4.083783783783784\n",
"4.093693693693694\n",
"4.103603603603604\n",
"4.113513513513514\n",
"4.123423423423423\n",
"4.133333333333334\n",
"4.143243243243243\n",
"4.153153153153153\n",
"4.163063063063063\n",
"4.172972972972973\n",
"4.182882882882883\n",
"4.192792792792793\n",
"4.202702702702703\n",
"4.212612612612613\n",
"4.222522522522523\n",
"4.232432432432432\n",
"4.242342342342343\n",
"4.252252252252252\n",
"4.262162162162162\n",
"4.272072072072072\n",
"4.281981981981982\n",
"4.291891891891892\n",
"4.301801801801802\n",
"4.311711711711712\n",
"4.321621621621622\n",
"4.331531531531532\n",
"4.341441441441441\n",
"4.351351351351352\n",
"4.361261261261261\n",
"4.371171171171171\n",
"4.381081081081081\n",
"4.390990990990991\n",
"4.4009009009009015\n",
"4.410810810810811\n",
"4.420720720720721\n",
"4.430630630630631\n",
"4.440540540540541\n",
"4.45045045045045\n",
"4.460360360360361\n",
"4.47027027027027\n",
"4.48018018018018\n",
"4.49009009009009\n",
"4.5\n",
"4.5099099099099105\n",
"4.51981981981982\n",
"4.52972972972973\n",
"4.53963963963964\n",
"4.54954954954955\n",
"4.559459459459459\n",
"4.56936936936937\n",
"4.579279279279279\n",
"4.589189189189189\n",
"4.599099099099099\n",
"4.609009009009009\n",
"4.6189189189189195\n",
"4.628828828828829\n",
"4.638738738738739\n",
"4.648648648648649\n",
"4.658558558558559\n",
"4.668468468468468\n",
"4.678378378378379\n",
"4.688288288288288\n",
"4.698198198198198\n",
"4.708108108108108\n",
"4.718018018018018\n",
"4.7279279279279285\n",
"4.737837837837838\n",
"4.747747747747748\n",
"4.757657657657658\n",
"4.767567567567568\n",
"4.777477477477477\n",
"4.787387387387388\n",
"4.797297297297297\n",
"4.807207207207207\n",
"4.817117117117117\n",
"4.827027027027027\n",
"4.8369369369369375\n",
"4.846846846846847\n",
"4.856756756756757\n",
"4.866666666666667\n",
"4.876576576576577\n",
"4.886486486486486\n",
"4.896396396396397\n",
"4.906306306306306\n",
"4.916216216216217\n",
"4.926126126126126\n",
"4.936036036036036\n",
"4.9459459459459465\n",
"4.955855855855856\n",
"4.965765765765766\n",
"4.975675675675676\n",
"4.985585585585586\n",
"4.995495495495495\n",
"5.005405405405406\n",
"5.015315315315315\n",
"5.025225225225226\n",
"5.035135135135135\n",
"5.045045045045045\n",
"5.0549549549549555\n",
"5.064864864864865\n",
"5.074774774774775\n",
"5.084684684684685\n",
"5.094594594594595\n",
"5.104504504504504\n",
"5.114414414414415\n",
"5.124324324324324\n",
"5.134234234234235\n",
"5.1441441441441444\n",
"5.154054054054054\n",
"5.1639639639639645\n",
"5.173873873873874\n",
"5.183783783783784\n",
"5.193693693693694\n",
"5.203603603603604\n",
"5.213513513513513\n",
"5.223423423423424\n",
"5.233333333333333\n",
"5.243243243243244\n",
"5.2531531531531535\n",
"5.263063063063063\n",
"5.2729729729729735\n",
"5.282882882882883\n",
"5.292792792792793\n",
"5.302702702702703\n",
"5.312612612612613\n",
"5.322522522522522\n",
"5.332432432432433\n",
"5.342342342342342\n",
"5.352252252252253\n",
"5.3621621621621625\n",
"5.372072072072072\n",
"5.3819819819819825\n",
"5.391891891891892\n",
"5.401801801801802\n",
"5.411711711711712\n",
"5.421621621621622\n",
"5.431531531531531\n",
"5.441441441441442\n",
"5.451351351351351\n",
"5.461261261261262\n",
"5.4711711711711715\n",
"5.481081081081081\n",
"5.4909909909909915\n",
"5.500900900900901\n",
"5.510810810810811\n",
"5.520720720720721\n",
"5.530630630630631\n",
"5.540540540540541\n",
"5.550450450450451\n",
"5.56036036036036\n",
"5.570270270270271\n",
"5.5801801801801805\n",
"5.59009009009009\n",
"5.6000000000000005\n",
"5.60990990990991\n",
"5.61981981981982\n",
"5.62972972972973\n",
"5.63963963963964\n",
"5.64954954954955\n",
"5.65945945945946\n",
"5.669369369369369\n",
"5.67927927927928\n",
"5.6891891891891895\n",
"5.699099099099099\n",
"5.7090090090090095\n",
"5.718918918918919\n",
"5.728828828828829\n",
"5.738738738738739\n",
"5.748648648648649\n",
"5.758558558558559\n",
"5.768468468468469\n",
"5.778378378378378\n",
"5.788288288288289\n",
"5.7981981981981985\n",
"5.808108108108108\n",
"5.8180180180180185\n",
"5.827927927927928\n",
"5.837837837837838\n",
"5.847747747747748\n",
"5.857657657657658\n",
"5.867567567567568\n",
"5.877477477477478\n",
"5.887387387387387\n",
"5.897297297297298\n",
"5.9072072072072075\n",
"5.917117117117117\n",
"5.9270270270270276\n",
"5.936936936936937\n",
"5.946846846846847\n",
"5.956756756756757\n",
"5.966666666666667\n",
"5.976576576576577\n",
"5.986486486486487\n",
"5.996396396396396\n",
"6.006306306306307\n",
"6.0162162162162165\n",
"6.026126126126126\n",
"6.036036036036037\n",
"6.045945945945946\n",
"6.055855855855857\n",
"6.065765765765766\n",
"6.075675675675676\n",
"6.085585585585586\n",
"6.095495495495496\n",
"6.105405405405405\n",
"6.115315315315316\n",
"6.1252252252252255\n",
"6.135135135135135\n",
"6.145045045045046\n",
"6.154954954954955\n",
"6.164864864864866\n",
"6.174774774774775\n",
"6.184684684684685\n",
"6.194594594594595\n",
"6.204504504504505\n",
"6.2144144144144144\n",
"6.224324324324325\n",
"6.2342342342342345\n",
"6.244144144144144\n",
"6.254054054054055\n",
"6.263963963963964\n",
"6.273873873873875\n",
"6.283783783783784\n",
"6.293693693693694\n",
"6.303603603603604\n",
"6.313513513513514\n",
"6.3234234234234235\n",
"6.333333333333334\n",
"6.3432432432432435\n",
"6.353153153153153\n",
"6.363063063063064\n",
"6.372972972972973\n",
"6.382882882882884\n",
"6.392792792792793\n",
"6.402702702702703\n",
"6.412612612612613\n",
"6.422522522522523\n",
"6.4324324324324325\n",
"6.442342342342343\n",
"6.4522522522522525\n",
"6.462162162162162\n",
"6.472072072072073\n",
"6.481981981981982\n",
"6.491891891891893\n",
"6.501801801801802\n",
"6.511711711711712\n",
"6.521621621621622\n",
"6.531531531531532\n",
"6.5414414414414415\n",
"6.551351351351352\n",
"6.5612612612612615\n",
"6.571171171171171\n",
"6.581081081081082\n",
"6.590990990990991\n",
"6.600900900900902\n",
"6.610810810810811\n",
"6.620720720720721\n",
"6.630630630630631\n",
"6.640540540540541\n",
"6.6504504504504505\n",
"6.660360360360361\n",
"6.6702702702702705\n",
"6.680180180180181\n",
"6.690090090090091\n",
"6.7\n",
"6.709909909909911\n",
"6.71981981981982\n",
"6.72972972972973\n",
"6.73963963963964\n",
"6.74954954954955\n",
"6.7594594594594595\n",
"6.76936936936937\n",
"6.7792792792792795\n",
"6.78918918918919\n",
"6.7990990990991\n",
"6.809009009009009\n",
"6.81891891891892\n",
"6.828828828828829\n",
"6.838738738738739\n",
"6.848648648648649\n",
"6.858558558558559\n",
"6.8684684684684685\n",
"6.878378378378379\n",
"6.8882882882882885\n",
"6.898198198198199\n",
"6.908108108108109\n",
"6.918018018018018\n",
"6.927927927927929\n",
"6.937837837837838\n",
"6.947747747747748\n",
"6.957657657657658\n",
"6.967567567567568\n",
"6.9774774774774775\n",
"6.987387387387388\n",
"6.9972972972972975\n",
"7.007207207207208\n",
"7.017117117117118\n",
"7.027027027027027\n",
"7.036936936936938\n",
"7.046846846846847\n",
"7.056756756756757\n",
"7.066666666666667\n",
"7.076576576576577\n",
"7.0864864864864865\n",
"7.096396396396397\n",
"7.1063063063063066\n",
"7.116216216216217\n",
"7.126126126126127\n",
"7.136036036036036\n",
"7.145945945945947\n",
"7.155855855855856\n",
"7.165765765765766\n",
"7.175675675675676\n",
"7.185585585585586\n",
"7.195495495495496\n",
"7.205405405405406\n",
"7.215315315315316\n",
"7.225225225225226\n",
"7.235135135135136\n",
"7.245045045045045\n",
"7.254954954954956\n",
"7.264864864864865\n",
"7.274774774774775\n",
"7.284684684684685\n",
"7.294594594594595\n",
"7.304504504504505\n",
"7.314414414414415\n",
"7.324324324324325\n",
"7.334234234234235\n",
"7.344144144144145\n",
"7.354054054054054\n",
"7.363963963963965\n",
"7.373873873873874\n",
"7.383783783783784\n",
"7.393693693693694\n",
"7.403603603603604\n",
"7.413513513513514\n",
"7.423423423423424\n",
"7.433333333333334\n",
"7.443243243243244\n",
"7.453153153153154\n",
"7.463063063063063\n",
"7.472972972972974\n",
"7.482882882882883\n",
"7.492792792792793\n",
"7.502702702702703\n",
"7.512612612612613\n",
"7.522522522522523\n",
"7.532432432432433\n",
"7.542342342342343\n",
"7.552252252252253\n",
"7.562162162162163\n",
"7.572072072072072\n",
"7.581981981981983\n",
"7.591891891891892\n",
"7.601801801801802\n",
"7.611711711711712\n",
"7.621621621621622\n",
"7.631531531531532\n",
"7.641441441441442\n",
"7.651351351351352\n",
"7.661261261261262\n",
"7.671171171171172\n",
"7.681081081081081\n",
"7.690990990990992\n",
"7.700900900900901\n",
"7.710810810810811\n",
"7.720720720720721\n",
"7.730630630630631\n",
"7.740540540540541\n",
"7.750450450450451\n",
"7.760360360360361\n",
"7.770270270270271\n",
"7.780180180180181\n",
"7.79009009009009\n",
"7.800000000000001\n",
"7.80990990990991\n",
"7.819819819819821\n",
"7.82972972972973\n",
"7.83963963963964\n",
"7.84954954954955\n",
"7.85945945945946\n",
"7.86936936936937\n",
"7.87927927927928\n",
"7.88918918918919\n",
"7.899099099099099\n",
"7.90900900900901\n",
"7.918918918918919\n",
"7.92882882882883\n",
"7.938738738738739\n",
"7.948648648648649\n",
"7.958558558558559\n",
"7.968468468468469\n",
"7.978378378378379\n",
"7.988288288288289\n",
"7.998198198198199\n",
"8.00810810810811\n",
"8.018018018018019\n",
"8.027927927927928\n",
"8.03783783783784\n",
"8.04774774774775\n",
"8.057657657657659\n",
"8.067567567567568\n",
"8.077477477477478\n",
"8.087387387387388\n",
"8.097297297297299\n",
"8.107207207207209\n",
"8.117117117117118\n",
"8.127027027027028\n",
"8.136936936936937\n",
"8.146846846846847\n",
"8.156756756756756\n",
"8.166666666666668\n",
"8.176576576576577\n",
"8.186486486486487\n",
"8.196396396396397\n",
"8.206306306306306\n",
"8.216216216216218\n",
"8.226126126126127\n",
"8.236036036036037\n",
"8.245945945945946\n",
"8.255855855855856\n",
"8.265765765765765\n",
"8.275675675675677\n",
"8.285585585585586\n",
"8.295495495495496\n",
"8.305405405405406\n",
"8.315315315315315\n",
"8.325225225225227\n",
"8.335135135135136\n",
"8.345045045045046\n",
"8.354954954954955\n",
"8.364864864864865\n",
"8.374774774774774\n",
"8.384684684684686\n",
"8.394594594594595\n",
"8.404504504504505\n",
"8.414414414414415\n",
"8.424324324324324\n",
"8.434234234234236\n",
"8.444144144144145\n",
"8.454054054054055\n",
"8.463963963963964\n",
"8.473873873873874\n",
"8.483783783783784\n",
"8.493693693693695\n",
"8.503603603603604\n",
"8.513513513513514\n",
"8.523423423423424\n",
"8.533333333333333\n",
"8.543243243243245\n",
"8.553153153153154\n",
"8.563063063063064\n",
"8.572972972972973\n",
"8.582882882882883\n",
"8.592792792792794\n",
"8.602702702702704\n",
"8.612612612612613\n",
"8.622522522522523\n",
"8.632432432432433\n",
"8.642342342342342\n",
"8.652252252252254\n",
"8.662162162162163\n",
"8.672072072072073\n",
"8.681981981981982\n",
"8.691891891891892\n",
"8.701801801801803\n",
"8.711711711711713\n",
"8.721621621621622\n",
"8.731531531531532\n",
"8.741441441441442\n",
"8.751351351351351\n",
"8.761261261261263\n",
"8.771171171171172\n",
"8.781081081081082\n",
"8.790990990990991\n",
"8.800900900900901\n",
"8.810810810810812\n",
"8.820720720720722\n",
"8.830630630630631\n",
"8.840540540540541\n",
"8.85045045045045\n",
"8.86036036036036\n",
"8.870270270270272\n",
"8.880180180180181\n",
"8.89009009009009\n",
"8.9\n",
"8.90990990990991\n",
"8.919819819819821\n",
"8.929729729729731\n",
"8.93963963963964\n",
"8.94954954954955\n",
"8.95945945945946\n",
"8.96936936936937\n",
"8.97927927927928\n",
"8.98918918918919\n",
"8.9990990990991\n",
"9.00900900900901\n",
"9.018918918918919\n",
"9.02882882882883\n",
"9.03873873873874\n",
"9.04864864864865\n",
"9.058558558558559\n",
"9.068468468468469\n",
"9.078378378378378\n",
"9.08828828828829\n",
"9.0981981981982\n",
"9.108108108108109\n",
"9.118018018018018\n",
"9.127927927927928\n",
"9.13783783783784\n",
"9.147747747747749\n",
"9.157657657657658\n",
"9.167567567567568\n",
"9.177477477477478\n",
"9.187387387387387\n",
"9.197297297297299\n",
"9.207207207207208\n",
"9.217117117117118\n",
"9.227027027027027\n",
"9.236936936936937\n",
"9.246846846846848\n",
"9.256756756756758\n",
"9.266666666666667\n",
"9.276576576576577\n",
"9.286486486486487\n",
"9.296396396396396\n",
"9.306306306306308\n",
"9.316216216216217\n",
"9.326126126126127\n",
"9.336036036036036\n",
"9.345945945945946\n",
"9.355855855855857\n",
"9.365765765765767\n",
"9.375675675675677\n",
"9.385585585585586\n",
"9.395495495495496\n",
"9.405405405405405\n",
"9.415315315315317\n",
"9.425225225225226\n",
"9.435135135135136\n",
"9.445045045045045\n",
"9.454954954954955\n",
"9.464864864864866\n",
"9.474774774774776\n",
"9.484684684684686\n",
"9.494594594594595\n",
"9.504504504504505\n",
"9.514414414414414\n",
"9.524324324324326\n",
"9.534234234234235\n",
"9.544144144144145\n",
"9.554054054054054\n",
"9.563963963963964\n",
"9.573873873873875\n",
"9.583783783783785\n",
"9.593693693693695\n",
"9.603603603603604\n",
"9.613513513513514\n",
"9.623423423423423\n",
"9.633333333333335\n",
"9.643243243243244\n",
"9.653153153153154\n",
"9.663063063063063\n",
"9.672972972972973\n",
"9.682882882882884\n",
"9.692792792792794\n",
"9.702702702702704\n",
"9.712612612612613\n",
"9.722522522522523\n",
"9.732432432432434\n",
"9.742342342342344\n",
"9.752252252252253\n",
"9.762162162162163\n",
"9.772072072072072\n",
"9.781981981981982\n",
"9.791891891891893\n",
"9.801801801801803\n",
"9.811711711711713\n",
"9.821621621621622\n",
"9.831531531531532\n",
"9.841441441441443\n",
"9.851351351351353\n",
"9.861261261261262\n",
"9.871171171171172\n",
"9.881081081081081\n",
"9.890990990990991\n",
"9.900900900900902\n",
"9.910810810810812\n",
"9.920720720720722\n",
"9.930630630630631\n",
"9.94054054054054\n",
"9.950450450450452\n",
"9.960360360360362\n",
"9.970270270270271\n",
"9.98018018018018\n",
"9.99009009009009\n",
"10.0\n",
"\n",
"\n",
"b.) The minimum cross-sectional area the Steel can have is 2.6964 mm^2\n"
]
}
],
"source": [
"for i in range (0,1000):\n",
" F_st = F/(E_steel*A3[i]);\n",
" U_steel = solveLU(L,U,F_st);\n",
" U_steel3 = U_steel[1::2];\n",
" if min(U_steel3)>-.2:\n",
" print((A3[i]))\n",
" \n",
"print()\n",
"print()\n",
"print('b.) The minimum cross-sectional area the Steel can have is 2.6964 mm^2')"
]
},
{
"cell_type": "code",
"execution_count": 111,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"c.)\n",
"The weight of the truss made of aluminum is 0.06843860099999999\n",
"The weight of the truss made of steel is 0.07118496\n"
]
}
],
"source": [
"beams = 11\n",
"A_alum = 7.6811\n",
"A_steel = 2.6964\n",
"dens_alum = 2700/10**9\n",
"dens_steel = 8000/10**9\n",
"w_alum = l*A_alum*beams*dens_alum\n",
"w_steel = l*A_steel*beams*dens_steel\n",
"print('c.)')\n",
"print('The weight of the truss made of aluminum is', w_alum)\n",
"print('The weight of the truss made of steel is', w_steel)"
]
},
{
"cell_type": "code",
"execution_count": 114,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"d.)\n",
"The cost of an aluminum truss is $ 0.10573763854499997\n",
"The cost of a steel truss is $ 0.03388404096\n",
"So, it would be cheaper to create a steel truss.\n"
]
}
],
"source": [
"Cost_alum = w_alum*1.545\n",
"Cost_steel = w_steel*.476\n",
"print('d.)')\n",
"print('The cost of an aluminum truss is $', Cost_alum)\n",
"print('The cost of a steel truss is $', Cost_steel)\n",
"print('So, it would be cheaper to create a steel truss.')"
]
},
{
"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": 116,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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n31y0kkn5d3vfnfOOOOMvO9973vS2K21/PjHP87Xv/71fPCDH8y3v/3tfPKTn8zcuXPz1a9+NVdeeWX23HPPMWs78sgjs+GGGyZJDjjggJx0Uu8LLW688cZ897vfzYwZM3Lcccflpz/9aX7wgx9k9uzZ+fCHP5xZs2blqquuytVXX52DDjoo119/fZLk8ssvz+LFi7PFFltM+HMaaaB5zqraLb0np84eamutndX1pFX1rSR/1VobZMZwoySvaq3d2D/2jUn+coxxz06yb5Ktq2pJkuNba5+rqrcluSi9rxQ5o7V2ddfaAQCAp6Ydd9wxL3jBCx7bPvvss/O5z30uy5cvzy233JJrrrnmSaFyww03zIEHHpgk+ZM/+ZNccsklo459+OGHP9bnV7/6VZLk0ksvzXvf+94kye67757nPve5Y9Y21uWvr3rVq55wme6hhx6a2bNnPzb+3/3d3yVJnvvc5+YZz3hGbrjhhiTJ/vvvv1oCZTJAqKyq49MLarsm+VZ6X81xaZKBQ2Vr7ftJvj9s+6CV9RnWftmI7UfSm7kc7TyvHaP9W+nVDgAArEW6zChOlo033vix9euvvz4f//jH8+Mf/zibb755jjrqqFG/amPWrFmPrc+cOTPLly8fdewNNtjgSX1aa6u15pHb440/8rhVMcj3VB6RZL8kt7XWjk6ye0b5+g0AAICninvvvTebbrppNttss9x666256KKLVvs5FixYkHPPPTdJctVVV+Waa65ZrePvvffejz2B9tprr82tt96anXbaabWeIxns8tcHWmsrqmp5VW2W5Pas/CE9AAAA09aee+6ZXXfdNbvttlue9axnZa+99lrt53j729+eN7zhDXne856XPffcM7vttlvG+jrD4fdUPv3pTx8o5L797W/PX//1X+eP//iPs/766+ess856wszq6lIrm3Ktqn9O8r/Te8DN3yZZlmRxf9ZynTB//vy2cOHCqS4DAACeEq699trssssuU13GlFu+fHmWL1+e2bNn5/rrr8/++++f66+/fpW/4mNVjfbnU1WLWmvzR+s/yNNf/9/+6qlV9e0km7XWfrbKlQIAAKzDli1blv322y/Lly9Pay2f+cxnpjxQdjHIg3r2Hq2ttfaDySkJAADgqW/zzTfPokWLprqMVTZIDP67Yeuzk/xpkkVJXjIpFQEAADBtDHL568HDt6tquyQfmbSKAAAAmDYG+UqRkZYk2W11FwIAAMD0M8g9lZ9MMvSI2BlJ9khy5WQWBQAAwPQwyD2Vw79LY3mSs1trl01SPQAAAJPmzjvvzH777Zckue222zJz5sw87WlPS5L8+Mc/Hvh7HM8444wcdNBBmTt37pP2HXXUUbnsssse+87JTTfdNJdccslqegdrn0HuqfyXNVEIAADAZNtqq62yePHiJMkJJ5yQTTbZJMcee+yExznjjDOy5557jhoqk+Sf/umfcthhh415/PLly5/w9SEjtwc9bm0wyOWvV+Xxy1+fsCtJa609b7VXBZZmm78AACAASURBVAAAsIb9y7/8Sz71qU/l4Ycfzote9KKccsopWbFiRY4++ugsXrw4rbW85S1vydOf/vQsXrw4Rx55ZDbccMOBZziPO+64LF26NDfddFPmzp2bffbZJxdffHGWLVuWhx56KBdddFGOPfbYfOc730lV5fjjj88RRxyRiy++OCeddFK23nrrXH311bnqqqvWwKcxuEEi7oX91y/0X1+f5PdJzGACAACr5p3vTPozh6vNHnskJ588oUN+/vOf5/zzz89//ud/Zr311stb3vKWnHPOOdlxxx1zxx13PBbkfve732XzzTfPJz/5yZxyyinZY489Rh3vXe96V0444YQkyfOe97ycddZZSZKf/vSn+cEPfpDZs2fn9NNPz+WXX57Fixdniy22yJe//OVcc801ufLKK7N06dK84AUvyN57750k+eEPf5hrrrkmz3zmMzt+KJNnkFC5V2ttr2Hb76uqy1prH5ysogAAANakiy++OD/5yU8yf/78JMkDDzyQ7bbbLi972cty3XXX5R3veEcOOuig7L///gONN9blr4ceemhmz5792Pb++++fLbbYIkly6aWX5nWve11mzpyZuXPnZsGCBVm4cGFmzZqVF77whWtloEwGC5UbV9WC1tqlSVJVL0qy8eSWBQAArBMmOKM4WVprOeaYY/L3f//3T9r3s5/9LBdeeGE+8YlP5Ktf/WpOO+20zufZeOONx9xubbS7Dkc/bm0yyPdUvinJp6rqV1X1qyT/nOSYSa0KAABgDXrpS1+ac889N3fccUeS3lNif/3rX2fp0qVpreVVr3pVTjzxxFxxxRVJek90ve+++1ZrDXvvvXfOOeecPProo/nv//7vXHbZZY/NnK7NBnn6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\n",
"text/plain": [
"<Figure size 1080x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"data_al = np.loadtxt('../data/al_price.csv', delimiter = ',', skiprows = 1)\n",
"Y_al = data_al[:,0]\n",
"C_al = data_al[:,1]\n",
"np.random.seed(103)\n",
"i_rand = np.random.randint(0,len(Y_al), size = len(Y_al))\n",
"train_per_al = .7\n",
"Y_al_train = Y_al[i_rand[:int(len(Y_al)*train_per_al)]]\n",
"C_al_train = C_al[i_rand[:int(len(Y_al)*train_per_al)]]\n",
"Y_al_test = Y_al[i_rand[int(len(Y_al)*train_per_al):]]\n",
"C_al_test = C_al[i_rand[int(len(Y_al)*train_per_al):]]\n",
"z = np.block([[Y_al_train**0]]).T\n",
"z_test = np.block([[Y_al_test**0]]).T\n",
"max_N = 30\n",
"SSE_train_al = np.zeros(max_N)\n",
"SSE_test_al = np.zeros(max_N)\n",
"for i in range(1,max_N):\n",
" z = np.hstack((z,Y_al_train.reshape(-1,1)**i))\n",
" z_test = np.hstack((z_test,Y_al_test.reshape(-1,1)**i))\n",
" A = np.linalg.solve(z.T@z,z.T@C_al_train)\n",
" st = np.std(C_al_train)\n",
" sr = np.std(C_al_train-z@A)\n",
" r2 = 1-sr/st\n",
" SSE_train_al[i] = np.sum((C_al_train-z@A)**2)/len(C_al_train)\n",
" SSE_test_al[i] = np.sum((C_al_test-z_test@A)**2)/len(C_al_test)\n",
"fig = plt.figure(figsize = (15,10))\n",
"plt.semilogy(np.arange(2,max_N),SSE_train_al[2:],label='Training Error',color='green')\n",
"plt.semilogy(np.arange(2,max_N),SSE_test_al[2:],label='Test Error',color='red')\n",
"plt.xlabel('Polynomial Order')\n",
"plt.ylabel('Sum of Squares Error')\n",
"plt.legend()\n",
"plt.title('Aluminum Error vs Order');"
]
},
{
"cell_type": "code",
"execution_count": 117,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA5UAAAJcCAYAAABpOIAbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nOzde5RlZX0n/O+vqrvpbi7d0NwijcMtMSIBJG0mKsGJOgSv5E1ATOTVIKPhfaOjMSTqjCtoJpmgK2OMlwlBBHXigKjjEn2jKDqJSvDSYKtchoCC2hGhaaC52Beq63n/qFNtdXGq+tTuru4u+vNZ66yz97Of8+zfOVUs6tvPs/ep1loAAACgi6FdXQAAAABzl1AJAABAZ0IlAAAAnQmVAAAAdCZUAgAA0JlQCQAAQGdCJQAMoKrurKrn7uo65pKqalV1zK6uA4DZJVQCMGdV1clV9c9Vta6q7quqa6vqab1jv1dVX91JdXywqjZV1cMTHt/eGeeeDVX1jKr6UlU91PtsP11Vx+7qugDYPQmVAMxJVbVfks8keU+SA5IcluRtSTbuopLe0VrbZ8LjhH6dqmreIG3TmWn/GY799CSfT/KpJE9IcmSSbye5tqqO2hn1zOb7A2DHEyoBmKt+IUlaa5e31ja31ta31j7fWvtOVT05yUVJnt6bNXwgSapqr6r6q6r6YVXdXVUXVdWi8QGr6oVVtaqqHujNgB6/vUVW1RG9ZaDnVtUPk3ypX1uv74ur6qbe+f+x9z7Gx7mzqt5YVd9J8sjk4NV7L381qe1TVfWG3vYbq+pfe7OPt1bVc6Yo+R1JPtxa+5vW2kOttftaa29J8rUkb+2N9e+qanVvzJ8kuazX/sdVdVdV/biqXjmplik/+6nGA2BuECoBmKv+JcnmqvpQVT2vqvYfP9BauyXJeUmu680aLu0denvGwuiJSY7J2OzmnyZJVZ2U5NIkv59kWZK/S3JVVe21g+p9VpInJ/mNfm1V9QtJLk/y+iQHJfmHJJ+uqgUT+v9OkhckWdpaG5k0/v9MclZVVe/97J/k1CRXVNWTkrwmydNaa/v2arhzcoFVtTjJM5J8rE/9Vyb59xP2D83YDPG/SfLqqjotyfm9Pj+fZPL1p1N+9v3G63N+AHZTQiUAc1Jr7cEkJydpSd6fZE1VXVVVh/Tr3wtbr0ryh73Zt4eS/NckL+11eVWSv2utfb038/mhjC2l/dUBSzq/N8M4/vjQpONvba090lpbP0XbWUn+v9baF1prjyb5qySLMhbyxr27tfajSWOM+0rvs/i13v4ZGQvVP06yOcleSY6tqvmttTtba9/rM8YBGfvb4K4+x+5KcuCE/dEkF7TWNvbqeUmSy1prN7bWHklvVjMZ6LPvNx4Ac4RQCcCc1Vq7pbX2e6215UmOy9g1gO+aovtBSRYnuX48+CX5XK89GZsh+6OJwTDJ4b0xB/FXrbWlEx6vmHT8R31eM7HtCUl+MOG9jfaOH7aNMcb7tyRXZGw2M0l+N8lHesduz9gM6FuT3FNVV1RVv/d1f8bC3c/1OfZzSe6dsL+mtbZhUv0T6/vBhO1tffb9xgNgjhAqAXhcaK39nyQfzFi4TMZm7Sa6N8n6JE+ZEPyWtNb26R3/UZK/mBQMF7fWLt9RJW6j7ccZC7ZJtszuHZ7kX7cxxkSXJzmjqv5Nkn+b5BNbXtja/2ytndw7R8vYctStixmbYbwuyZl9xn5Jki9OU8tdvXrHPXHC9rY++0HeGwC7KaESgDmpqn6xqv6oqpb39g/P2Czd13pd7k6yfPyaxN7M3/uT/HVVHdx7zWFVNX6N4/uTnFdV/7bG7F1VL6iqfXfSW7oyyQuq6jlVNT/JH2Vs+e0/DzpAa+1bSdYkuSTJ1a218RsUPamqnt27PnRDxgLe5imGeVOSV1TVf6yqfatq/6r68yRPz9jddaer//eq6tjetZkXTKhrW589AHOYUAnAXPVQxmbjvl5Vj2QsTN6YsTCWjN1R9aYkP6mq8WWbb0xye5KvVdWDSa5J8qQkaa2tzNh1f+/N2DLQ25P83gzq+ZPa+nsq7932S36mtXZrkrMz9hUp9yZ5UZIXtdY2zWScjM1WPjdjN+4Zt1eSC3vj/iTJwUn+0xR1fDVjN/L5rYzNPv4gyVOTnNxau22a+j+bsaXHX8rYZ/elSV2m/OwBmNtq7BIMAAAAmDkzlQAAAHQmVAIAANCZUAkAAEBnQiUAAACdzdvVBexKVXVUkv+cZElr7Yyp+h144IHtiCOO2Gl1AQAA7E6uv/76e1trB/U7NuuhsqqGk6xM8q+ttRf2Ob40Y9+ndVzGvvj4la216zqe69IkL0xyT2vtuAntpyX5myTDSS5prV2YJK217yc5t6o+Pt24RxxxRFauXNmlJAAAgDmvqn4w1bGdsfz1dUlumeb43yT5XGvtF5OcMLlvVR08+Yunq+qYKcb6YJLTJvUdTvK+JM9LcmyS36mqY2fyBgAAAOhvVkNlVS1P8oKMzUT2O75fklOSfCBJWmubWmsPTOr2rCSfqqqFvde8Ksm7+43XWvtykvsmNf9Kkttba9/vfYH0FUlOH7D+F1XVxevWrRukOwAAwB5ntmcq35XkT5KMTnH8qCRrklxWVd+qqkuqau+JHVprH0vyuSRXVNXLkrwyyUtmUMNhSX40YX91ry1VtayqLkry1Kp68+QXttY+3Vp79ZIlS2ZwOgAAgD3HrIXKqhq/tvH6abrNS3JSkr9trT01ySNJ3jS5U2vtHUk2JPnbJC9urT08k1L6tLXeuGtba+e11o5urf3lDMYEAAAgsztT+cwkL66qOzO25PTZVfX3k/qsTrK6tfb13v7HMxYyt1JVv5axG/l8MskFM6xjdZLDJ+wvT/LjGY4BAABAH7MWKltrb26tLW+tHZHkpUm+1Fo7e1KfnyT5UVU9qdf0nCQ3T+xTVU9N8v6MXQd5TpIDqurPZ1DKN5P8fFUdWVULerVc1eU9AQAAsLWdcffXx6iqf6iqJ/R2X5vkI1X1nSQnJvmvk7ovTnJma+17rbXRJK9I0vd2tlV1eZLrkjypqlZX1bmttZEkr0lydcbuLHtla+2mHf+uAAAA9jzVWtvVNez2VqxY0XxPJQAAsKeqqutbayv6HdslM5UAAAA8PgiVAAAAdCZUAgAA0JlQCQAAQGdCJQAAAJ0JlQAAAHQmVAIAANCZUAkAAEBnQiUAAACdCZUAAAB0JlQCAADQmVAJAABAZ0IlAAAAnQmVAAAAdDZvVxcAAHPd5tHNuW/9fVnz0zVZ88iavs/3PHJP7v3pvdlvr/1y5P5H5silvUdve/l+yzM8NLyr3woAzJhQCTCN0TaaBzc+mHUb1mXdxnV5YMMDW7bXbViX0TaahfMWZq95e409D++11fb4sX7b84bmpap29Vukj5HRkdz703unDIjj2/c8ck/W/HRN7lt/X0bbaN+xli5cmoMWH5SD9j4oR+5/ZB7Y8ED+6c5/ykce/Eha2pZ+84bm5YlLnrglbB6x9Iifhc/9j8whex/i9wWA3ZJQCTxutdby8KaHtwTAfqHwgQ0PjG1P3u/1eXDjg7NWX6WmDZ39gur8ofkZruEM1VCGaijDQ2Pb/domtvdrG/T184fnZ97QvMwbmpf5Q2PbM20b3x9/zCQctdYyMjqSTZs3ZdPmTXl09NEt21vaNj+2baq+E/tv3Lwxa3+6dqugOB4Sp7Js0bIctPdBOWjxQXnyQU/OKYtP2RIaJz8fuPjALBhe0HecTZs35Yfrfpg77r8jdz5wZ+544I6xx/135Kp/uSr3PHLPVv0XzVu0VdA8YukRW8107r9o/4E/09ky2kazeXRzhoeGUykhGGAPIVTOUf+y9l9yxY1XZLiGMzw0POXz+B+F0/WZSd9xrf3sX9cn/kv7eHu/tkHaJ7e11jLaRtMy9jz5MX58q7Y+fQftN278j6GJfxQN0lbptQ/QNj7GxPfYWtvqebz2bbUNOsZQDWXJXkuydOHSLY8lC8f2l+y1ZLddevfo5kdz3/r7snb92qz96dqttteu/9n+fevvy/3r798SCh/c+GA2t83Tjj1vaF6W7LUkSxYu2fLZHHPAMVu2Jx8b3x5/Hh4azsaRjdkwsiEbN/eeRzZutT1+bFv9tmxPaPvpoz/Nfevv2/LaR0cf3fL7unl089hz2/yYtsntu5upwurw0PCWwDcxEM6WeUPzcsCiA7aEwOMPOX7KgHjQ4oOybPGyzBvaMf/rXDC8IMcccEyOOeCYvscf2fTIlrB55wN35o7779gSPK/94bVZt3HdVv2X7LXkMctqj1h6RJbsteQxv2dT/V5O/j3s9zs6Zf+RjXl09NGtapr4/5WZbk/8B5HpthcML8hBex+UQ/Y+JAfvffDPnvcZez5o8UGZPzx/h/zMAOivJv4RT38rVqxoK1eu3NVlbOWqW6/K6VecvqvL4HFm3wX79g2cS/da2r99YtteS7b5h9toG80DGx4YC4ETA2Fve+1P1+a+DY899tCmh6Ycc97QvCxbtCwHLDogyxYv26qe8fA3XThcPH/x4342ZeI/MPQLndO1bW6bMzI6kkc3P5qR0ZGx7dFHZ61tc9uc+UPzs2B4wWMe84cf296vb79+/frOH56foZq796u7f/39W2Y2twTP3v6dD9yZ9SPrZzTecA1POXM+1fLufsfmDc3b8ju0uW3e6ndpyu1B+/XGnDj+xpGNWfPTNbn74buzcfPGvu/tgEUHbB02F/8sdE4Oofss2GdH/HgAHneq6vrW2oq+x4TKbdsdQ+X4zNTE/8n2ex6kz+T/QU/3PPGP7/EZuCR922fSd2L7xLahGkpVbVmKN/FReWx7v74z6VdVj5npG/+8t9U2cZZ2W20TxxivZ/Is5sSapmsbf3+DjLG5bc6DGx/MAxse2LIMdHx7y2Nj/2PrNq7b5ozX4vmLtwqa+yzYJw9ufHDL7OL9G+6fcoxKZenCpVm2eNlWIXHL9qJlWbb4sdv7Ltj3cR8KYaZaa7n7kbtzx/135OFND/ddTj05OO6uKxUG1VrLQ5seyt0P3517Hrkndz/Se56833t+YMMDfcdZPH/x1mFzUug8cPGBaa3NaLn1Y5Zej07fZ/KS7nlD8/peq73V/hTXc093ffdUfSeuIhiu4cwbmrfl/zPAtm0e3ZyNmzdm/aPrs2Fkw0CP9SNb933jM9+Yfffad1e/la0IldtpdwyVsLONttGx6xP7BdFe6Jzc9tCmh7LfXvttMxguWzQ2wzjX/6gF5o6JM5z3PHJP3+A58di2ltJPpd8Meb+Z9Klm1ecPzc9IG5lyWf1U+5OXIu8I40uTJwfO6drG96dr29krBrr+7TvxEp6uJv/D++RLaiYf29b+oH232TZA/+kmAqb7B4eJr3vMsY6vGzfV5VMT26a7TGvQ121um38W/gYIitv7399QDeWO192RJy554naNs6NNFypdUwkMZKiGst9e+2W/vfbL4UsO39XlAGyXvebtleX7Lc/y/ZZvs+9oG8396+/P3Y/cnXt/eu+WazkHWZ69q2b3RtvowEF08rHxpejjS9Q3j45tT9e2eXRzRtpg/Tdt3rRlf2R0JKNtdKd/ToMElr6v2446+wWaqYLMIPuD9h20bUcEs8e852mC+Pa8buCwPMNAPNXrhmooi+YvysJ5C7c8li1eloXzFmbRvK3bp3sM2ncu3h1eqAQAmMZQDY0tx1+8bFeXMrDxP4IXzV+0q0sB9gBz9w4FAAAA7HJCJQAAAJ0JlQAAAHQmVAIAANCZUAkAAEBnQiUAAACdCZUAAAB0JlQCAADQmVAJAABAZ0IlAAAAnQmVAAAAdCZUAgAA0JlQCQAAQGdCJQAAAJ0JlQAAAHQmVAIAANCZUAkAAEBnQiUAAACdCZUAAAB0JlQCAADQmVAJAABAZ0IlAAAAnQmVAAAAdCZUAgAA0JlQCQAAQGdCJQAAAJ0JlQAAAHQmVAIAANCZUAkAAEBnQiUAAACdCZUAAAB0JlQCAADQmVAJAABAZ0IlAAAAnQmVAAAAdCZUAgAA0JlQCQAAQGdCJQAAAJ0JlQAAAHQmVAIAANCZUAkAAEBnQiUAAACdCZUAAAB0JlQCAADQmVAJAABAZ0IlAAAAnQmVAAAAdCZUAgAA0JlQCQAAQGdCJQAAAJ0JlQAAAHQmVAIAANCZUAkAAEBnQiUAAACdCZUAAAB0JlQCAADQ2R4dKqvqqKr6QFV9fFfXAgAAMBfNeqisquGq+lZVfWZ7+gx4rkur6p6qunFS+2lVdWtV3V5Vbxpvb619v7V27vacEwAAYE+2M2YqX5fklq59qurgqtp3UtsxU4zzwSSnTeo7nOR9SZ6X5Ngkv1NVx267bAAAALZlVkNlVS1P8oIkl2xHn2cl+VRVLez1f1WSd/fr2Fr7cpL7JjX/SpLbe7OSm5JckeT0Aet/UVVdvG7dukG6AwAA7HFme6byXUn+JMlo1z6ttY8l+VySK6rqZUlemeQlM6jhsCQ/mrC/uteWqlpWVRcleWpVvbnPuT/dWnv1kiVLZnA6AACAPceshcqqemGSe1pr129PnyRprb0jyYYkf5vkxa21h2dSSr8he+Ouba2d11o7urX2lzMYEwAAgMzuTOUzk7y4qu7M2JLTZ1fV33fok6r6tSTHJflkkgtmWMfqJIdP2F+e5MczHAMAAIA+Zi1Uttbe3Fpb3lo7IslLk3yptXb2TPtU1VOTvD9j10Gek+SAqvrzGZTyzSQ/X1VHVtWC3nmu6vq+AAAA+Jld8j2VVfUPVfWEAbsvTnJma+17rbXRJK9I8oMpxr08yXVJnlRVq6vq3NbaSJLXJLk6Y3eYvbK1dtP2vwsAAACqtbara9jtrVixoq1cuXJXlwEAALBLVNX1rbUV/Y7tkplKAAAAHh+ESgAAADoTKgEAAOhMqAQAAKAzoRIAAIDOhEoAAAA6EyoBAADoTKgEAACgM6ESAACAzoRKAAAAOhMqAQAA6EyoBAAAoDOhEgAAgM6ESgAAADoTKgEAAOhMqAQAAKAzoRIAAIDOhEoAAAA6EyoBAADoTKgEAACgM6ESAACAzoRKAAAAOhMqAQAA6EyoBAAAoDOhEgAAgM6ESgAAADoTKgEAAOhMqAQAAKAzoRIAAIDOhEoAAAA6EyoBAADoTKgEAACgM6ESAACAzoRKAAAAOhMqAQAA6EyoBAAAoDOhEgAAgM6ESgAAADoTKgEAAOhMqAQAAKAzoRIAAIDOhEoAAAA6EyoBAADoTKgEAACgM6ESAACAzoRKAAAAOhMqAQAA6EyoBAAAoDOhEgAAgM6ESgAAADoTKgEAAOhMqAQAAKAzoRIAAIDOhEoAAAA6EyoBAADoTKgEAACgM6ESAACAzoRKAAAAOhMqAQAA6EyoBAAAoDOhEgAAgM6ESgAAADoTKgEAAOhMqAQAAKAzoRIAAIDOhEoAAAA6EyoBAADoTKgEAACgM6ESAACAzoRKAAAAOhMqAQAA6EyoBAAAoDOhEgAAgM6ESgAAADoTKgEAAOhMqAQAAKAzoRIAAIDOhEoAAAA6EyoBAADoTKgEAACgM6ESAACAzoRKAAAAOhMqAQAA6GyPDpVVdVRVfaCqPr6rawEAAJiLZj1UVtVwVX2rqj7T59jhVfW/q+qWqrqpql63nee6tKruqaobJ7WfVlW3VtXtVfWm8fbW2vdba+duzzkBAAD2ZDtjpvJ1SW6Z4thIkj9qrT05ya8m+YOqOnZih6o6uKr2ndR2zBTjfTDJaZP6Did5X5LnJTk2ye9MPgcAAADdzGqorKrlSV6Q5JJ+x1trd7XWbuhtP5Sx8HnYpG7PSvKpqlrYG/NVSd49xXhfTnLfpOZfSXJ7b1ZyU5Irkpze7R0BAAAw0WzPVL4ryZ8kGd1Wx6o6IslTk3x9Yntr7WNJPpfkiqp6WZJXJnnJDGo4LMmPJuyv7rWlqpZV1UVJnlpVb+5T04uq6uJ169bN4HQAAAB7jlkLlVX1wiT3tNauH6DvPkk+keT1rbUHJx9vrb0jyYYkf5vkxa21h2dSSp+21ht3bWvtvNba0a21v+xz3k+31l69ZMmSGZwOAABgzzGbM5XPTPLiqrozY0tOn11Vfz+5U1XNz1ig/Ehr7X/1G6iqfi3JcUk+meSCGdaxOsnhE/aXJ/nxDMcAAACgj1kLla21N7fWlrfWjkjy0iRfaq2dPbFPVVWSDyS5pbX2zn7jVNVTk7w/Y9dBnpPkgKr68xmU8s0kP19VR1bVgl4tV834DQEAAPAYu+R7KqvqH6rqCRmbzfy/MzaLuar3eP6k7ouTnNla+15rbTTJK5L8YIpxL09yXZInVdXqqjq3tTaS5DVJrs7YjYCubK3dNEtvDQAAYI9SrbVdXcNub8WKFW3lypW7ugwAAIBdoqqub62t6Hdsl8xUAgAA8PggVAIAANCZUAkAAEBnQiUAAACdCZUAAAB0JlQCAADQmVAJAABAZ0IlAAAAnQmVAAAAdCZUAgAA0JlQCQAAQGdCJQAAAJ0JlQAAAHQmVAIAANCZUAkAAEBnQiUAAACdCZUAAAB0JlQCAADQmVAJAABAZ0IlAAAAnQmVAAAAdCZUAgAA0JlQCQAAQGdCJQAAAJ0JlQAAAHQmVAIAANCZUAkAAEBnQiUAAACdTRsqq2q4qv5wZxUDAADA3DJtqGytbU5y+k6qBQAAgDlm3gB9rq2q9yb5aJJHxhtbazfMWlUAAADMCYOEymf0nv9sQltL8uwdXw4AAABzyTZDZWvt13dGIQAAAMw927z7a1Utqap3VtXK3uO/VdWSnVEcAAAAu7dBvlLk0iQPJXlJ7/FgkstmsygAAADmhkGuqTy6tfbbE/bfVlWrZqsgAAAA5o5BZirXV9XJ4ztV9cwk62evJAAAAOaKQWYqz0vy4QnXUd6f5BWzVxIAAABzxbShsqqGkjyptXZCVe2XJK21B3dKZQAAAOz2pl3+2lobTfKa3vaDAiUAAAATDXJN5Req6vyqOryqDhh/zHplAAAA7PYGuabylb3nP5jQ1pIctePLAQAAYC4Z5JrKs1tr1+6kegAAAJhDBrmm8q92Ui0AAADMMYNcU/n5qvrtqqpZrwYAAIA5ZZBrKt+QZO8kI1W1IUklaa21/Wa1MgAAAHZ72wyVrbV9d0YhAAAAzD1TLn+tqrMnbD9z0rHXzGZRAAAAzA3TXVP5hgnb75l07JUBAABgjzddqKwptvvtAwAAsAeaLlS2Kbb77QMAALAHmu5GPb9YVd/J2Kzk0b3t9PaPmvXKAAAA2O1NFyqfvNOqAAAAYE6aMlS21n6wMwsBAABg7pnumkoAAACYllAJAABAZzMKlVW1f1UdP1vFAAAAMLdsM1RW1T9W1X5VdUCSbye5rKreOfulAQAAsLsbZKZySWvtwSS/leSy1tovJ3nu7JYFAADAXDBIqJxXVT+X5CVJPjPL9QAAADCHDBIq/yzJ1Um+11r7ZlUdleS22S0LAACAuWDK76kc11r7WJKPTdj/fpLfns2iAAAAmBsGuVHPL1TVF6vqxt7+8VX1ltkvDQAAgN3dIMtf35/kzUkeTZLW2neSvHQ2iwIAAGBu2Oby1ySLW2vfqKqJbSOzVA8AAPA49+ijj2b16tXZsGHDri6FSRYuXJjly5dn/vz5A79mkFB5b1UdnaQlSVWdkeSubiUCAAB7utWrV2fffffNEUcckUmTV+xCrbWsXbs2q1evzpFHHjnw6wYJlX+Q5OIkv1hV/5rkjiQv61YmAACwp9uwYYNAuRuqqixbtixr1qyZ0eumDZVVNZRkRWvtuVW1d5Kh1tpD21EnAACAQLmb6vJzmfZGPa210SSv6W0/IlACAABz2dq1a3PiiSfmxBNPzKGHHprDDjtsy/6mTZsGGuOcc87JrbfeOm2f973vffnIRz6yI0rOySefnCc96Ulb6jzrrLN2yLg7yiDLX79QVecn+WiSR8YbW2v3zVpVAAAAs2DZsmVZtWpVkuStb31r9tlnn5x//vlb9WmtpbWWoaH+c3CXXXbZNs/zB3/wB9tf7AQf/ehHc+KJJ055fGRkJPPmzZtyf9DXdTHIq1/Ze574qbQkR23XmQEAAHYTt99+e37zN38zJ598cr7+9a/nM5/5TN72trflhhtuyPr163PWWWflT//0T5OMzRy+973vzXHHHZcDDzww5513Xj772c9m8eLF+dSnPpWDDz44b3nLW3LggQfm9a9/fU4++eScfPLJ+dKXvpR169blsssuyzOe8Yw88sgjefnLX57bb789xx57bG677bZccskl04bHic4+++wccsghueGGG/K0pz0tCxYsyJo1a/L9738/hx56aC6++OKcd955ueGGGzJ//vy8613vyimnnJJLLrkk11xzTR5++OFs3LgxX/jCF7brs9tmqGytDX7bHwAAgBl4/eden1U/WbVDxzzx0BPzrtPeNePX3Xzzzbnsssty0UUXJUkuvPDCHHDAARkZGcmv//qv54wzzsixxx671WvWrVuXZz3rWbnwwgvzhje8IZdeemne9KY3PWbs1lq+8Y1v5Kqrrsqf/dmf5XOf+1ze85735NBDD80nPvGJfPvb385JJ500ZW1nnXVWFi1alCQ57bTTcuGFFyZJvve97+WLX/xihoaG8pa3vCXf+ta38uUvfzkLFy7M29/+9ixYsCDf/e53c9NNN+X5z39+brvttiTJddddl1WrVmX//fef8ec02UDznFV1XJJjkywcb2utfXi7zw4AALCbOProo/O0pz1ty/7ll1+eD3zgAxkZGcmPf/zj3HzzzY8JlYsWLcrznve8JMkv//Iv5ytf+UrfsX/rt35rS58777wzSfLVr341b3zjG5MkJ5xwQp7ylKdMWdtUy1/PPPPMrZbpnn766Vm4cOGW8f/4j/84SfKUpzwlT3jCE3L77bcnSU499dQdEiiTAUJlVV2Q5N9lLFT+Q5LnJflqEqESAADYLl1mFGfL3nvvvWX7tttuy9/8zd/kG9/4RpYuXZqzzz47GzZseMxrFixYsGV7eHg4IyMjfcfea6+9HtOntbZDa568P934k1+3Paa9+2vPGUmek+QnrbVzkpyQZK8dVgEAAMBu5sEHH1l1vIgAACAASURBVMy+++6b/fbbL3fddVeuvvrqHX6Ok08+OVdeeWWS5Lvf/W5uvvnmHTr+KaecsuUOtLfcckvuuuuuHHPMMTv0HMlgy1/Xt9ZGq2qkqvZLck/cpAcAAHgcO+mkk3LsscfmuOOOy1FHHZVnPvOZO/wcr33ta/Pyl788xx9/fE466aQcd9xxWbJkSd++E6+pPOSQQwYKua997Wvz+7//+/mlX/qlzJ8/Px/+8Ie3mlndUWpbU65V9d+T/KckL03yR0keTrKqN2u5R1ixYkVbuXLlri4DAAAeF2655ZY8+clP3tVl7HIjIyMZGRnJwoULc9ttt+XUU0/Nbbfdtt1f8bG9+v18qur61tqKfv0Hufvr/9vbvKiqPpdkv9bad7a7UgAAgD3Yww8/nOc85zkZGRlJay1/93d/t8sDZReD3KjnlH5trbUvz05JAAAAj39Lly7N9ddfv6vL2G6DxOA/nrC9MMmvJLk+ybNnpSIAAADmjEGWv75o4n5VHZ7kHbNWEQAAAHPGIF8pMtnqJMft6EIAAACYewa5pvI9ScZvETuU5MQk357NogAAAJgbBrmmcuJ3aYwkuby1du0s1QMAADBr1q5dm+c85zlJkp/85CcZHh7OQQcdlCT5xje+MfD3OF566aV5/vOfn0MPPfQxx84+++xce+21W75zct99981XvvKVHfQOdj+DXFP5oZ1RCAAAwGxbtmxZVq1alSR561vfmn322Sfnn3/+jMe59NJLc9JJJ/UNlUny13/91/nN3/zNKV8/MjKy1deHTN4f9HW7g0GWv343P1v+utWhJK21dvwOrwoAAGAn+9CHPpT3ve992bRpU57xjGfkve99b0ZHR3POOedk1apVaa3l1a9+dQ455JCsWrUqZ511VhYtWjTwDOdb3vKWrFmzJt///vdz6KGH5lnPelauueaaPPzww9m4cWOuvvrqnH/++fn85z+fqsoFF1yQM844I9dcc00uvPDCHHjggbnpppvy3e9+dyd8GoMbJOJ+tvf8P3rPL0vy0yRmMAEAgO3z+tcnvZnDHebEE5N3vWtGL7nxxhvzyU9+Mv/8z/+cefPm5dWvfnWuuOKKHH300bn33nu3BLkHHnggS5cuzXve8568973vzYknnth3vD/8wz/MW9/61iTJ8ccfnw9/+MNJkm9961v58pe/nIULF+aSSy7Jddddl1WrVmX//ffPRz/60dx888359re/nTVr1uRpT3taTjnllCTJ1772tdx888154hOf2PFDmT2DhMpnttaeOWH/TVV1bWvtz2arKAAAgJ3pmmuuyTe/+c2sWLEiSbJ+/focfvjh+Y3f+I3ceuuted3rXpfnP//5OfXUUwcab6rlr6effnoWLly4Zf/UU0/N/vvvnyT56le/mt/93d/N8PBwDj300Jx88slZuXJlFixYkKc//em7ZaBMBguVe1fVya21ryZJVT0jyd6zW9bOUVVHJfnPSZa01s7Y1fUAAMAeZ4YzirOltZZXvvKV+S//5b885th3vvOdfPazn8273/3ufOITn8jFF1/c+Tx77733lPut9bvqsP/rdieDfE/luUneV1V3VtWdSf57klfu6EKqariqvlVVn9mOMS6tqnuq6sY+x06rqlur6vaqelOStNa+31o7d3vqBgAA5r7nPve5ufLKK3PvvfcmGbtL7A9/+MOsWbMmrbWceeaZedvb3pYbbrghydgdXR966KEdWsMpp5ySK664Ips3b87dd9+da6+9dsvM6e5skLu/Xp/khKraL0m11tbNUi2vS3JLkv0mH6iqg5Osb609NKHtmNba7ZO6fjDJe5N8eNLrh5O8L8m/T7I6yTer6qrW2s079B0AAABz0i/90i/lggsuyHOf+9yMjo5m/vz5ueiiizI8PJxzzz03rbVUVd7+9rcnSc4555z8h//wH6a8Uc/EayqT5Prrr99mDWeccUa+9rWv5YQTTkhV5Z3vfGcOPvjgHfo+Z0NNNcVaVS9K8p3W2g96+3+a5LeT/CDJ61prd+ywIqqWZ+zGP3+R5A2ttRdOOn5mkv8nyfNbaxuq6lVJ/q/W2vP7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\n",
"text/plain": [
"<Figure size 1080x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"data_st = np.loadtxt('../data/steel_price.csv', delimiter = ',', skiprows = 1)\n",
"Y_st= data_st[:,0]\n",
"C_st = data_st[:,1]\n",
"np.random.seed(103)\n",
"i_rand = np.random.randint(0,len(Y_st), size = len(Y_st))\n",
"train_per_st = .7\n",
"Y_st_train = Y_st[i_rand[:int(len(Y_st)*train_per_st)]]\n",
"C_st_train = C_st[i_rand[:int(len(Y_st)*train_per_st)]]\n",
"Y_st_test = Y_st[i_rand[int(len(Y_st)*train_per_st):]]\n",
"C_st_test = C_st[i_rand[int(len(Y_st)*train_per_st):]]\n",
"z = np.block([[Y_st_train**0]]).T\n",
"z_test = np.block([[Y_st_test**0]]).T\n",
"max_N = 30\n",
"SSE_train_st = np.zeros(max_N)\n",
"SSE_test_st = np.zeros(max_N)\n",
"for i in range(1,max_N):\n",
" z = np.hstack((z,Y_st_train.reshape(-1,1)**i))\n",
" z_test = np.hstack((z_test,Y_st_test.reshape(-1,1)**i))\n",
" A = np.linalg.solve(z.T@z,z.T@C_st_train)\n",
" st = np.std(C_st_train)\n",
" sr = np.std(C_st_train-z@A)\n",
" r2 = 1-sr/st\n",
" SSE_train_st[i] = np.sum((C_st_train-z@A)**2)/len(C_st_train)\n",
" SSE_test_st[i] = np.sum((C_st_test-z_test@A)**2)/len(C_st_test)\n",
"fig = plt.figure(figsize = (15,10))\n",
"plt.semilogy(np.arange(2,max_N),SSE_train_st[2:],label='Training Error',color='green')\n",
"plt.semilogy(np.arange(2,max_N),SSE_test_st[2:],label='Test Error',color='red')\n",
"plt.xlabel('Polynomial Order')\n",
"plt.ylabel('Sum of Squares Error')\n",
"plt.legend()\n",
"plt.title('Steel Error vs Order');"
]
},
{
"cell_type": "code",
"execution_count": 123,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Predicted future cost of aluminum: 3184.478041718633 ($/tonne)\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1080x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"Y_al_pred = np.append(Y_al, 2025)\n",
"Z_al = np.block([[Y_al], [Y_al**1]]).T\n",
"A_al = np.linalg.solve(Z_al.T@Z_al, Z_al.T@C_al)\n",
"Z_al_pred = np.block([[Y_al_pred], [Y_al_pred**1]]).T\n",
"fig = plt.figure(figsize = (15,10))\n",
"plt.plot(Y_al, Z_al@A_al, '-o', label = 'Initial Fit',color='purple')\n",
"plt.plot(Y_al_pred, Z_al_pred@A_al, label = 'Prediction from Fit',color='green')\n",
"plt.title('Prediction of Aluminum Cost in 2025')\n",
"plt.xlabel('Year')\n",
"plt.ylabel('Cost ($/tonne)')\n",
"plt.legend(loc = 'best')\n",
"print('Predicted future cost of aluminum:', (Z_al_pred@A_al)[-1], '($/tonne)')"
]
},
{
"cell_type": "code",
"execution_count": 124,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Based on this data, I would not change my answer to 3b, as the cost of aluminum is rising. For no real reason do I see the cost of steel increasing at a rate faster than that of Aluminum.\n"
]
}
],
"source": [
"print('Based on this data, I would not change my answer to 3b, as the cost of aluminum is rising. For no real reason do I see the cost of steel increasing at a rate faster than that of 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
}