Add files via upload

This commit is contained in:
Peter Norvig authored and GitHub committed 2018-04-13 17:49:22 -07:00
1 parent 8c2e90f6ab
commit 698d8b9ba9
1 file changed
+34 -28
+34 -28
View File
@@ -18,20 +18,9 @@
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x1028a2be0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"outputs": [],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
@@ -47,8 +36,26 @@
"for (dist, climb, time) in csv.reader(open('dist-climb-time.csv')):\n",
" if miles(dist) > 30:\n",
" X.append(feet(climb) / miles(dist))\n",
" Y.append(miles(dist) / hours(time))\n",
"\n",
" Y.append(miles(dist) / hours(time))"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x105166cc0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(X, Y, 'o');"
]
},
@@ -63,14 +70,14 @@
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAzgAAAIcCAYAAAA6xgsWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XtgU1W6NvAnTe2FClpa2lLaBhQKXgbGcdTx8zoKM+KI\nRxG0hUodaFGwIlULKJQClTsKQgHl4ghSQfGgM+qo53gbUUaPjgg4jlBEE1oKpRcupk1D03x/lISm\n2Ul30p19y/P7S9Mka+29krDfvdb7LsOJEyecICIiIiIi0oEIpTtAREREREQkFQY4RERERESkGwxw\niIiIiIhINxjgEBERERGRbjDAISIiIiIi3WCAQ0REREREusEAh4iIiIiIdEPxAGfXrl3Izs7GpZde\nivj4eGzdutXj71arFUVFRbjsssvQu3dvXHXVVVizZo1CvSUiIiIiIjWLVLoDVqsVl112GbKzszFp\n0iSvvz/11FP49NNPsW7dOmRkZGDXrl2YMmUKEhMTce+99yrQYyIiIiIiUivFZ3CGDRuGWbNm4c47\n74TBYPD6+1dffYX77rsP1113HdLT03Hffffht7/9Lb7++msFektERERERGqmeIDTmd/97nd47733\nUFVVBQD48ssv8d1332HYsGEK94yIiIiIiNRG8SVqnVm8eDGmTp2Kyy+/HJGRkTAYDFiyZAkDHCIi\nIiIi8qL6AOf555/HV199hVdffRVpaWnYtWsXZs2ahYyMDNxyyy1Kd4+IiIiIiFRE1QGOzWZDaWkp\nNm/ejD/84Q8AgEsvvRR79+7FqlWrGOAQEREREZEHVefgnDlzBmfOnEFEhGc3jUYjWltbFeoVERER\nERGpleIBjtVqxb59+7B37160traisrIS+/btQ2VlJbp3747rrrsOc+bMwWeffQaz2Yzy8nJs27YN\nI0aMULrrsNlsumtLzmOqqKiQrS09jpXcbelxvDhWXafXcyhXWxwrbbXF8dJGOwDHSmttSU3xAGf3\n7t248cYbcfPNN8Nms2HhwoW46aabsHDhQgDAX/7yF/zmN7/Bgw8+iGuvvRYrV67ErFmzkJeXp3DP\niYiIiIhIbRTPwbn++uvR0NDg8++9evVCWVmZjD0iIiIiIiKtUnwGh4iIiIiISCoMcIiIiIiISDcY\n4BARERERkW4wwCEiIiIiIt1ggENERERERLrBAIeIiIiIiHSDAQ4REREREekGAxwiIiIiItINBjhE\n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 truncated
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x108dd82e8>"
"<matplotlib.figure.Figure at 0x10b1d1390>"
]
},
"metadata": {},
@@ -90,12 +97,13 @@
" plt.style.use('fivethirtyeight')\n",
" plt.plot(X, Y, 'o')\n",
" X1 = list(range(int(max(X))))\n",
" plt.plot(X1, [F(x) for x in X1], 'o')\n",
" plt.plot(X1, [F(x) for x in X1], '-')\n",
" plt.ylabel('Speed (mph)')\n",
" plt.xlabel('Grade (feet/mile)')\n",
" plt.minorticks_on()\n",
" plt.grid(True, which='major')\n",
" plt.grid(True, which='minor', alpha=0.2)\n",
" plt.grid(True, which='minor', alpha=0.4)\n",
" plt.title('Average speed vs Grade on {} rides'.format(len(X)))\n",
" \n",
"show(X, Y) "
]
@@ -104,17 +112,15 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"So, I average about 14 mph when the road is fairly flat, with a lot of variability from 12 to 16 mph, depending more on my level of effort than on the grade of the road. But from 60 ft/mile and up, speed falls off quickly at 1 mph for every 20 ft/mile, and by 140 ft/mile, I'm down around 8 mph. Note that 140 ft/mile is only 2.7% grade, but if you figure a typical route is 1/3 up, 1/3 down, and 1/3 flatish, then that's 8% grade on the up part.\n",
"So, I average about 14 mph when the road is fairly flat, with a lot of variability from 12 to 16 mph, depending more on my level of effort than on the grade of the road. But from 60 ft/mile and up, speed falls off quickly at 1 mph for every 20 ft/mile, and by 120 ft/mile, I'm down around 10 mph, and 8.5mph at 140 ft/mile. Note that 140 ft/mile is only 2.7% grade, but if you figure a typical route is 1/3 up, 1/3 down, and 1/3 flat-ish, then that's 8% grade on the up part.\n",
"\n",
"I can use the polynomial `F` to estimate the duration of a route:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"def duration(dist, climb, F=F):\n",
@@ -131,16 +137,16 @@
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"6.7314081227852185"
"6.2641828504384378"
]
},
"execution_count": 4,
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}