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
executable file 2107 lines (2107 sloc) 128 KB
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Computational Mechanics Project #02 - Create specifications for a projectile robot\n",
"\n",
"On the first day of class, we threw $2\"\\times~2\"$ dampened paper (spitballs) at a target on the whiteboard. Now, we are going to analyze the accuracy of the class with some cool Python tools and design a robot that has the same accuracy and precision as the class, but we will have the robot move farther away from the target and use a simpler projectile i.e. a tennis ball so we don't need to worry about knuckle-ball physics. \n",
"\n",
"The goal of this project is to determine the precision of necessary components for a robot that can reproduce the class throwing distibution. We have generated pseudo random numbers using `numpy.random`, but the class target practice is an example of truly random distributions. If we repeated the exercise, there is a vanishingly small probability that we would hit the same points on the target, and there are no deterministic models that could take into account all of the factors that affected each hit on the board. \n",
"\n",
"<img src=\"../images/robot_design.png\" style=\"height: 250px;\"/>\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, we ask ourselves some questions:\n",
"\n",
"1. How do we quantify the class accuracy and precision?\n",
"\n",
"2. If we design a robot, what design components can we control?\n",
"\n",
"3. How can we relate the controlled components to the class accuracy, and specify the component precision?\n",
"\n",
"The first question, we have some experience from our work in [02_Seeing_Stats](../notebooks/02_Seeing_Stats.ipynb). We can define the mean, standard deviation, measure the first, second, and third quartiles, etc. \n",
"\n",
"The second question is a physical question. We cannot control the placement of the robot or the target those are chosen for us. We cannot control temperature, mechanical vibrations, etc. We *can* control the desired initial velocity. The initial velocity will have some speed and direction, and both will be subject to random noise. Once the speed and direction are set, the location on the target is determined by kinematic equations for an object in freefall, as such\n",
"\n",
"$x_{impact} = \\frac{v_x}{v_y}d + x(0)~~~~~~~~~~~~~~~~~~~~(1.a)$\n",
"\n",
"$z_{impact} = d\\left(\\frac{v_z(0)}{v_y}-\\frac{g}{2v_y^2}d\\right)+ z(0)~~~~~(1.b)$.\n",
"\n",
"Where the location of impact is at a $y$-distance of $d$ at a point on the target with coordinates $(x_{impact},~z_{impact})$, and the initial velocity is $\\bar{v}=v_x\\hat{i}+v_y\\hat{j}+v_z(0)\\hat{k}$, the object is released at an initial location $\\bar{r}(0)=x(0)\\hat{i}+0\\hat{j}+z(0)\\hat{k}$, and the only acceleration is due to gravity, $\\bar{a}=-g\\hat{k}$. Equation (1) becomes much easier to evaluate if we assume that $v_x=0$, resulting in an evalution of the accuracy of the height of the impact, $z_{impact}$, as such\n",
"\n",
"$x_{impact} = x(0)~~~~~~~~~~~~~~~~~~~~(2.a)$\n",
"\n",
"$z_{impact} = \\frac{d}{\\cos{\\theta}}\\left(\\sin{\\theta}-\\frac{g}{2v_0^2\\cos{\\theta}}d\\right)+ z(0)~~~~~(2.b)$.\n",
"\n",
"Where $\\theta$ is the angle of the initial velocity and $v_0$ is the initial speed. Equation (2) restricts the analysis to height accuracy. You can incorporate the 2D impact analysis if you finish the 1D analysis. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The third question, is how we can relate equation (2) to the measured points of impact? For this, we can use Monte Carlo methods *(There are other methods, but Monte Carlo is one of the most straight-forward)*. Our Monte Carlo approach is as such, if we have a desired initial speed, $v_0$, and desired angle, $\\theta$, we can propagate the uncertainty of our actual speeds and angles into the $z_{impact}$ locations. Then, we can choose distributions in speed and angles that match the distributions in $z_{impact}$ locations. Here are the steps:\n",
"\n",
"1. Generate random $\\theta_i$ and $v_{0~i}$ variables\n",
"\n",
"2. Plug into eqn 2 for random $z_{impact~i}$ locations\n",
"\n",
"3. Compare to our measured $z_{impact}$ location statistics\n",
"\n",
"4. Repeat 1-3 until the predicted uncertainty matches the desired uncertainty, we can use a number of comparison metrics:\n",
" \n",
" - standard deviation\n",
" \n",
" - first, second, and third quartiles\n",
" \n",
" - visually, with box plots and histograms"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Project Deliverables\n",
"\n",
"1. Statistical analysis of class accuracy and precision (x- and z-locations) data is in the csv file [../data/target_data.csv](../data/target_data.csv) _Note: if you want to see how I turned the images into data check out the jupyter notebook [process_target_practice](./process_target_practice.ipynb)\n",
"\n",
"2. A Monte Carlo model to generate impact heights based upon uncertainty in $\\theta_0$ and $v_0$. \n",
"\n",
"3. The precision required to recreate the class accuracy and precision with a robot. \n",
"**You must show some validation of your work**\n",
"\n",
"4. [BONUS] Repeat 2-3 taking into account the variation in $x_{impact}$ due to misalignment. \n",
"\n",
"Given constants and constraints:\n",
"\n",
"- $d=$3 m, distance to target\n",
"\n",
"- $g=$9.81 m/s$^2$, acceleration due to gravity\n",
"\n",
"- $z(0)=$0.3 m, the initial height is 0.3 m above the bull's eye\n",
"\n",
"- 4 m/s$<v_0<$12 m/s, the initial velocity is always higher than 9 mph and less than 27 mph"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import pandas as pd\n",
"\n",
"#Import rcParams to set font styles\n",
"from matplotlib import rcParams\n",
"\n",
"#Set font style and size \n",
"rcParams['font.family'] = 'sans'\n",
"rcParams['font.size'] = 16\n",
"rcParams['lines.linewidth'] = 3"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"throw #, x position (m), y position (m),picture x position (pixel), picture y position (pixel),target x position (pixel), target y position (pixel), image #\r\n",
"0,-0.4664032892922447,-0.3040002885922146,1260.8551136363637,990.5994318181815,2055.1692559776675,1508.3310474572158,1\r\n",
"1,-0.20697765114141842,-0.4481256431204515,1702.6732954545455,745.144886363636,2055.1692559776675,1508.3310474572158,1\r\n",
"2,-0.09167736751882886,-0.45773400008900067,1899.036931818182,728.7812499999995,2055.1692559776675,1508.3310474572158,1\r\n",
"3,0.1533357351791739,-0.5105799634160209,2316.3096590909095,638.7812499999995,2055.1692559776675,1508.3310474572158,1\r\n",
"4,0.3647195884872546,-0.5970551761329631,2676.3096590909095,491.50852272727207,2055.1692559776675,1508.3310474572158,1\r\n",
"5,-0.1205024384244762,-0.22713343284382184,1849.946022727273,1121.508522727272,2055.1692559776675,1508.3310474572158,1\r\n",
"6,-0.09167736751882886,-0.25595850374946916,1899.036931818182,1072.417613636363,2055.1692559776675,1508.3310474572158,1\r\n",
"7,-0.09648154600310332,-0.17909164800107613,1890.855113636364,1203.326704545454,2055.1692559776675,1508.3310474572158,1\r\n",
"8,-0.19256511568859477,-0.04457465044138831,1727.21875,1432.4176136363633,2055.1692559776675,1508.3310474572158,1\r\n"
]
}
],
"source": [
"#Start of deliverable 1\n",
"!head \"../data/target_data.csv\""
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"target = pd.read_csv('../data/target_data.csv')"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"pandas.core.frame.DataFrame"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(target)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>throw #</th>\n",
" <th>x position (m)</th>\n",
" <th>y position (m)</th>\n",
" <th>picture x position (pixel)</th>\n",
" <th>picture y position (pixel)</th>\n",
" <th>target x position (pixel)</th>\n",
" <th>target y position (pixel)</th>\n",
" <th>image #</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>-0.466403</td>\n",
" <td>-0.304000</td>\n",
" <td>1260.855114</td>\n",
" <td>990.599432</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>-0.206978</td>\n",
" <td>-0.448126</td>\n",
" <td>1702.673295</td>\n",
" <td>745.144886</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2</td>\n",
" <td>-0.091677</td>\n",
" <td>-0.457734</td>\n",
" <td>1899.036932</td>\n",
" <td>728.781250</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3</td>\n",
" <td>0.153336</td>\n",
" <td>-0.510580</td>\n",
" <td>2316.309659</td>\n",
" <td>638.781250</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>4</td>\n",
" <td>0.364720</td>\n",
" <td>-0.597055</td>\n",
" <td>2676.309659</td>\n",
" <td>491.508523</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>5</td>\n",
" <td>-0.120502</td>\n",
" <td>-0.227133</td>\n",
" <td>1849.946023</td>\n",
" <td>1121.508523</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>6</td>\n",
" <td>-0.091677</td>\n",
" <td>-0.255959</td>\n",
" <td>1899.036932</td>\n",
" <td>1072.417614</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>7</td>\n",
" <td>-0.096482</td>\n",
" <td>-0.179092</td>\n",
" <td>1890.855114</td>\n",
" <td>1203.326705</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>8</td>\n",
" <td>-0.192565</td>\n",
" <td>-0.044575</td>\n",
" <td>1727.218750</td>\n",
" <td>1432.417614</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>9</td>\n",
" <td>-0.082069</td>\n",
" <td>-0.025358</td>\n",
" <td>1915.400568</td>\n",
" <td>1465.144886</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>10</td>\n",
" <td>0.162944</td>\n",
" <td>-0.313609</td>\n",
" <td>2332.673295</td>\n",
" <td>974.235795</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>11</td>\n",
" <td>0.249419</td>\n",
" <td>-0.332825</td>\n",
" <td>2479.946023</td>\n",
" <td>941.508523</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>12</td>\n",
" <td>0.441586</td>\n",
" <td>-0.371259</td>\n",
" <td>2807.218750</td>\n",
" <td>876.053977</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>13</td>\n",
" <td>0.038035</td>\n",
" <td>-0.006141</td>\n",
" <td>2119.946023</td>\n",
" <td>1497.872159</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>14</td>\n",
" <td>0.076469</td>\n",
" <td>-0.058987</td>\n",
" <td>2185.400568</td>\n",
" <td>1407.872159</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>15</td>\n",
" <td>0.134119</td>\n",
" <td>-0.073400</td>\n",
" <td>2283.582386</td>\n",
" <td>1383.326705</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>16</td>\n",
" <td>0.134119</td>\n",
" <td>-0.159875</td>\n",
" <td>2283.582386</td>\n",
" <td>1236.053977</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>17</td>\n",
" <td>0.162944</td>\n",
" <td>-0.020554</td>\n",
" <td>2332.673295</td>\n",
" <td>1473.326705</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>18</td>\n",
" <td>0.278244</td>\n",
" <td>-0.073400</td>\n",
" <td>2529.036932</td>\n",
" <td>1383.326705</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>19</td>\n",
" <td>0.302265</td>\n",
" <td>-0.097421</td>\n",
" <td>2569.946023</td>\n",
" <td>1342.417614</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>20</td>\n",
" <td>0.210986</td>\n",
" <td>0.094747</td>\n",
" <td>2414.491477</td>\n",
" <td>1669.690341</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>21</td>\n",
" <td>0.331090</td>\n",
" <td>0.157201</td>\n",
" <td>2619.036932</td>\n",
" <td>1776.053977</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>22</td>\n",
" <td>0.114902</td>\n",
" <td>0.224459</td>\n",
" <td>2250.855114</td>\n",
" <td>1890.599432</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>23</td>\n",
" <td>0.134119</td>\n",
" <td>0.339760</td>\n",
" <td>2283.582386</td>\n",
" <td>2086.963068</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>24</td>\n",
" <td>-0.154132</td>\n",
" <td>0.186026</td>\n",
" <td>1792.673295</td>\n",
" <td>1825.144886</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>25</td>\n",
" <td>-0.173348</td>\n",
" <td>0.157201</td>\n",
" <td>1759.946023</td>\n",
" <td>1776.053977</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>26</td>\n",
" <td>-0.307865</td>\n",
" <td>0.142788</td>\n",
" <td>1530.855114</td>\n",
" <td>1751.508523</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>27</td>\n",
" <td>-0.312670</td>\n",
" <td>0.373389</td>\n",
" <td>1522.673295</td>\n",
" <td>2144.235795</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>28</td>\n",
" <td>-0.490424</td>\n",
" <td>0.397410</td>\n",
" <td>1219.946023</td>\n",
" <td>2185.144886</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>29</td>\n",
" <td>-0.711416</td>\n",
" <td>0.334955</td>\n",
" <td>843.582386</td>\n",
" <td>2078.781250</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>30</td>\n",
" <td>-0.291312</td>\n",
" <td>-0.127198</td>\n",
" <td>1412.218750</td>\n",
" <td>1254.974432</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>31</td>\n",
" <td>-0.126406</td>\n",
" <td>-0.303884</td>\n",
" <td>1755.855114</td>\n",
" <td>886.792614</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>32</td>\n",
" <td>-0.197080</td>\n",
" <td>-0.158609</td>\n",
" <td>1608.582386</td>\n",
" <td>1189.519886</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>33</td>\n",
" <td>-0.232417</td>\n",
" <td>-0.076155</td>\n",
" <td>1534.946023</td>\n",
" <td>1361.338068</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34</th>\n",
" <td>34</td>\n",
" <td>-0.118553</td>\n",
" <td>-0.044744</td>\n",
" <td>1772.218750</td>\n",
" <td>1426.792614</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35</th>\n",
" <td>35</td>\n",
" <td>-0.071437</td>\n",
" <td>-0.107566</td>\n",
" <td>1870.400568</td>\n",
" <td>1295.883523</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>36</th>\n",
" <td>36</td>\n",
" <td>-0.043952</td>\n",
" <td>-0.190020</td>\n",
" <td>1927.673295</td>\n",
" <td>1124.065341</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37</th>\n",
" <td>37</td>\n",
" <td>0.011017</td>\n",
" <td>-0.146830</td>\n",
" <td>2042.218750</td>\n",
" <td>1214.065341</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>38</th>\n",
" <td>38</td>\n",
" <td>0.038501</td>\n",
" <td>-0.315663</td>\n",
" <td>2099.491477</td>\n",
" <td>862.247159</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>39</th>\n",
" <td>39</td>\n",
" <td>0.093470</td>\n",
" <td>-0.131124</td>\n",
" <td>2214.036932</td>\n",
" <td>1246.792614</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>40</th>\n",
" <td>40</td>\n",
" <td>0.168071</td>\n",
" <td>-0.170388</td>\n",
" <td>2369.491477</td>\n",
" <td>1164.974432</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41</th>\n",
" <td>41</td>\n",
" <td>0.226966</td>\n",
" <td>-0.244988</td>\n",
" <td>2492.218750</td>\n",
" <td>1009.519886</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>42</th>\n",
" <td>42</td>\n",
" <td>0.603896</td>\n",
" <td>-0.319589</td>\n",
" <td>3277.673295</td>\n",
" <td>854.065341</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>43</th>\n",
" <td>43</td>\n",
" <td>0.305493</td>\n",
" <td>-0.013334</td>\n",
" <td>2655.855114</td>\n",
" <td>1492.247159</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>44</th>\n",
" <td>44</td>\n",
" <td>0.195556</td>\n",
" <td>-0.068303</td>\n",
" <td>2426.764205</td>\n",
" <td>1377.701705</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>45</th>\n",
" <td>45</td>\n",
" <td>0.117028</td>\n",
" <td>-0.036892</td>\n",
" <td>2263.127841</td>\n",
" <td>1443.156250</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46</th>\n",
" <td>46</td>\n",
" <td>0.018870</td>\n",
" <td>0.088752</td>\n",
" <td>2058.582386</td>\n",
" <td>1704.974432</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>47</th>\n",
" <td>47</td>\n",
" <td>0.164145</td>\n",
" <td>0.100531</td>\n",
" <td>2361.309659</td>\n",
" <td>1729.519886</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>48</th>\n",
" <td>48</td>\n",
" <td>0.289788</td>\n",
" <td>0.167279</td>\n",
" <td>2623.127841</td>\n",
" <td>1868.610795</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>49</th>\n",
" <td>49</td>\n",
" <td>0.525369</td>\n",
" <td>0.069120</td>\n",
" <td>3114.036932</td>\n",
" <td>1664.065341</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50</th>\n",
" <td>50</td>\n",
" <td>-0.126406</td>\n",
" <td>0.363596</td>\n",
" <td>1755.855114</td>\n",
" <td>2277.701705</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>51</th>\n",
" <td>51</td>\n",
" <td>-0.244196</td>\n",
" <td>0.402860</td>\n",
" <td>1510.400568</td>\n",
" <td>2359.519886</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>52</th>\n",
" <td>52</td>\n",
" <td>-0.212785</td>\n",
" <td>0.563840</td>\n",
" <td>1575.855114</td>\n",
" <td>2694.974432</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53</th>\n",
" <td>53</td>\n",
" <td>-0.232417</td>\n",
" <td>0.288996</td>\n",
" <td>1534.946023</td>\n",
" <td>2122.247159</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" throw # x position (m) y position (m) picture x position (pixel) \\\n",
"0 0 -0.466403 -0.304000 1260.855114 \n",
"1 1 -0.206978 -0.448126 1702.673295 \n",
"2 2 -0.091677 -0.457734 1899.036932 \n",
"3 3 0.153336 -0.510580 2316.309659 \n",
"4 4 0.364720 -0.597055 2676.309659 \n",
"5 5 -0.120502 -0.227133 1849.946023 \n",
"6 6 -0.091677 -0.255959 1899.036932 \n",
"7 7 -0.096482 -0.179092 1890.855114 \n",
"8 8 -0.192565 -0.044575 1727.218750 \n",
"9 9 -0.082069 -0.025358 1915.400568 \n",
"10 10 0.162944 -0.313609 2332.673295 \n",
"11 11 0.249419 -0.332825 2479.946023 \n",
"12 12 0.441586 -0.371259 2807.218750 \n",
"13 13 0.038035 -0.006141 2119.946023 \n",
"14 14 0.076469 -0.058987 2185.400568 \n",
"15 15 0.134119 -0.073400 2283.582386 \n",
"16 16 0.134119 -0.159875 2283.582386 \n",
"17 17 0.162944 -0.020554 2332.673295 \n",
"18 18 0.278244 -0.073400 2529.036932 \n",
"19 19 0.302265 -0.097421 2569.946023 \n",
"20 20 0.210986 0.094747 2414.491477 \n",
"21 21 0.331090 0.157201 2619.036932 \n",
"22 22 0.114902 0.224459 2250.855114 \n",
"23 23 0.134119 0.339760 2283.582386 \n",
"24 24 -0.154132 0.186026 1792.673295 \n",
"25 25 -0.173348 0.157201 1759.946023 \n",
"26 26 -0.307865 0.142788 1530.855114 \n",
"27 27 -0.312670 0.373389 1522.673295 \n",
"28 28 -0.490424 0.397410 1219.946023 \n",
"29 29 -0.711416 0.334955 843.582386 \n",
"30 30 -0.291312 -0.127198 1412.218750 \n",
"31 31 -0.126406 -0.303884 1755.855114 \n",
"32 32 -0.197080 -0.158609 1608.582386 \n",
"33 33 -0.232417 -0.076155 1534.946023 \n",
"34 34 -0.118553 -0.044744 1772.218750 \n",
"35 35 -0.071437 -0.107566 1870.400568 \n",
"36 36 -0.043952 -0.190020 1927.673295 \n",
"37 37 0.011017 -0.146830 2042.218750 \n",
"38 38 0.038501 -0.315663 2099.491477 \n",
"39 39 0.093470 -0.131124 2214.036932 \n",
"40 40 0.168071 -0.170388 2369.491477 \n",
"41 41 0.226966 -0.244988 2492.218750 \n",
"42 42 0.603896 -0.319589 3277.673295 \n",
"43 43 0.305493 -0.013334 2655.855114 \n",
"44 44 0.195556 -0.068303 2426.764205 \n",
"45 45 0.117028 -0.036892 2263.127841 \n",
"46 46 0.018870 0.088752 2058.582386 \n",
"47 47 0.164145 0.100531 2361.309659 \n",
"48 48 0.289788 0.167279 2623.127841 \n",
"49 49 0.525369 0.069120 3114.036932 \n",
"50 50 -0.126406 0.363596 1755.855114 \n",
"51 51 -0.244196 0.402860 1510.400568 \n",
"52 52 -0.212785 0.563840 1575.855114 \n",
"53 53 -0.232417 0.288996 1534.946023 \n",
"\n",
" picture y position (pixel) target x position (pixel) \\\n",
"0 990.599432 2055.169256 \n",
"1 745.144886 2055.169256 \n",
"2 728.781250 2055.169256 \n",
"3 638.781250 2055.169256 \n",
"4 491.508523 2055.169256 \n",
"5 1121.508523 2055.169256 \n",
"6 1072.417614 2055.169256 \n",
"7 1203.326705 2055.169256 \n",
"8 1432.417614 2055.169256 \n",
"9 1465.144886 2055.169256 \n",
"10 974.235795 2055.169256 \n",
"11 941.508523 2055.169256 \n",
"12 876.053977 2055.169256 \n",
"13 1497.872159 2055.169256 \n",
"14 1407.872159 2055.169256 \n",
"15 1383.326705 2055.169256 \n",
"16 1236.053977 2055.169256 \n",
"17 1473.326705 2055.169256 \n",
"18 1383.326705 2055.169256 \n",
"19 1342.417614 2055.169256 \n",
"20 1669.690341 2055.169256 \n",
"21 1776.053977 2055.169256 \n",
"22 1890.599432 2055.169256 \n",
"23 2086.963068 2055.169256 \n",
"24 1825.144886 2055.169256 \n",
"25 1776.053977 2055.169256 \n",
"26 1751.508523 2055.169256 \n",
"27 2144.235795 2055.169256 \n",
"28 2185.144886 2055.169256 \n",
"29 2078.781250 2055.169256 \n",
"30 1254.974432 2019.261556 \n",
"31 886.792614 2019.261556 \n",
"32 1189.519886 2019.261556 \n",
"33 1361.338068 2019.261556 \n",
"34 1426.792614 2019.261556 \n",
"35 1295.883523 2019.261556 \n",
"36 1124.065341 2019.261556 \n",
"37 1214.065341 2019.261556 \n",
"38 862.247159 2019.261556 \n",
"39 1246.792614 2019.261556 \n",
"40 1164.974432 2019.261556 \n",
"41 1009.519886 2019.261556 \n",
"42 854.065341 2019.261556 \n",
"43 1492.247159 2019.261556 \n",
"44 1377.701705 2019.261556 \n",
"45 1443.156250 2019.261556 \n",
"46 1704.974432 2019.261556 \n",
"47 1729.519886 2019.261556 \n",
"48 1868.610795 2019.261556 \n",
"49 1664.065341 2019.261556 \n",
"50 2277.701705 2019.261556 \n",
"51 2359.519886 2019.261556 \n",
"52 2694.974432 2019.261556 \n",
"53 2122.247159 2019.261556 \n",
"\n",
" target y position (pixel) image # \n",
"0 1508.331047 1 \n",
"1 1508.331047 1 \n",
"2 1508.331047 1 \n",
"3 1508.331047 1 \n",
"4 1508.331047 1 \n",
"5 1508.331047 1 \n",
"6 1508.331047 1 \n",
"7 1508.331047 1 \n",
"8 1508.331047 1 \n",
"9 1508.331047 1 \n",
"10 1508.331047 1 \n",
"11 1508.331047 1 \n",
"12 1508.331047 1 \n",
"13 1508.331047 1 \n",
"14 1508.331047 1 \n",
"15 1508.331047 1 \n",
"16 1508.331047 1 \n",
"17 1508.331047 1 \n",
"18 1508.331047 1 \n",
"19 1508.331047 1 \n",
"20 1508.331047 1 \n",
"21 1508.331047 1 \n",
"22 1508.331047 1 \n",
"23 1508.331047 1 \n",
"24 1508.331047 1 \n",
"25 1508.331047 1 \n",
"26 1508.331047 1 \n",
"27 1508.331047 1 \n",
"28 1508.331047 1 \n",
"29 1508.331047 1 \n",
"30 1520.031972 2 \n",
"31 1520.031972 2 \n",
"32 1520.031972 2 \n",
"33 1520.031972 2 \n",
"34 1520.031972 2 \n",
"35 1520.031972 2 \n",
"36 1520.031972 2 \n",
"37 1520.031972 2 \n",
"38 1520.031972 2 \n",
"39 1520.031972 2 \n",
"40 1520.031972 2 \n",
"41 1520.031972 2 \n",
"42 1520.031972 2 \n",
"43 1520.031972 2 \n",
"44 1520.031972 2 \n",
"45 1520.031972 2 \n",
"46 1520.031972 2 \n",
"47 1520.031972 2 \n",
"48 1520.031972 2 \n",
"49 1520.031972 2 \n",
"50 1520.031972 2 \n",
"51 1520.031972 2 \n",
"52 1520.031972 2 \n",
"53 1520.031972 2 "
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"target"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['throw #', ' x position (m)', ' y position (m)',\n",
" 'picture x position (pixel)', ' picture y position (pixel)',\n",
" 'target x position (pixel)', ' target y position (pixel)', ' image #'],\n",
" dtype='object')"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"target.columns"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"x_position = target[' x position (m)']\n",
"x_clean = x_position.dropna()\n",
"x = x_clean.values"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"y_position = target[' y position (m)']\n",
"y_clean = y_position.dropna()\n",
"y = y_clean.values"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The variance of the x positions is 0.0673809499696575\n"
]
}
],
"source": [
"var_x = np.var(x, ddof=1)\n",
"print('The variance of the x positions is',var_x)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The variance of the y positions is 0.06617973806033156\n"
]
}
],
"source": [
"var_y = np.var(y, ddof=1)\n",
"print('The variance of the y positions is',var_y)"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The standard deviation of the x positions is 0.25716367278418045\n"
]
}
],
"source": [
"std_x= np.std(x)\n",
"print('The standard deviation of the x positions is', std_x)"
]
},
{
"cell_type": "code",
"execution_count": 261,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The standard deviation of the y positions is 0.2548611138551949\n"
]
}
],
"source": [
"std_y= np.std(y)\n",
"print('The standard deviation of the y positions is', std_y)"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The median value of the x positions is 0.028452517775170515\n"
]
}
],
"source": [
"x_median=np.median(x)\n",
"print('The median value of the x positions is', x_median)"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The median value of the y positions is -0.070851135369002\n"
]
}
],
"source": [
"y_median=np.median(y)\n",
"print('The median value of the y positions is', y_median)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The mean value of the x positions is 0.01207963411779779\n"
]
}
],
"source": [
"mean_x= np.mean(x)\n",
"print('The mean value of the x positions is', mean_x)"
]
},
{
"cell_type": "code",
"execution_count": 260,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The mean value of the y positions is -0.047397370492807414\n"
]
}
],
"source": [
"mean_y= np.mean(y)\n",
"print('The mean value of the y positions is', mean_y)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"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": [
"plt.boxplot(x, labels=['x position (m)']);"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The first quartile for x position is -0.16854422326722185\n",
"The second quartile for x position is 0.028452517775170515\n",
"The third quartile for x position is 0.1670894539891312\n"
]
}
],
"source": [
"Q1_x = np.percentile(x, q=25)\n",
"Q2_x = np.percentile(x, q=50)\n",
"Q3_x = np.percentile(x, q=75)\n",
"\n",
"print('The first quartile for x position is {}'.format(Q1_x))\n",
"print('The second quartile for x position is {}'.format(Q2_x))\n",
"print('The third quartile for x position is {}'.format(Q3_x))"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The top value of x position is 0.6705399698736608\n",
"The bottom value of x position is -0.6719947391517515\n"
]
}
],
"source": [
"IQR_x=Q3_x-Q1_x\n",
"top_x=Q3_x + 1.5 * IQR_x\n",
"bottom_x=Q1_x - 1.5 * IQR_x\n",
"print('The top value of x position is', top_x)\n",
"print('The bottom value of x position is', bottom_x)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"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": [
"plt.boxplot(y, labels=['y position (m)']);"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The first quartile for y position is -0.21785495681409592\n",
"The second quartile for y position is -0.070851135369002\n",
"The third quartile for y position is 0.13222390283592378\n"
]
}
],
"source": [
"Q1_y = np.percentile(y, q=25)\n",
"Q2_y = np.percentile(y, q=50)\n",
"Q3_y = np.percentile(y, q=75)\n",
"\n",
"print('The first quartile for y position is {}'.format(Q1_y))\n",
"print('The second quartile for y position is {}'.format(Q2_y))\n",
"print('The third quartile for y position is {}'.format(Q3_y))"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The top value of y position is 0.6573421923109534\n",
"The bottom value of y position is -0.7429732462891255\n"
]
}
],
"source": [
"IQR_y=Q3_y-Q1_y\n",
"top_y=Q3_y + 1.5 * IQR_y\n",
"bottom_y=Q1_y - 1.5 * IQR_y\n",
"print('The top value of y position is', top_y)\n",
"print('The bottom value of y position is', bottom_y)"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 576x576 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(8,8))\n",
"plt.scatter(x, y, color='#3498db') \n",
"plt.title('Scatter plot of x and y positions \\n')\n",
"plt.xlabel('x position')\n",
"plt.ylabel('y position')\n",
"plt.grid();"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0.55672992 0.49361558 0.46682454 0.53310763 0.69963938 0.25711949\n",
" 0.2718814 0.20342691 0.19765683 0.08589731 0.35341358 0.4159119\n",
" 0.57691566 0.03852804 0.09657628 0.15289026 0.20868135 0.1642353\n",
" 0.28776284 0.31757687 0.23128326 0.36651455 0.25215975 0.36527321\n",
" 0.24158274 0.23401234 0.33936648 0.48701285 0.63122928 0.78632591\n",
" 0.31787137 0.32912569 0.25297669 0.2445758 0.12671556 0.12912647\n",
" 0.19503642 0.14724236 0.3180022 0.16102875 0.23933212 0.33396569\n",
" 0.68324818 0.30578428 0.20714053 0.12270556 0.09073539 0.1924835\n",
" 0.33460314 0.52989662 0.38494247 0.47109224 0.60265551 0.37085874]\n"
]
}
],
"source": [
"distance=((x**2)+(y**2))**(1/2)\n",
"print(distance)\n",
"#Prints distance from the origin of each point using pythagorean theorem"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The average distance from the origin is 0.32230179111189294\n"
]
}
],
"source": [
"avg_distance=np.mean(distance)\n",
"print('The average distance from the origin is', avg_distance)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#End of deliverable 1"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#Start of deliverable 2"
]
},
{
"cell_type": "code",
"execution_count": 122,
"metadata": {},
"outputs": [],
"source": [
"import random \n",
"import math"
]
},
{
"cell_type": "code",
"execution_count": 744,
"metadata": {},
"outputs": [],
"source": [
"v_random=np.random.uniform(4,12,size = (1,10));\n",
"theta_random=np.random.uniform(20,60,size = (1,10));"
]
},
{
"cell_type": "code",
"execution_count": 745,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Random velocity values [[ 4.98606069 10.46478332 11.92475089 9.39680449 7.40964461 11.05090405\n",
" 9.79608519 4.36308867 8.14462804 10.3351158 ]]\n",
"Random theta values [[41.9329345 35.05878006 36.84013669 41.36328746 22.61763734 21.99359072\n",
" 32.68965716 47.67106347 40.41411746 39.46396074]]\n",
"The random y impact locations are [[ -2.29055889 1.41968606 -3.90501903 1.3621788 1.24601795\n",
" -0.05415706 4.73105925 -1.0519805 -1.86644367 -26.07918257]]\n"
]
}
],
"source": [
"def montecarlopi(N):\n",
" '''Create random velocities and theta values to calculate the value new impact heights\n",
" Arguments\n",
" ---------\n",
" N: number of random points to produce for velocities and theta\n",
" \n",
" Returns\n",
" -------\n",
" y_new: the best prediction of impact height using N points\n",
" '''\n",
" \n",
" \n",
" d=3 #distance to target (m)\n",
" g=9.81 #acceleration due to gravity (m/s**2)\n",
" z_0=0.3 #initial height above the bull's eye (m)\n",
" \n",
" sin=np.sin(theta_random)\n",
" cos=np.cos(theta_random)\n",
" c=d/cos\n",
" e=2*(v_random**2)*cos\n",
" \n",
" y_new=c*(sin-(g/e)*d)+z_0\n",
" return y_new\n",
"\n",
"print('Random velocity values', v_random)\n",
"print('Random theta values', theta_random)\n",
"new_heights=montecarlopi(10)\n",
"print('The random y impact locations are',new_heights)"
]
},
{
"cell_type": "code",
"execution_count": 746,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mean value for new impact height is -2.648839965484481\n",
"Actual mean impact height is -0.047397\n"
]
}
],
"source": [
"new_mean=np.mean(new_heights)\n",
"print('Mean value for new impact height is',new_mean)\n",
"print('Actual mean impact height is %f'%mean_y)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#End of deliverable 2"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#Start of deliverable 3\n",
"#The following tests are to determine the optimal value of N to use when running the monte carlo model. "
]
},
{
"cell_type": "code",
"execution_count": 321,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mean value for new impact height = -0.354128\n",
"Actual impact height is -0.047397\n",
"New standard deviation is 2.247828\n",
"The actual standard deviation of the y positions is 0.2548611138551949\n"
]
}
],
"source": [
"test_height_1=montecarlopi(10);\n",
"\n",
"print('Mean value for new impact height = %f'%np.mean(test_height_1))\n",
"print('Actual impact height is %f'%mean_y)\n",
"print('New standard deviation is %f'%np.std(test_height_1))\n",
"print('The actual standard deviation of the y positions is', std_y)"
]
},
{
"cell_type": "code",
"execution_count": 323,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mean value for new impact height = -141.300220\n",
"Actual impact height is -0.047397\n",
"New standard deviation is 915.576108\n",
"The actual standard deviation of the y positions is 0.2548611138551949\n"
]
}
],
"source": [
"test_height_2=montecarlopi(100);\n",
"\n",
"print('Mean value for new impact height = %f'%np.mean(test_height_2))\n",
"print('Actual impact height is %f'%mean_y)\n",
"print('New standard deviation is %f'%np.std(test_height_2))\n",
"print('The actual standard deviation of the y positions is', std_y)"
]
},
{
"cell_type": "code",
"execution_count": 328,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mean value for new impact height = -183.147491\n",
"Actual impact height is -0.047397\n",
"New standard deviation is 3791.977317\n",
"The actual standard deviation of the y positions is 0.2548611138551949\n"
]
}
],
"source": [
"test_height_3=montecarlopi(1000);\n",
"\n",
"print('Mean value for new impact height = %f'%np.mean(test_height_3))\n",
"print('Actual impact height is %f'%mean_y)\n",
"print('New standard deviation is %f'%np.std(test_height_3))\n",
"print('The actual standard deviation of the y positions is', std_y)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#Based on the above test heights, the N value of 10 serves best to generate impact heights closest to our actual value\n",
"#obtained from the class data. Furthermore, the new standard deviation is much closer to to our actual value using the\n",
"#N value of 10. Below we will determine more accurate ranges for theta and velocity that provide us with precision \n",
"#required to further recreate the class accuracy and precision. "
]
},
{
"cell_type": "code",
"execution_count": 465,
"metadata": {},
"outputs": [],
"source": [
"import random \n",
"import math"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#Trial and error for velocity of values to determine optimal ranges for theta and velocity. I began by choosing a \n",
"#fixed theta range of 50-60 degrees thus allowing analyzation of velocity values.Note that more trials were performed\n",
"#however not shown for reading purposes."
]
},
{
"cell_type": "code",
"execution_count": 947,
"metadata": {},
"outputs": [],
"source": [
"#Trial 1\n",
"v_random=8;\n",
"theta_random=np.random.uniform(50,60,size = (1,10));"
]
},
{
"cell_type": "code",
"execution_count": 948,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Random velocity values 8\n",
"Random theta values [[50.22392754 59.44957263 59.15767063 52.7188618 50.57433562 58.19035475\n",
" 52.98870631 59.64050271 59.04191846 59.14944451]]\n",
"The random y impact locations are [[ -0.51569464 -1.16765704 -2.39758938 -3.32322151 0.49720557\n",
" -179.43147973 -1.8599741 -0.54087262 -3.0584274 -2.44014553]]\n"
]
}
],
"source": [
"def montecarlopi(N):\n",
" '''Create random velocities and theta values to calculate the value new impact heights\n",
" Arguments\n",
" ---------\n",
" N: number of random points to produce for velocities and theta\n",
" \n",
" Returns\n",
" -------\n",
" y_new: the best prediction of impact height using N points\n",
" '''\n",
" \n",
" d=3 #distance to target (m)\n",
" g=9.81 #acceleration due to gravity (m/s**2)\n",
" z_0=0.3 #initial height above the bull's eye (m)\n",
" \n",
" sin=np.sin(theta_random)\n",
" cos=np.cos(theta_random)\n",
" c=d/cos\n",
" e=2*(v_random**2)*cos\n",
" \n",
" y_new=c*(sin-(g/e)*d)+z_0\n",
" return y_new\n",
"\n",
"print('Random velocity values', v_random)\n",
"print('Random theta values', theta_random)\n",
"new_heights=montecarlopi(10)\n",
"print('The random y impact locations are',new_heights)"
]
},
{
"cell_type": "code",
"execution_count": 949,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mean value for new impact height is -19.423785638631863\n",
"Actual mean impact height is -0.047397\n"
]
}
],
"source": [
"new_mean=np.mean(new_heights)\n",
"print('Mean value for new impact height is',new_mean)\n",
"print('Actual mean impact height is %f'%mean_y)"
]
},
{
"cell_type": "code",
"execution_count": 944,
"metadata": {},
"outputs": [],
"source": [
"#Trial 2\n",
"v_random=9;\n",
"theta_random=np.random.uniform(50,60,size = (1,10));"
]
},
{
"cell_type": "code",
"execution_count": 945,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Random velocity values 9\n",
"Random theta values [[56.91583349 53.80882518 54.5637864 51.75210529 54.63195646 51.11721348\n",
" 52.4903192 58.00393738 54.47516295 58.77938183]]\n",
"The random y impact locations are [[ 0.82820084 0.93119826 3.75945627 -41.24661749 3.88316801\n",
" 2.47078284 -5.08577 -14.86467951 3.40848315 -5.01622707]]\n"
]
}
],
"source": [
"def montecarlopi(N):\n",
" '''Create random velocities and theta values to calculate the value new impact heights\n",
" Arguments\n",
" ---------\n",
" N: number of random points to produce for velocities and theta\n",
" \n",
" Returns\n",
" -------\n",
" y_new: the best prediction of impact height using N points\n",
" '''\n",
" \n",
" d=3 #distance to target (m)\n",
" g=9.81 #acceleration due to gravity (m/s**2)\n",
" z_0=0.3 #initial height above the bull's eye (m)\n",
" \n",
" sin=np.sin(theta_random)\n",
" cos=np.cos(theta_random)\n",
" c=d/cos\n",
" e=2*(v_random**2)*cos\n",
" \n",
" y_new=c*(sin-(g/e)*d)+z_0\n",
" return y_new\n",
"\n",
"print('Random velocity values', v_random)\n",
"print('Random theta values', theta_random)\n",
"new_heights=montecarlopi(10)\n",
"print('The random y impact locations are',new_heights)"
]
},
{
"cell_type": "code",
"execution_count": 946,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mean value for new impact height is -5.093200470694894\n",
"Actual mean impact height is -0.047397\n"
]
}
],
"source": [
"new_mean=np.mean(new_heights)\n",
"print('Mean value for new impact height is',new_mean)\n",
"print('Actual mean impact height is %f'%mean_y)"
]
},
{
"cell_type": "code",
"execution_count": 950,
"metadata": {},
"outputs": [],
"source": [
"#Trial 3\n",
"v_random=10;\n",
"theta_random=np.random.uniform(50,60,size = (1,10));"
]
},
{
"cell_type": "code",
"execution_count": 951,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Random velocity values 10\n",
"Random theta values [[51.74396824 53.60682857 57.05922041 57.70241228 55.12165483 50.33706533\n",
" 57.14545623 51.5671778 54.65388375 54.77558204]]\n",
"The random y impact locations are [[-19.2466317 0.44781626 1.40032301 4.38091017 -41.92175035\n",
" 0.0713964 1.69306149 4.93243208 4.87747532 3.99117352]]\n"
]
}
],
"source": [
"def montecarlopi(N):\n",
" '''Create random velocities and theta values to calculate the value new impact heights\n",
" Arguments\n",
" ---------\n",
" N: number of random points to produce for velocities and theta\n",
" \n",
" Returns\n",
" -------\n",
" y_new: the best prediction of impact height using N points\n",
" '''\n",
" \n",
" d=3 #distance to target (m)\n",
" g=9.81 #acceleration due to gravity (m/s**2)\n",
" z_0=0.3 #initial height above the bull's eye (m)\n",
" \n",
" sin=np.sin(theta_random)\n",
" cos=np.cos(theta_random)\n",
" c=d/cos\n",
" e=2*(v_random**2)*cos\n",
" \n",
" y_new=c*(sin-(g/e)*d)+z_0\n",
" return y_new\n",
"\n",
"print('Random velocity values', v_random)\n",
"print('Random theta values', theta_random)\n",
"new_heights=montecarlopi(10)\n",
"print('The random y impact locations are',new_heights)"
]
},
{
"cell_type": "code",
"execution_count": 952,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mean value for new impact height is -3.9373793804013757\n",
"Actual mean impact height is -0.047397\n"
]
}
],
"source": [
"new_mean=np.mean(new_heights)\n",
"print('Mean value for new impact height is',new_mean)\n",
"print('Actual mean impact height is %f'%mean_y)"
]
},
{
"cell_type": "code",
"execution_count": 953,
"metadata": {},
"outputs": [],
"source": [
"#Trial 4\n",
"v_random=11;\n",
"theta_random=np.random.uniform(50,60,size = (1,10));"
]
},
{
"cell_type": "code",
"execution_count": 954,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Random velocity values 11\n",
"Random theta values [[50.6529275 54.68107138 57.95672394 53.42938401 57.31050768 56.60899831\n",
" 50.26514918 54.25782916 53.41169775 58.77569395]]\n",
"The random y impact locations are [[ 1.09862634e+00 5.84387212e+00 4.67352920e+00 1.92146578e-03\n",
" 2.46503033e+00 1.15045701e-01 -6.58345711e-02 2.88116780e+00\n",
" -5.09744816e-02 -4.57573567e+00]]\n"
]
}
],
"source": [
"def montecarlopi(N):\n",
" '''Create random velocities and theta values to calculate the value new impact heights\n",
" Arguments\n",
" ---------\n",
" N: number of random points to produce for velocities and theta\n",
" \n",
" Returns\n",
" -------\n",
" y_new: the best prediction of impact height using N points\n",
" '''\n",
" \n",
" d=3 #distance to target (m)\n",
" g=9.81 #acceleration due to gravity (m/s**2)\n",
" z_0=0.3 #initial height above the bull's eye (m)\n",
" \n",
" sin=np.sin(theta_random)\n",
" cos=np.cos(theta_random)\n",
" c=d/cos\n",
" e=2*(v_random**2)*cos\n",
" \n",
" y_new=c*(sin-(g/e)*d)+z_0\n",
" return y_new\n",
"\n",
"print('Random velocity values', v_random)\n",
"print('Random theta values', theta_random)\n",
"new_heights=montecarlopi(10)\n",
"print('The random y impact locations are',new_heights)"
]
},
{
"cell_type": "code",
"execution_count": 955,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mean value for new impact height is 1.238664823252403\n",
"Actual mean impact height is -0.047397\n"
]
}
],
"source": [
"new_mean=np.mean(new_heights)\n",
"print('Mean value for new impact height is',new_mean)\n",
"print('Actual mean impact height is %f'%mean_y)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#Based upon the above results, our class mean lies between the veolicty values of 10 and 11. Therefore we will \n",
"#create a new function for velocity that fixes the random number generation between these two values at the 50-60\n",
"#degree theta range."
]
},
{
"cell_type": "code",
"execution_count": 971,
"metadata": {},
"outputs": [],
"source": [
"v_random=np.random.uniform(10,12,size = (1,10));\n",
"theta_random=np.random.uniform(50,60,size = (1,10));"
]
},
{
"cell_type": "code",
"execution_count": 972,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Random velocity values [[11.58830011 10.02323081 10.24704314 10.43815884 10.42055169 11.67168247\n",
" 10.75057318 11.34866225 11.99626263 10.80097906]]\n",
"Random theta values [[56.73531704 57.69036543 51.23893328 53.95707388 53.0328419 58.84338981\n",
" 59.22454667 50.5003923 54.26887762 55.32114905]]\n",
"The random y impact locations are [[ 0.52608647 4.31846824 3.3811872 1.58184336 -1.34746733\n",
" -3.832215 -1.68619655 0.65559081 3.07373912 -11.43361876]]\n"
]
}
],
"source": [
"def montecarlopi(N):\n",
" '''Create random velocities and theta values to calculate the value new impact heights\n",
" Arguments\n",
" ---------\n",
" N: number of random points to produce for velocities and theta\n",
" \n",
" Returns\n",
" -------\n",
" y_new: the best prediction of impact height using N points\n",
" '''\n",
" \n",
" d=3 #distance to target (m)\n",
" g=9.81 #acceleration due to gravity (m/s**2)\n",
" z_0=0.3 #initial height above the bull's eye (m)\n",
" \n",
" sin=np.sin(theta_random)\n",
" cos=np.cos(theta_random)\n",
" c=d/cos\n",
" e=2*(v_random**2)*cos\n",
" \n",
" y_new=c*(sin-(g/e)*d)+z_0\n",
" return y_new\n",
"\n",
"print('Random velocity values', v_random)\n",
"print('Random theta values', theta_random)\n",
"new_heights=montecarlopi(10)\n",
"print('The random y impact locations are',new_heights)"
]
},
{
"cell_type": "code",
"execution_count": 973,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mean value for new impact height is -0.47625824265340116\n",
"Actual mean impact height is -0.047397\n"
]
}
],
"source": [
"new_mean=np.mean(new_heights)\n",
"print('Mean value for new impact height is',new_mean)\n",
"print('Actual mean impact height is %f'%mean_y)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#Note that there are other possible velocities and angle values that can be used to recreate our class accuracy and \n",
"#precision however for the selected angle range I have choosen these velocity values work best. The output mean\n",
"#value for impact height will not always be very accurate however this mean will be much more consistent then the one \n",
"#from deliverable part 2. "
]
},
{
"cell_type": "code",
"execution_count": 974,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"New standard deviation is 4.365117\n",
"The actual standard deviation of the y positions is 0.2548611138551949\n"
]
}
],
"source": [
"print('New standard deviation is %f'%np.std(new_heights))\n",
"print('The actual standard deviation of the y positions is', std_y)"
]
},
{
"cell_type": "code",
"execution_count": 986,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 576x576 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(8,8))\n",
"plt.scatter(theta_random,new_heights, color='#3498db') \n",
"plt.title('Scatter plot of theta and y positions \\n')\n",
"plt.xlabel('theta')\n",
"plt.ylabel('y position')\n",
"plt.grid();"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#As shown in the scatter plot, the range of y position values is much greater than that of our class however the \n",
"#mean position is still reflective of our class data. This explains the higher standard deviation for the randomly\n",
"#generated points as well. "
]
}
],
"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
}