graphing-calculator/Graphing Calculator.ipynb

2227 lines
524 KiB
Plaintext
Raw Permalink Normal View History

2023-07-23 10:58:31 +02:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "EsfO5Q92tL-6"
},
"source": [
"[![freeCodeCamp](https://cdn.freecodecamp.org/testable-projects-fcc/images/fcc_secondary.svg)](https://freecodecamp.org/)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "7ECUmRBSGOb4"
},
"source": [
"**Learn Foundational Math 2 by Building Cartesian Graphs**<br>\n",
"Each of these steps will lead you toward the Certification Project. Once you complete a step, click to expand the next step."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "szp5flp1fA8-"
},
"source": [
"# &darr; **Do this first** &darr;\n",
"Copy this notebook to your own account by clicking the `File` button at the top, and then click `Save a copy in Drive`. You will need to be logged in to Google. The file will be in a folder called \"Colab Notebooks\" in your Google Drive."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "iNcDJ45bGtYk"
},
"source": [
"# Step 0 - Acquire the testing library"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "2_U7sdv4zaww"
},
"source": [
"Please run this code to get the library file from FreeCodeCamp. Each step will use this library to test your code. You do not need to edit anything; just run this code cell and wait a few seconds until it tells you to go on to the next step."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"id": "aDuDRHETG3Oy"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: requests in /usr/local/lib/python3.8/dist-packages (2.31.0)\n",
"Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.8/dist-packages (from requests) (3.2.0)\n",
"Requirement already satisfied: idna<4,>=2.5 in /usr/lib/python3/dist-packages (from requests) (2.8)\n",
"Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/lib/python3/dist-packages (from requests) (1.25.8)\n",
"Requirement already satisfied: certifi>=2017.4.17 in /usr/lib/python3/dist-packages (from requests) (2019.11.28)\n",
"\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n",
"\u001b[0m\n",
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.1.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m23.2.1\u001b[0m\n",
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpython3 -m pip install --upgrade pip\u001b[0m\n",
"Code test Passed\n",
"Go on to the next step\n"
]
}
],
"source": [
"# You may need to run this cell at the beginning of each new session\n",
"\n",
"!pip install requests\n",
"\n",
"# This will just take a few seconds\n",
"\n",
"import requests\n",
"\n",
"# Get the library from GitHub\n",
"url = 'https://raw.githubusercontent.com/edatfreecodecamp/python-math/main/math-code-test-b.py'\n",
"r = requests.get(url)\n",
"\n",
"# Save the library in a local working directory\n",
"with open('math_code_test_b.py', 'w') as f:\n",
" f.write(r.text)\n",
"\n",
"# Now you can import the library\n",
"import math_code_test_b as test\n",
"\n",
"# This will tell you if the code works\n",
"test.step01()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ZWDxpIPUFfda"
},
"source": [
"# Step 1 - Cartesian Coordinates"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "eTWzFpChFltm"
},
"source": [
"Learn Cartesian coordinates by building a scatterplot game. The Cartesian plane is the classic x-y coordinate grid (invented by Ren$\\acute{e}$ DesCartes) where \"<i>x</i>\" is the horizontal axis and \"<i>y</i>\" is the vertical axis. Each (x,y) coordinate pair is a point on the graph. The point (0,0) is the \"origin.\" The x value tells how much to move right (positive) or left (negative) from the origin. The y value tells you how much you move up (positive) or down (negative) from the origin. Notice that you are importing `matplotlib` to create the graph. The following code just displays one quadrant of the Cartesian graph. Just run this code to see how Python displays a graph.\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"id": "OGdjnZw0Fmf7"
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Code test Passed\n",
"Go on to the next step\n"
]
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"fig, ax = plt.subplots()\n",
"plt.show()\n",
"\n",
"# Just run this code to see a blank graph\n",
"import math_code_test_b as test\n",
"test.step01()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "i1mBd8gGFvBV"
},
"source": [
"# Step 2 - Cartesian Coordinates (Part 2)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "aylg20IGFvBW"
},
"source": [
"Here you will create a standard window but still not highlight each axis. Run this code once, then change the window size to 20 in each direction and run it again."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"id": "EKfFo4_EFvBX"
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" \n",
"Code test passed\n",
"Go on to the next step\n"
]
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"fig, ax = plt.subplots()\n",
"\n",
"# Only change the numbers in the next line:\n",
"plt.axis([-20,20,-20,20])\n",
"\n",
"plt.show()\n",
"\n",
"\n",
"# Only change code above this line\n",
"import math_code_test_b as test\n",
"test.step02(In[-1].split('# Only change code above this line')[0])"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "MYQL57cD2ejS"
},
"source": [
"# Step 3 - Graph Dimensions"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "b2k229tOz9YQ"
},
"source": [
"When you look at this code, you can see how Python sets up window dimensions. You will also notice that it is easier and more organized to define the dimensions as variables. Run the code, then change just the `xmax` value to 20 and run it again to see the difference."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"id": "uXvHo-5a2Zi_"
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" \n",
"Code test passed\n",
"Go on to the next step\n"
]
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"xmin = -10\n",
"xmax = 20\n",
"ymin = -10\n",
"ymax = 10\n",
"\n",
"fig, ax = plt.subplots()\n",
"plt.axis([xmin,xmax,ymin,ymax]) # window size\n",
"plt.show()\n",
"\n",
"# Only change code above this line\n",
"import math_code_test_b as test\n",
"test.step03(In[-1].split('# Only change code above this line')[0])"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "jIHKROStFMcR"
},
"source": [
"# Step 4 - Displaying Axis Lines"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "NhrHvY1YEndp"
},
"source": [
"Notice the code to `plot` a line for the x axis and a line for the y axis. The `'b'` makes the line blue. Run the code, then change each 'b' to 'g' to make the lines green."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"id": "mgWhRLtwFGOd"
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" \n",
"Code test passed\n",
"Go on to the next step\n"
]
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"xmin = -10\n",
"xmax = 10\n",
"ymin = -10\n",
"ymax = 10\n",
"\n",
"fig, ax = plt.subplots()\n",
"plt.axis([xmin,xmax,ymin,ymax]) # window size\n",
"plt.plot([xmin,xmax],[0,0],'g') # blue x axis\n",
"plt.plot([0,0],[ymin,ymax], 'g') # blue y axis\n",
"\n",
"plt.show()\n",
"\n",
"# Only change code above this line\n",
"import math_code_test_b as test\n",
"test.step04(In[-1].split('# Only change code above this line')[0])"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "wLDO_IRrFw7z"
},
"source": [
"# Step 5 - Plotting a Point"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "iOZ8TJISFw71"
},
"source": [
"Now you will plot a point on the graph. Notice the `'ro'` makes the point a red dot. Run the code, then change the location of the point to (-5,1) and run it again. Keep the window size the same. Notice the difference between plotting a point and plotting a line."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"id": "N09NlV3DFw71"
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" \n",
"Code test passed\n",
"Go on to the next step\n"
]
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"xmin = -10\n",
"xmax = 10\n",
"ymin = -10\n",
"ymax = 10\n",
"\n",
"fig, ax = plt.subplots()\n",
"plt.axis([xmin,xmax,ymin,ymax]) # window size\n",
"plt.plot([xmin,xmax],[0,0],'b') # blue x axis\n",
"plt.plot([0,0],[ymin,ymax], 'b') # blue y axis\n",
"\n",
"# Change only the numbers in the following line:\n",
"plt.plot([-5],[1], 'ro')\n",
"\n",
"plt.show()\n",
"\n",
"\n",
"# Only change code above this line\n",
"import math_code_test_b as test\n",
"test.step05(In[-1].split('# Only change code above this line')[0])"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ExVB2joZF0rk"
},
"source": [
"# Step 6 - Plotting Several Points"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "G48kO0jcF0rl"
},
"source": [
"You have actually been using arrays to plot each singular point so far. In this step, you will see an array of x values and an array of y values defined before the plot statement. Notice that these two short arrays create one point: (4,2). Add two numbers to each array so that it also plots points (1,1) and (2,5)."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"id": "YkRIMNimF0rm"
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" \n",
"Code test passed\n",
"Go on to the next step\n"
]
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"# only change the next two lines:\n",
"x = [4, 1, 2]\n",
"y = [2, 1, 5]\n",
"\n",
"# Only change code above this line\n",
"\n",
"xmin = -10\n",
"xmax = 10\n",
"ymin = -10\n",
"ymax = 10\n",
"\n",
"fig, ax = plt.subplots()\n",
"plt.axis([xmin,xmax,ymin,ymax]) # window size\n",
"plt.plot([xmin,xmax],[0,0],'b') # blue x axis\n",
"plt.plot([0,0],[ymin,ymax],'b') # blue y axis\n",
"\n",
"plt.plot(x, y, 'ro') # red points\n",
"plt.show()\n",
"\n",
"\n",
"# Only change code above this line\n",
"import math_code_test_b as test\n",
"test.step06(In[-1].split('# Only change code above this line')[0])"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "3MqIpFTOF1m9"
},
"source": [
"# Step 7 - Plotting Points and Lines"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "1O1_p4BqF1m-"
},
"source": [
"Notice the subtle difference between plotting points and lines. Each `plot()` statement takes an array of x values, an array of y values, and a third argument to tell what you are plotting. The default plot is a line. The letters `'r'` and `'b'` (and `'g'` and a few others) indicate common colors. The \"o\" in `'ro'` indicates a dot, where `'rs'` would indicate a red square and `'r^'` would indicate a red triangle. Plot a red line and two green squares."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"id": "oMRcOD7hF1m-"
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAkcAAAGiCAYAAADtImJbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAwX0lEQVR4nO3de3RU5b3/8U8CZEKATISEhGgSLioBEUSUmJwqUFKDxSqWxVGk5SKi2ECVUCrxKAjUE1BUqlLQFhPPUo9KD+KlFsulwE+JXAJUoZAaCkQuiSJmxgSZhOT5/TGLcYdcIJiZncv7tdZe7svz7P3dbJj5uPczM0HGGCMAAABIkoLtLgAAAKApIRwBAABYEI4AAAAsCEcAAAAWhCMAAAALwhEAAIAF4QgAAMCCcAQAAGBBOAIAALAgHAEAAFj4NRxt3rxZP/vZzxQbG6ugoCCtXr262nZjjObMmaNu3bqpffv2Sk1N1eeff37e/S5dulTdu3dXaGiokpKStG3bNj+dAQAAaG38Go7Kyso0YMAALV26tNbtTz75pJ577jktX75cW7duVYcOHZSWlqbTp0/Xuc8333xTGRkZmjt3rnbu3KkBAwYoLS1NX375pb9OAwAAtCJBgfrh2aCgIL399tsaNWqUJO9do9jYWM2cOVO/+c1vJEkul0vR0dHKycnRXXfdVet+kpKSdP311+uFF16QJFVVVSkuLk7Tp0/X7NmzA3EqAACgBWtr14EPHjyooqIipaam+tY5nU4lJSUpNze31nBUXl6uvLw8ZWZm+tYFBwcrNTVVubm5dR7L4/HI4/H4lquqqnTy5El16dJFQUFBjXRGAADAn4wx+vbbbxUbG6vgYP89/LItHBUVFUmSoqOjq62Pjo72bTvXiRMnVFlZWWuf/fv313msrKwszZs37wdWDAAAmoIvvvhCl112md/2b1s4CqTMzExlZGT4ll0ul+Lj4/XFF18oPDzcxsoANKayMik21jt/7JjUoYO99QBoXG63W3FxcerUqZNfj2NbOIqJiZEkFRcXq1u3br71xcXFuuaaa2rtExkZqTZt2qi4uLja+uLiYt/+auNwOORwOGqsDw8PJxwBLUibNt/Ph4cTjoCWyt9DYmz7nqMePXooJiZG69ev961zu93aunWrkpOTa+0TEhKiQYMGVetTVVWl9evX19kHAACgIfx656i0tFQFBQW+5YMHD2r37t3q3Lmz4uPj9dBDD+l3v/udrrjiCvXo0UOPPfaYYmNjfZ9ok6Thw4frjjvu0LRp0yRJGRkZmjBhgq677joNHjxYS5YsUVlZmSZNmuTPUwEAAK2EX8PRjh07NGzYMN/y2XE/EyZMUE5Ojn7729+qrKxM9913n0pKSvSjH/1Ia9asUWhoqK/PgQMHdOLECd/ynXfeqa+++kpz5sxRUVGRrrnmGq1Zs6bGIG0AAICLEbDvOWpK3G63nE6nXC4XY46AFqSsTOrY0TtfWsqYI6ClCdT7N7+tBgAAYEE4AgAAsCAcAQAAWBCOAAAALAhHAAAAFoQjAAAAC8IRAACABeEIAADAgnAEAABgQTgCAACwIBwBAABYEI4AAAAsCEcAAAAWhCMAAAALwhEAAIAF4QgAAMCCcAQAAGBBOAIAALAgHAEAAFgQjgAAACwIRwAAABaEIwAAAAvCEQAAgAXhCAAAwIJwBAAAYEE4AgAAsCAcAQAAWBCOAAAALAhHAAAAFoQjAAAAC8IRAACABeEIAADAgnAEAABgQTgCAACwIBwBAABY2B6OunfvrqCgoBpTenp6re1zcnJqtA0NDQ1w1QAAoKVqa3cB27dvV2VlpW95z549+slPfqIxY8bU2Sc8PFz5+fm+5aCgIL/WCAAAWg/bw1FUVFS15YULF6pXr14aMmRInX2CgoIUExPj79IAAEArZPtjNavy8nK9+uqruueee+q9G1RaWqqEhATFxcXp9ttv1969e+vdr8fjkdvtrjYBAADUpkmFo9WrV6ukpEQTJ06ss03v3r318ssv65133tGrr76qqqoqpaSk6MiRI3X2ycrKktPp9E1xcXF+qB4AALQEQcYYY3cRZ6WlpSkkJETvvffeBfepqKhQnz59NHbsWC1YsKDWNh6PRx6Px7fsdrsVFxcnl8ul8PDwH1w3gKahrEzq2NE7X1oqdehgbz0AGpfb7ZbT6fT7+7ftY47OOnz4sNatW6dVq1Y1qF+7du00cOBAFRQU1NnG4XDI4XD80BIBAEAr0GQeq2VnZ6tr164aOXJkg/pVVlbqs88+U7du3fxUGQAAaE2aRDiqqqpSdna2JkyYoLZtq9/MGj9+vDIzM33L8+fP19/+9jf9+9//1s6dO/WLX/xChw8f1r333hvosgEAQAvUJB6rrVu3ToWFhbrnnntqbCssLFRw8PcZ7ptvvtGUKVNUVFSkSy65RIMGDdKWLVvUt2/fQJYMAABaqCY1IDtQAjWgC0BgMSAbaNkC9f7dJB6rAQAANBWEIwAAAAvCEQAAgAXhCAAAwIJwBAAAYEE4AgAAsCAcAQAAWBCOAAAALAhHAAAAFoQjAAAAC8IRAACABeEIAADAgnAEAABgQTgCAACwIBwBAABYEI4AAAAs2tpdAAA0B4WuQp04daLO7ZFhkYp3xgewIgD+QjgCgPModBWq9wu9dfrM6TrbhLYNVf60fAIS0ALwWA0AzuPEqRP1BiNJOn3mdL13lgA0H4QjAAAAC8IRAACABeEIAADAgnAEAABgQTgCAACwIBwBAABYEI4A4DwiwyIV2ja03jahbUMVGRYZoIoA+BNfAgkA5xHvjFf+tHy+IRtoJQhHAHAB4p3xhB+gleCxGgAAgAXhCAAAwIJwBAAAYEE4AgAAsCAcAQAAWBCOAAAALAhHAAAAFraHo8cff1xBQUHVpsTExHr7rFy5UomJiQoNDdXVV1+tDz74IEDVAgCAls72cCRJV111lY4fP+6bPvroozrbbtmyRWPHjtXkyZO1a9cujRo1SqNGjdKePXsCWDEAAGipmkQ4atu2rWJiYnxTZGTdv0/0+9//XiNGjNCsWbPUp08fLViwQNdee61eeOGFAFYMADivsjLp6FG7qwAarEmEo88//1yxsbHq2bOnxo0bp8LCwjrb5ubmKjU1tdq6tLQ05ebm1tnH4/HI7XZXmwAAfjZ7tnTVVdKf/2x3JUCD2B6OkpKSlJOTozVr1mjZsmU6ePCgbrzxRn377be1ti8qKlJ0dHS1ddHR0SoqKqrzGFlZWXI6nb4pLi6uUc8BAHCOjRulF16QXC7J6bS7GqBBbA9Ht9xyi8aMGaP+/fsrLS1NH3zwgUpKSvTWW2812jEyMzPlcrl80xdffNFo+wYAnKO0VJo0yTt///3ST35ibz1AA7W1u4BzRURE6Morr1RBQUGt22NiYlRcXFxtXXFxsWJiYurcp8PhkMPhaNQ6AQB1+O1vpUOHpIQE6amn7K4GaDDb7xydq7S0VAcOHFC3bt1q3Z6cnKz169dXW7d27VolJycHojwAQH3Wr5eWLfPOr1ghdepkbz3ARbA9HP3mN7/Rpk2bdOjQIW3ZskV33HGH2rRpo7Fjx0qSxo8fr8zMTF/7Bx98UGvWrNHTTz+t/fv36/HHH9eOHTs0bdo0u04BACBJbrd0zz3e+V/9Sho+3N56gItk+2O1I0eOaOzYsfr6668VFRWlH/3oR/rkk08UFRUlSSosLFRw8PcZLiUlRa+//roeffRRPfLII7riiiu0evVq9evXz65TAABI0qxZUmGh1KOHtGiR3dUAFy3IGGPsLiLQ3G63nE6nXC6XwsPD7S4HQCMpK5M6dvTOl5ZKHTrYW0+r8re/SWlp3vmNG6UhQ2wtBy1ToN6/bX+sBgBo5lwuafJk7/z06QQjNHuEIwDAD5ORIR05IvXqJWVl2V0N8IMRjgAAF++vf5VeflkKCpKys3mWiRaBcAQAuDjffCPde693/qGHpBtvtLUcoLEQjgAAF2fGDOnYMemKK6Tf/c7uaoBGQzgCADTce+9Jr7zifZyWkyOFhdldEdBoCEcAgIY5eVK67z7v/MyZUkqKvfUAjYx
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" \n",
"Code test passed\n",
"Go on to the next step\n"
]
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"# Use these numbers:\n",
"linex = [2,4]\n",
"liney = [1,5]\n",
"pointx = [1,6]\n",
"pointy = [6,3]\n",
"\n",
"# Keep these lines:\n",
"xmin = -10\n",
"xmax = 10\n",
"ymin = -10\n",
"ymax = 10\n",
"\n",
"fig, ax = plt.subplots()\n",
"plt.axis([xmin,xmax,ymin,ymax]) # window size\n",
"plt.plot([xmin,xmax],[0,0],'b') # blue x axis\n",
"plt.plot([0,0],[ymin,ymax], 'b') # blue y axis\n",
"\n",
"# Change the next two lines:\n",
"plt.plot(linex, liney, 'r')\n",
"plt.plot(pointx, pointy, 'gs')\n",
"\n",
"plt.show()\n",
"\n",
"\n",
"# Only change code above this line\n",
"import math_code_test_b as test\n",
"test.step07(In[-1].split('# Only change code above this line')[0])"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "NKq_qwCsF3Dj"
},
"source": [
"# Step 8 - Making a Scatterplot Game"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "sBh-rNyOF3Dk"
},
"source": [
"To make the game, you can make a loop that plots a random point and asks the user to input the (x,y) coordinates. Notice the `for` loop that runs three rounds of the game. Run the code, play the game, then you can go on to the next step."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"id": "uR5TFWbLF3Dk"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" \n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdin",
"output_type": "stream",
"text": [
"Enter the coordinates of the red point point: \n",
" -3, 0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" \n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdin",
"output_type": "stream",
"text": [
"Enter the coordinates of the red point point: \n",
" -7, 0\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" \n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdin",
"output_type": "stream",
"text": [
"Enter the coordinates of the red point point: \n",
" 2, 7\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Your score: 3\n",
"You scored 3 out of 3. Good job!\n",
"You can go on to the next step\n"
]
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import random\n",
"\n",
"score = 0\n",
"\n",
"xmin = -8\n",
"xmax = 8\n",
"ymin = -8\n",
"ymax = 8\n",
"\n",
"fig, ax = plt.subplots()\n",
"\n",
"for i in range(0,3):\n",
" xpoint = random.randint(xmin, xmax)\n",
" ypoint = random.randint(ymin, ymax)\n",
" x = [xpoint]\n",
" y = [ypoint]\n",
" plt.axis([xmin,xmax,ymin,ymax]) # window size\n",
" plt.plot([xmin,xmax],[0,0],'b') # blue x axis\n",
" plt.plot([0,0],[ymin,ymax], 'b') # blue y axis\n",
" plt.plot(x, y, 'ro')\n",
" print(\" \")\n",
" plt.grid() # displays grid lines on graph\n",
" plt.show()\n",
" guess = input(\"Enter the coordinates of the red point point: \\n\")\n",
" guess_array = guess.split(\",\")\n",
" xguess = int(guess_array[0])\n",
" yguess = int(guess_array[1])\n",
" if xguess == xpoint and yguess == ypoint:\n",
" score = score + 1\n",
"\n",
"print(\"Your score: \", score) # notice this is not in the loop\n",
"\n",
"\n",
"# Only change code above this line\n",
"import math_code_test_b as test\n",
"test.step08(score)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "wvdngkOTF4Hi"
},
"source": [
"# Step 9 - Graphing Linear Equations"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "fTzBZAmtF4Hj"
},
"source": [
"Besides graphing points, you can graph <i>linear equations</i> (or <i>functions</i>). The graph will be a straight line, and the equation will not have any exponents. For these graphs, you will import `numpy` and use the `linspace()` function to define the x values. That function takes three arguments: starting number, ending number, and number of steps. Notice the `plot()` function only has two arguments: the x values and a function (y = 2x - 3) for the y values. Run this code, then use the same x values to graph `y = -x + 3`."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"id": "xJ0pkcFsF4Hj"
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" \n",
"Code test passed\n",
"Go on to the next step\n"
]
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"xmin = -10\n",
"xmax = 10\n",
"ymin = -10\n",
"ymax = 10\n",
"\n",
"fig, ax = plt.subplots()\n",
"plt.axis([xmin,xmax,ymin,ymax]) # window size\n",
"plt.plot([xmin,xmax],[0,0],'b') # blue x axis\n",
"plt.plot([0,0],[ymin,ymax], 'b') # blue y axis\n",
"\n",
"x = np.linspace(-9,9,36)\n",
"\n",
"# Only change the next line to graph y = -x + 3\n",
"plt.plot(x, -x + 3)\n",
"\n",
"\n",
"\n",
"plt.show()\n",
"\n",
"\n",
"# Only change code above this line\n",
"import math_code_test_b as test\n",
"test.step09(In[-1].split('# Only change code above this line')[0])"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Q19Wm90DF5zf"
},
"source": [
"# Step 10 - Creating Interactive Graphs"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "JNEjD9DxF5zh"
},
"source": [
"Like the previous graphs, you will graph a line. This time, you will create two sliders to change the <i>slope</i> and the <i>y intecept</i>. Notice the additional imports and other changes: You define a function with two arguments. All of the graphing happens within that `f(m,b)` function. The `interactive()` function calls your defined function and sets the boundaries for the sliders. Run this code then adjust the sliders and notice how they affect the graph."
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"id": "9lh41CENF5zh"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Code test Passed\n",
"Go on to the next step\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "d6383a6f6753416885483724ae1c2bef",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"interactive(children=(IntSlider(value=0, description='m', max=9, min=-9), IntSlider(value=0, description='b', …"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%matplotlib inline\n",
"from ipywidgets import interactive\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"# Define the graphing function\n",
"def f(m, b):\n",
" xmin = -10\n",
" xmax = 10\n",
" ymin = -10\n",
" ymax = 10\n",
" plt.axis([xmin,xmax,ymin,ymax]) # window size\n",
" plt.plot([xmin,xmax],[0,0],'black') # black x axis\n",
" plt.plot([0,0],[ymin,ymax], 'black') # black y axis\n",
" plt.title('y = mx + b')\n",
" x = np.linspace(-10, 10, 1000)\n",
" plt.plot(x, m*x+b)\n",
" plt.show()\n",
"\n",
"# Set up the sliders\n",
"interactive_plot = interactive(f, m=(-9, 9), b=(-9, 9))\n",
"interactive_plot\n",
"\n",
"\n",
"# Just run this code and use the sliders\n",
"import math_code_test_b as test\n",
"test.step01()\n",
"interactive_plot"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "YSY2k7S3F6d7"
},
"source": [
"# Step 11 - Graphing Systems"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "8MG28-VPF6d8"
},
"source": [
"When you graph two equations on the same coordinate plane, they are a <i>system of equations</i>. Notice how the `points` variable defines the number of points and the `linspace()` function uses that variable. Run this code to see the graph, then change `y2` so that it graphs y = -x - 3."
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"id": "wYHGm-PAF6d9"
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" \n",
"Code test passed\n",
"Go on to the next step\n"
]
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"\n",
"xmin = -10\n",
"xmax = 10\n",
"ymin = -10\n",
"ymax = 10\n",
"points = 2*(xmax-xmin)\n",
"\n",
"# Define the x values once\n",
"x = np.linspace(xmin,xmax,points)\n",
"\n",
"fig, ax = plt.subplots()\n",
"plt.axis([xmin,xmax,ymin,ymax]) # window size\n",
"plt.plot([xmin,xmax],[0,0],'b') # blue x axis\n",
"plt.plot([0,0],[ymin,ymax], 'b') # blue y axis\n",
"\n",
"# line 1\n",
"y1 = 2*x\n",
"plt.plot(x, y1)\n",
"\n",
"# line 2\n",
"y2 = -x - 3\n",
"plt.plot(x, y2)\n",
"\n",
"plt.show()\n",
"\n",
"\n",
"# Only change code above this line\n",
"import math_code_test_b as test\n",
"test.step11(In[-1].split('# Only change code above this line')[0])"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ykj42UNeF7K5"
},
"source": [
"# Step 12 - Systems of Equations - Algebra"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "n_-rpo6nF7K7"
},
"source": [
"In a system of equations, the solution is the point where the two equations intersect, the (x,y) values that work in each equation. To work with algabraic expressions, you will import `sympy` and define x and y as symbols. If you have two equations and two variables, set each equation equal to zero. The `linsolve()` function takes the non-zero side of each equation and the variables used. Notice the syntax. Run the code, then change the two equations to solve 2x + y - 15 = 0 and 3x - y = 0."
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"id": "6dFzZfqRF7K7"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{(3, 9)}\n",
" \n",
"Code test passed\n",
"Go on to the next step\n"
]
}
],
"source": [
"from sympy import *\n",
"x,y = symbols('x y')\n",
"\n",
"\n",
"# Change the equations in the following line:\n",
"print(linsolve([2*x + y - 15, 3*x - y], (x, y)))\n",
"\n",
"\n",
"# Only change code above this line\n",
"import math_code_test_b as test\n",
"test.step12(In[-1].split('# Only change code above this line')[0])"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "QSKeBTgXHRAv"
},
"source": [
"# Step 13 - Solutions as Coordinates"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "D2Ca3L-fHCzi"
},
"source": [
"The `linsolve()` function returns a <i>finite set</i>, and you can convert that \"finite set\" into (x,y) coordinates. Notice how the code parses the `solution` variable into two separate variables. Just run the code to see how this works."
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"id": "7uhBD85SHK3S"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"x = 0\n",
"y = 0\n",
" \n",
"Solution: ( 0 , 0 )\n",
"Code test Passed\n",
"Go on to the next step\n"
]
}
],
"source": [
"from sympy import *\n",
"x,y = symbols('x y')\n",
"\n",
"# Use variables for each equation\n",
"first = x + y\n",
"second = x - y\n",
"\n",
"# parse finite set answer as coordinate pair\n",
"solution = linsolve([first, second], (x, y))\n",
"x_solution = solution.args[0][0]\n",
"y_solution = solution.args[0][1]\n",
"\n",
"print(\"x = \", x_solution)\n",
"print(\"y = \", y_solution)\n",
"print(\" \")\n",
"print(\"Solution: (\",x_solution,\",\",y_solution,\")\")\n",
"\n",
"\n",
"# Just run this code\n",
"import math_code_test_b as test\n",
"test.step01()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "0epVLhL0F88U"
},
"source": [
"# Step 14 - Systems from User Input"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "VhoI5uNrF88V"
},
"source": [
"For more flexibility, you can get each equation as user input (instead of defining them in the code). Run this code and try it out - to solve any system of two equations."
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"id": "8irtXhucF88W"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Remember to use Python syntax with x and y as variables\n",
"Notice how each equation is already set equal to zero\n"
]
},
{
"name": "stdin",
"output_type": "stream",
"text": [
"Enter the first equation: 0 = 1.5*x-6\n",
"Enter the second equation: 0 = -2*x +3*y +9\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"x = 4.00000000000000\n",
"y = -0.333333333333333\n",
" \n",
"If you didn't get a syntax error, code test passed\n"
]
}
],
"source": [
"from sympy import *\n",
"\n",
"x,y = symbols('x y')\n",
"print(\"Remember to use Python syntax with x and y as variables\")\n",
"print(\"Notice how each equation is already set equal to zero\")\n",
"first = input(\"Enter the first equation: 0 = \")\n",
"second = input(\"Enter the second equation: 0 = \")\n",
"solution = linsolve([first, second], (x, y))\n",
"x_solution = solution.args[0][0]\n",
"y_solution = solution.args[0][1]\n",
"\n",
"print(\"x = \", x_solution)\n",
"print(\"y = \", y_solution)\n",
"\n",
"\n",
"# Just run this code and test it with different equations\n",
"import math_code_test_b as test\n",
"test.step14()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "8FCFQaq1Hizh"
},
"source": [
"# Step 15 - Solve and graph a system"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "wMwKLQvyHaWp"
},
"source": [
"Now you can put it all together: solve a system of equations, graph the system, and plot a point where the two lines intersect. Notice how this code is not like the previous solving equations code or the graphing code or the user input code. Python uses `sympy` to get the (x,y) solution and `numpy` to get the values to graph, so the user inputs nummerical values and the code uses them in two different ways. Think about how you would do this if the user input values for ax + by = c."
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"id": "wLBNm5j6HffY"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"First equation: y = mx + b\n"
]
},
{
"name": "stdin",
"output_type": "stream",
"text": [
"Enter m and b, separated by a comma: 3, -4\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Second equation: y = mx + b\n"
]
},
{
"name": "stdin",
"output_type": "stream",
"text": [
"Enter m and b, separated by a comma: -2, 7\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAioAAAGdCAYAAAA8F1jjAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABNJ0lEQVR4nO3deXhU5eH28e9k3xPISiAQFtmUTZawKiqyqAhqrbVqQcG2gFjApdIq1gVxaV1qUd+fiNi61raC4IqIrAEEDW6ggoQEQgIEkiGBrHPePw6kUlkCzMwzy/25rrmuJzMnM/cYMrk9zznPcViWZSEiIiLig0JMBxARERE5HhUVERER8VkqKiIiIuKzVFRERETEZ6moiIiIiM9SURERERGfpaIiIiIiPktFRURERHxWmOkAZ8rlclFUVER8fDwOh8N0HBEREWkEy7I4cOAAmZmZhIQcf7+J3xeVoqIisrKyTMcQERGR01BYWEiLFi2O+7jfF5X4+HjAfqMJCQmG04gxtVXw4iVQ+h10GgWjZ5tOFNAqKyEz0x4XFUFsrNk8cnyLvylm6hsbSYwO46Npg4mOCDUdSQQAp9NJVlZWw9/x4/H7onJkuichIUFFJaglwLX/D+ZcDD+8DTuuhs6Xmw4VsEJ/9LcuIUFFxZe99vlXhETGMOb8dqSnNDEdR+QnTnbYhg6mlcDRvCcMnGKPF02Fyr1G44iY9nnBftZv309EaAi/6tfKdByR06KiIoHl/N9DWmc4uBfevd10GhGj5qzcBsDl3TNJS4gynEbk9KioSGAJi4TRz4IjFL5+y76JBKHCfQd578tdAIwb2NpwGpHTp6IigSezOwy6zR6/cxtU7DEaR8SEeavzcVkw6KwUOjXT8Xviv1RUJDCddweknwMHS+GdaWBZphOJeI2zqpY3Pi0EtDdF/J+KigSmsAh7CigkDDa9DV/923QiEa95fV0BFdV1nJUWx/ntU03HETkjKioSuJp1hfPutMfv3g4HSszmEfGC2noX81blAzB+UGut2C1+T0VFAtugaZDRFQ7tt09Z1hSQBLh3v9xFUXkVKXERjOre3HQckTOmoiKBLTT88BRQOHz7Dnz5pulEIh5jWRYvHD4l+Ya+2USFaxVa8X8qKhL4Ms6Bwb+3x+/eAc5dZvOIeMi6bfv4Ykc5kWEhXN+3pek4Im6hoiLBYcBUyOwBVWWwaIqmgCQgHVng7aqeLUiOizScRsQ9PFpUZs2aRe/evYmPjyctLY3Ro0fz7bffHrVNVVUVkyZNIjk5mbi4OK666ipKSnTQo7hZaJg9BRQaAd+9DxtfM51IxK227a3ko032Z+dNA3RKsgQOjxaVZcuWMWnSJNasWcPixYupra1l6NChVFZWNmwzdepUFi5cyJtvvsmyZcsoKiriyiuv9GQsCVZpnWDwdHv83l3gLDKbR8SN5q7chmXBRR3TaJcWZzqOiNs4LMt7+8D37NlDWloay5Yt47zzzqO8vJzU1FReffVVfvaznwGwefNmOnXqRG5uLn379j3pczqdThITEykvL9fVk+Xk6utg7lDYuQHaXQzXvQk6ffOUVVZC3OG/hRUVunqyafsra+j38BKqal28enMO/dummI4kclKN/fvt1WNUysvLAWjatCkAGzZsoLa2liFDhjRs07FjR1q2bElubu4xn6O6uhqn03nUTaTRGqaAImHLYvj8ZdOJRM7Yq+sKqKp1cXZmAv3aJJuOI+JWXisqLpeLKVOmMGDAAM455xwAiouLiYiIICkp6aht09PTKS4uPubzzJo1i8TExIZbVlaWp6NLoEntABf+0R6/Px3KCs3mETkD1XX1zFudD2iBNwlMXisqkyZN4quvvuL1118/o+eZPn065eXlDbfCQv2RkdPQ7xZo0RtqDsDbk3UWkPitt/OK2HOgmoyEKC7tkmk6jojbeaWo3HLLLSxatIilS5fSokWLhvszMjKoqamhrKzsqO1LSkrIyMg45nNFRkaSkJBw1E3klIWE2lNAYVHww1LYMM90IpFT9uMF3sb0zyYiTCtOSODx6L9qy7K45ZZbeOutt/j4449p3froU+Z69uxJeHg4S5Ysabjv22+/paCggH79+nkymgiknAUXzbDHH94NZQVm84icopVb9rK5+AAxEaH8so8WeJPAFObJJ580aRKvvvoqCxYsID4+vuG4k8TERKKjo0lMTGTcuHFMmzaNpk2bkpCQwOTJk+nXr1+jzvgROWM5v4Vv3obCNbBgEtywAEL0f6XiH+assPem/LxXFokx4YbTiHiGRz+Rn332WcrLyxk8eDDNmjVruL3xxhsN2zzxxBNcdtllXHXVVZx33nlkZGTwn//8x5OxRP4rJBRGPwNh0bBtOWyYazqRSKN8V3KAZd/tweGAGwdkm44j4jFeXUfFE7SOirjFmufg/d9DeCxMXA1Nsk0n8mlaR8W83//rC95YX8jwszN47oaepuOInDKfXEdFxGf1+TW0GgC1lbDgFnC5TCcSOa49B6p56/OdANx8npbLl8CmoiIC9nEpo2ZDeAzkr4BP55hOJHJc/1iznZp6F92zkji3ZRPTcUQ8SkVF5IimreHi++3xR/fCvh/M5hE5hqrael5esx2Amwe10QJvEvBUVER+rNc4yB4EtQdh/iRNAYnP+c9nO9lXWUPzpGiGnZ1uOo6Ix6moiPzYkSmgiDgoWA1rnzOdSKSBy2UxZ6W9p++mga0JC9VHuAQ+/SsX+V9NWv13CmjJ/bB3i9k8Iod98t1ufthTSXxkGD/v1eLk3yASAFRURI6l103QZjDUHYIFE8FVbzqRCM8vtxd4uzanJfFRWuBNgoOKisixOBxw+dMQEQ+Fa2HNM6YTSZD7amc5uT+UEhriYEz/bNNxRLxGRUXkeJJawrCZ9njJA7DnO7N5JKgdufjgpV2a0Twp2nAaEe9RURE5kXN/BW0vgvpqmD9BU0BiRHF5FQs3FgEwfpAWeJPgoqIiciJHpoAiE2Hnelj9tOlEEoTmrc6nzmXRp3VTurZIMh1HxKtUVEROJrE5DJ9lj5fOhN2bzeaRoFJZXcera+0F3sYP1N4UCT4qKiKN0f2XcNYwqK+B+b+F+jrTiSRIvLm+EGdVHdnJMQzppAXeJPioqIg0hsMBI5+CqEQo+hxWPWE6kQSBepfF3FX5AIwb2JqQEC2XL8FHRUWksRKawYhH7fEnj0DJ12bzSMBb/E0xBfsOkhQTzlU9tcCbBCcVFZFT0fUa6HAJuGrhrd9Cfa3pRBLA5qywT0m+LqclMRFhhtOImKGiInIqHA647EmIbgLFX8BKTQGJZ3xesJ/12/cTHupgTL9s03FEjFFRETlV8ekw4jF7vOwR2PWF2TwSkOYcXuDt8m7NSUuIMpxGxBwVFZHT0eVn0PEycNXB/IlQV2M6kQSQwn0Hee/LXYAWeBNRURE5HQ4HXPYERDeFki9hxV9MJ5IAMm91Pi4LBrZLoVOzBNNxRIxSURE5XXFpcOnhgrLiz1CUZzSOBAZnVS1vfFoIaG+KCKioiJyZc66EzqM0BSRu88a6Qiqq6zgrLY7z26eajiNinIqKyJm69HGISYHdX8PyR02nET9WW+/ixVX2QbTjB7XG4dACbyIqKiJnKjYFLnvcHq94HHZ+ZjaP+K33viqmqLyKlLgIRnVvbjqOiE9QURFxh86j4OwrwaqH+ROgrtp0IvEzlmUxZ8UPANzQN5uo8FDDiUR8g4qKiLtc8meITYU9m+GTWabTiJ/5NH8/X+woJzIshOv7tjQdR8RnqKiIuEtssn3KMsCqp2DHBrN5xK88f3hvypXnNic5LtJwGhHfoaIi4k6dRkKXn4Plgvm/hdoq04nED2zbW8lHm0oAGDewjeE0Ir5FRUXE3UY8AnHpsPc7WDrTdBrxA3NXbsOy4MKOabRLizMdR8SnqKiIuFtMU/vChQCrn4aCtUbjiG8rO1jDmxsOL/A2UAu8ifwvFRURT+h4CXS7FrBgwUSoPWQ6kfioV9YWUFXronOzBPq1TTYdR8TnqKiIeMrwWRDfDEq3wMcPmk4jPqi6rp55q/MBLfAmcjwqKiKeEt0
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" \n",
"Solution: ( 2.2 , 2.6 )\n"
]
}
],
"source": [
"from sympy import *\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"print(\"First equation: y = mx + b\")\n",
"mb_1 = input(\"Enter m and b, separated by a comma: \")\n",
"mb_in1 = mb_1.split(\",\")\n",
"m1 = float(mb_in1[0])\n",
"b1 = float(mb_in1[1])\n",
"\n",
"print(\"Second equation: y = mx + b\")\n",
"mb_2 = input(\"Enter m and b, separated by a comma: \")\n",
"mb_in2 = mb_2.split(\",\")\n",
"m2 = float(mb_in2[0])\n",
"b2 = float(mb_in2[1])\n",
"\n",
"# Solve the system of equations\n",
"x,y = symbols('x y')\n",
"first = m1*x + b1 - y\n",
"second = m2*x + b2 - y\n",
"solution = linsolve([first, second], (x, y))\n",
"x_solution = round(float(solution.args[0][0]),3)\n",
"y_solution = round(float(solution.args[0][1]),3)\n",
"\n",
"# Make sure the window includes the solution\n",
"xmin = int(x_solution) - 20\n",
"xmax = int(x_solution) + 20\n",
"ymin = int(y_solution) - 20\n",
"ymax = int(y_solution) + 20\n",
"points = 2*(xmax-xmin)\n",
"\n",
"# Define the x values once for the graph\n",
"graph_x = np.linspace(xmin,xmax,points)\n",
"\n",
"# Define the y values for the graph\n",
"y1 = m1*graph_x + b1\n",
"y2 = m2*graph_x + b2\n",
"\n",
"fig, ax = plt.subplots()\n",
"plt.axis([xmin,xmax,ymin,ymax]) # window size\n",
"plt.plot([xmin,xmax],[0,0],'b') # blue x axis\n",
"plt.plot([0,0],[ymin,ymax], 'b') # blue y axis\n",
"\n",
"# line 1\n",
"plt.plot(graph_x, y1)\n",
"\n",
"# line 2\n",
"plt.plot(graph_x, y2)\n",
"\n",
"# point\n",
"plt.plot([x_solution],[y_solution],'ro')\n",
"\n",
"plt.show()\n",
"print(\" \")\n",
"print(\"Solution: (\", x_solution, \",\", y_solution, \")\")\n",
"\n",
"\n",
"# Run this code and test it with different equations\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "BhKPZQJZF9w0"
},
"source": [
"# Step 16 - Quadratic Functions"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "BYmD2FYHF9w1"
},
"source": [
"Any function that involves x<sup>2</sup> is a \"quadratic\" function because \"x squared\" could be the area of a square. The graph is a parabola. The formula is y = ax<sup>2</sup> + bx + c, where `b` and `c` can be zero but `a` has to be a number. Here is a graph of the simplest parabola."
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"id": "sfQl_A1CF9w1"
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Code test Passed\n",
"Go on to the next step\n"
]
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"xmin = -10\n",
"xmax = 10\n",
"ymin = -10\n",
"ymax = 10\n",
"points = 2*(xmax-xmin)\n",
"x = np.linspace(xmin,xmax,points)\n",
"\n",
"fig, ax = plt.subplots()\n",
"plt.axis([xmin,xmax,ymin,ymax]) # window size\n",
"plt.plot([xmin,xmax],[0,0],'b') # blue x axis\n",
"plt.plot([0,0],[ymin,ymax], 'b') # blue y axis\n",
"\n",
"y = x**2\n",
"\n",
"plt.plot(x,y)\n",
"plt.show()\n",
"\n",
"# Just run this code. The next step will transform the graph\n",
"import math_code_test_b as test\n",
"test.step01()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "I0mklEluF-jI"
},
"source": [
"# Step 17 - Quadratic Function ABC's"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "AJuHf8ySF-jJ"
},
"source": [
"Using the parabola formula y = ax<sup>2</sup> + bx + c, you will change the values of `a`, `b`, and `c` to see how they affect the graph. Run the code and use the sliders to change the values of `a` and `b`. Then change the code in the three places indicated to add a slider for `c`. You may remember this type of interactive graph from an earlier step. Move each slider to see how it affects the graph."
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"id": "9IVFnXxVF-jJ"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Code test passed\n",
"Go on to the next step\n",
" \n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "4cb4d8bcffc346459faa561fb2b649e7",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"interactive(children=(IntSlider(value=0, description='a', max=9, min=-9), IntSlider(value=0, description='b', …"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%matplotlib inline\n",
"from ipywidgets import interactive\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"# Change the next line to include c:\n",
"def f(a,b, c):\n",
" plt.axis([-10,10,-10,10]) # window size\n",
" plt.plot([-10,10],[0,0],'k') # blue x axis\n",
" plt.plot([0,0],[-10,10], 'k') # blue y axis\n",
" x = np.linspace(-10, 10, 1000)\n",
"\n",
" # Change the next line to add c to the end of the function:\n",
" plt.plot(x, a*x**2 + b*x + c)\n",
" plt.show()\n",
"\n",
"# Change the next line to add a slider to change the c value\n",
"interactive_plot = interactive(f, a=(-9, 9), b=(-9,9), c=(-9, 9))\n",
"interactive_plot\n",
"\n",
"\n",
"# Run the code once, then change the code and run it again\n",
"\n",
"# Only change code above this line\n",
"import math_code_test_b as test\n",
"test.step17(In[-1].split('# Only change code above this line')[0])\n",
"interactive_plot"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "eFehWNexGASC"
},
"source": [
"# Step 18 - Quadratic Functions - Vertex"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "p8hAZw_CGASD"
},
"source": [
"The <i>vertex</i> is the point where the parabola turns around. The x value of the vertex is $\\frac{-b}{2a}$ (and then you would calculate the y value to get the point). Write the code to find the vertex, given `a`, `b`, and `c` as inputs. Remember the parabola forumula is y = ax<sup>2</sup> + bx + c"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"id": "cjMI5uZZGASD"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"y = ax² + bx + c\n"
]
},
{
"name": "stdin",
"output_type": "stream",
"text": [
"a = 2\n",
"b = 1.89\n",
"c = 4.28\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" ( -0.4725 , 3.8334875000000004 )\n",
" \n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" \n",
"Code test passed\n",
"Go on to the next step\n"
]
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"# \\u00b2 prints 2 as an exponent\n",
"print(\"y = ax\\u00b2 + bx + c\")\n",
"\n",
"a = float(input(\"a = \"))\n",
"b = float(input(\"b = \"))\n",
"c = float(input(\"c = \"))\n",
"\n",
"# Write your code here, changing vx and vy\n",
"vx = -b/(2*a)\n",
"vy = a*vx**2 + b*vx + c\n",
"\n",
"\n",
"# Only change the code above this line\n",
"\n",
"print(\" (\", vx, \" , \", vy, \")\")\n",
"print(\" \")\n",
"\n",
"xmin = int(vx)-10\n",
"xmax = int(vx)+10\n",
"ymin = int(vy)-10\n",
"ymax = int(vy)+10\n",
"points = 2*(xmax-xmin)\n",
"x = np.linspace(xmin,xmax,points)\n",
"\n",
"fig, ax = plt.subplots()\n",
"plt.axis([xmin,xmax,ymin,ymax]) # window size\n",
"plt.plot([xmin,xmax],[0,0],'b') # blue x axis\n",
"plt.plot([0,0],[ymin,ymax], 'b') # blue y axis\n",
"\n",
"plt.plot([vx],[vy],'ro') # vertex\n",
"\n",
"x = np.linspace(vx-10,vx+10,100)\n",
"y = a*x**2 + b*x + c\n",
"plt.plot(x,y)\n",
"\n",
"plt.show()\n",
"\n",
"\n",
"# Only change code above this line\n",
"import math_code_test_b as test\n",
"test.step18(In[-1].split('# Only change code above this line')[0])"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "WbqugasGGCKJ"
},
"source": [
"# Step 19 - Projectile Motion"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "TtM_pFHaGCKK"
},
"source": [
"The path of every projectile is a parabola. For something thrown or launched upward, the `a` value is -4.9 (meters per second squared); the `b` value is the initial velocity (in meters per second); the `c` value is the initial height (in meters); the `x` value is time (in seconds); and the `y` value is the height at that time. In this code, change `vx` and `vy` to represent the vertex. Plotting that (x,y) vertex point is already in the code."
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"id": "FTNV_bjuGCKL"
},
"outputs": [
{
"name": "stdin",
"output_type": "stream",
"text": [
"Initial velocity = 10\n",
"Initial height = 3\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" ( 1.0204081632653061 , 8.102040816326529 )\n",
" \n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" \n",
"Code test passed\n",
"Go on to the next step\n"
]
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"a = -4.9\n",
"b = float(input(\"Initial velocity = \"))\n",
"c = float(input(\"Initial height = \"))\n",
"\n",
"# Change vx and vy to represent the vertex\n",
"vx = -b/(2*a)\n",
"vy = a*vx**2 + b*vx + c\n",
"\n",
"\n",
"# Also change the following dimensions to display the vertex\n",
"xmin = -10\n",
"xmax = 10\n",
"ymin = -10\n",
"ymax = 10\n",
"\n",
"# You do not need to change anything below this line\n",
"points = 2*(xmax-xmin)\n",
"x = np.linspace(xmin,xmax,points)\n",
"y = a*x**2 + b*x + c\n",
"\n",
"fig, ax = plt.subplots()\n",
"plt.axis([xmin,xmax,ymin,ymax]) # window size\n",
"plt.plot([xmin,xmax],[0,0],'b') # blue x axis\n",
"plt.plot([0,0],[ymin,ymax], 'b') # blue y axis\n",
"\n",
"plt.plot(x,y) # plot the line for the equation\n",
"plt.plot([vx],[vy],'ro') # plot the vertex point\n",
"\n",
"print(\" (\", vx, \",\", vy, \")\")\n",
"print(\" \")\n",
"plt.show()\n",
"\n",
"\n",
"# Only change code above this line\n",
"import math_code_test_b as test\n",
"test.step19(In[-1].split('# Only change code above this line')[0])"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "hN_fvENUGBAm"
},
"source": [
"# Step 20 - Quadratic Functions - C"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "GrJNli5pGBAn"
},
"source": [
"Like many other functions, the `c` value (also called the \"constant\" because it is not a variable) affects the vertical shift of the graph. Run the following code to see how changing the `c` value changes the graph."
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"id": "hiSN0VexGBAn"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Code test Passed\n",
"Go on to the next step\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import time\n",
"from IPython import display\n",
"\n",
"x = np.linspace(-4,4,16)\n",
"fig, ax = plt.subplots()\n",
"cvalue = \"c = \"\n",
"\n",
"for c in range(10):\n",
" y = -x**2+c\n",
" plt.plot(x,y)\n",
" cvalue = \"c = \", c\n",
" ax.set_title(cvalue)\n",
" display.display(plt.gcf())\n",
" time.sleep(0.5)\n",
" display.clear_output(wait=True)\n",
"\n",
"# Just run this code\n",
"import math_code_test_b as test\n",
"test.step01()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "vteEy9QFGD5I"
},
"source": [
"# Step 21 - The Quadratic Formula"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "xALyhEsNGD5J"
},
"source": [
"For a projectile, you also need to find the point when it hits the ground. On a graph, you would call these points the \"roots\" or \"x intercepts\" or \"zeros\" (because y = 0 at these points). The <i>quadratic formula</i> gives you the x value when y = 0. Given `a`,`b` and `c`, here is the quadratic formula:<br> x = $\\frac{-b \\pm \\sqrt{b^2 - 4ac}}{2a}$ Notice it's the vertex plus or minus something: $\\frac{-b}{2a} + \\frac{\\sqrt{b^2 - 4ac}}{2a}$ and $\\frac{-b}{2a} - \\frac{\\sqrt{b^2 - 4ac}}{2a}$ <br>\n",
"Write the code to output two x values, given a, b, and c as input. Use `math.sqrt()` for the square root."
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"id": "R3OIh1pOGD5K"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 = ax² + bx + c\n"
]
},
{
"name": "stdin",
"output_type": "stream",
"text": [
"a = -2\n",
"b = 26\n",
"c = 20\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"The roots are -0.7284161474004804 and 13.72841614740048\n",
" \n",
"Code test passed\n",
"Go on to the next step\n"
]
}
],
"source": [
"import math\n",
"\n",
"# \\u00b2 prints 2 as an exponent\n",
"print(\"0 = ax\\u00b2 + bx + c\")\n",
"a = float(input(\"a = \"))\n",
"b = float(input(\"b = \"))\n",
"c = float(input(\"c = \"))\n",
"x1 = 0\n",
"x2 = 0\n",
"\n",
"# Check for non-real answers:\n",
"if b**2-4*a*c < 0:\n",
" print(\"No real roots\")\n",
"else:\n",
" # Write your code here, changing x1 and x2\n",
" x1 = (-b + math.sqrt(b**2 - 4*a*c))/(2*a)\n",
" x2 = (-b - math.sqrt(b**2 - 4*a*c))/(2*a)\n",
" print(\"The roots are \", x1, \" and \", x2)\n",
"\n",
"\n",
"\n",
"# Only change code above this line\n",
"import math_code_test_b as test\n",
"test.step21(In[-1].split('# Only change code above this line')[0])"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "VXxx7RCVSs4j"
},
"source": [
"# Step 22 - Table of Values"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "9Bd8bgPISiRH"
},
"source": [
"In addition to graphing a function, you may need a table of values. This code shows how to make a simple table of (x,y) values. Run the code, then change the title to \"y = 3x + 2\" and change the function in the table."
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"id": "e4dBSioJGGd3"
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAg0AAAGbCAYAAABHz6NXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAq/0lEQVR4nO3dfViUZaLH8d8w6kiKKAohxxCz0kmLwszQMCwPRS1HzcxcMbSstgUL3dzs6lBea7512o7lC7WlUCFp7UmtdtIlTUWEEso2d1HTMNdXNBMVX5vh/LGXnOW46j0wwzPh93Nd/DHPc/Pw+6N79+f93PM8tpqamhoBAABcRJDVAQAAwM8DpQEAABihNAAAACOUBgAAYITSAAAAjFAaAACAEUoDAAAwQmkAAABGKA0AAMAIpQEAABihNABN2IkTJ/Twww+rZ8+eCg0NVevWrRUbG6tXXnlFZ86csTrev7R582b99re/1Q033KCQkBB17NhR99xzj0pLS62OBlzybLx7Ami6Dh06pLvvvlv9+/dXTEyMgoKCtH79euXl5emBBx5Qfn6+1RHP8dRTT2n+/PkaOnSobr75ZlVVVen111/Xjh07tHz5cg0cONDqiMAli9IAXILGjRunOXPmaO/evYqMjPTL30hMTFRMTIxyc3O9+r2ysjJ169ZNrVu3rj32ww8/yOl06pprrtG6det8nBSAKW5PAD722WefyWazacmSJeecy8/Pl81mU3FxsQXJ/k9MTIwk6fDhw5KkyspKhYeHKzExUf/874ht27apVatWGj58eKNl69WrV53CIEnt27dXQkKCysvLGy0HgHM1szoA0NQkJibqiiuu0MKFCzVkyJA65xYuXKiuXbsqPj7+vL/v8Xh06NAho78VGhqq5s2bX3Tc6dOndeTIEZ04cUKlpaV66aWX1LlzZ1111VWSpIiICGVnZ2vYsGGaPXu2nnjiCXk8Ho0ePVohISGaN2+eUR5/2rdvnzp06GB1DOCSRmkAfMxmsyk1NVUvv/yyqqqqFBoaKkk6cOCA/vznP+vZZ5+94O/v3LlTXbp0Mfpbn332mRITEy867oMPPtCIESNqP990001asGCBmjX7v/8JuO+++zRixAg988wzSk5O1rJly1RUVKSlS5eqffv2Rnn8pbCwUMXFxfrP//xPS3MAlzr2NAB+sHnzZjmdTr355pt6+OGHJUlz5szRuHHj9O2339b+C/9fOXnypPF9+169eqldu3YXHbd//3598803Onz4sFauXKmvv/5aL7/8sm655ZY64w4dOqSePXsqPDxcW7du1bBhw/T2229f9PpnzpxRVVVVnWODBg1SdHS0Zs+eXed4WFiYgoLM74xWVlaqV69eatGihb7++utzbl0AaDyUBsBPbr75ZrVu3VqrVq2SpNpbElbvZ5CkadOmafr06fr222/P2Qj5xz/+UcOGDdPll1+uzZs3q23bthe93urVqzVgwACjv11RUVG7p+JiqqurNWDAAG3dulXr1q1Tz549jX4PgH9wewLwkwcffFBPPvmkdu3apVOnTqmkpERz5sy56O+53W4dOHDA6G+EhYWpRYsWXme777779Oyzz2rZsmV67LHH6pxbsWKFJOnHH3/Url27jEpDbGysCgoK6hz7zW9+o8jISE2cOLHOcdNva5w+fVr33nuv/vKXv2jFihUUBiAAUBoAP3nggQc0YcIEvfvuuzpx4oSaN29u9C2Ev//97z7f0/D/nThxQpLOuaWwfPlyvfnmm/rtb3+rhQsXKi0tTZ9//nmdvQ//Srt27c55fkK7du3UsWPHej1XwePx6MEHH9TKlSv13nvv6bbbbvP6GgB8j9IA+EmHDh2UnJysvLw8nTx5UnfddZfR7v/IyMhz/tV+PrGxsRc8f/DgQbVv3142m63O8TfffFPSPzZEnnX48GGNHTtWN998s6ZNm6YBAwYoOTlZ06ZN03PPPWeUx1fGjRunxYsX6/XXX9e9997bqH8bwPlRGgA/evDBB3XfffdJkqZMmWL0Oy1btvTZUw/z8vL02muvafDgwbryyit19OhRrVixQgUFBUpJSdHtt99eO/bJJ5/UDz/8oE8//VR2u1133XWXxo4dqxdeeEGDBg26aEHxlVmzZmnevHmKj4/XZZddpry8vDrnhwwZolatWjVKFgB1sRES8KPTp08rMjJSHo9H+/btU8uWLRv175eWlurFF1/U559/rv3796tZs2bq1q2bUlNTNW7cuNrbDh9++KEGDRqk3//+95owYULt7x89elTXXXed2rZtqw0bNhg9E+Ks+j4RcvTo0XrrrbfOe96bjZQAfIvSAPjRTz/9pKioKKWkpGj+/PlWxwGABuEx0oAfLV26VAcOHNCDDz5odRQAaDBWGgA/+Pzzz/WXv/xFU6ZMUYcOHfTll19aHQkAGoyVBsAPsrOz9fjjjysiIsLoiYoA8HPASgMAADDCSgMAADBCaQAAAEYoDQAAwAilAQAAGKE0AAAAI5QGAABghNIAAACMUBoAAIARSgMAADDSzNcX3Llzpw4ePOjrywIIAKdOnZLD4bA6BgA/6NChg6Kjoy84xqelYefOnXI6nTp+/LgvLwsgQNjtdrndbqtjAPCDyy67TOXl5RcsDj4tDQcPHtTx48eVl5cnp9Ppy0sDsJjL5VJWVhbzG2iCysvLlZqaqoMHDzZeaTjL6XQqLi7OH5cGYJHy8nJJzG/gUsZGSAAAYITSAAAAjFAa4JUDBw4oMjJS06ZNqz22fv16tWjRQitXrrQwGYCGevvtt9W+fXudOnWqzvHBgwdr1KhRFqVCIKE0wCvh4eFasGCBJk+erNLSUh09elSjRo1SRkaG7rjjDqvjAWiAYcOGye1268MPP6w9VllZqT/96U966KGHLEyGQEFpgNfuvvtuPfLIIxo5cqR+9atfqVWrVpo+fbrVsQA0UHBwsH75y18qJyen9lheXp6io6OVmJhoXTAEDEoD6uWll17STz/9pPfff18LFy7kgT9AE/HII4/oz3/+s3bv3i1Jys3N1ejRo2Wz2SxOhkBAaUC9bN++XXv27JHH49GOHTusjgPAR2688UbFxsbq7bffVllZmf76179q9OjRVsdCgPDLcxrQtJ0+fVqpqakaPny4unXrprFjx+qbb75RRESE1dEA+MDYsWM1a9Ys7d69WwMHDtQVV1xhdSQECFYa4LVnn31WVVVVevXVV/X000/rmmuuYZMU0IT88pe/1K5du/TGG28wt1EHpQFeWb16tWbNmqV33nlHbdq0UVBQkN555x0VFhYqOzvb6ngAfCA0NFRDhw5V69atNXjwYKvjIIBwewJeSUxM1JkzZ+oci4mJUVVVlUWJAPjD7t27NXLkSDY5ow5KAwCg1o8//qjVq1dr9erVmjdvntVxEGD8UhpcLlfty20ANA1FRUWSmN9NXWZmpo4dO6bhw4ertLRUpaWlVkdCI6ioqDAaZ6upqanx1R8tLi5WQkKC3G63ry4JIIAEBQXJ4/FYHQOAH9jtdhUWFio+Pv68Y3y60uBwOOR2u5WXlyen0+nLSwOwmMvlUlZWFvMbaILKy8uVmpp60T0sfrk94XQ6FRcX549LA7DI2VsSzG/g0sVXLgEAgBFKA+pl7ty5iomJUcuWLdWnTx998cUXVkcC4CPMb5wPpQFeW7x4sSZMmKDnn39eX375pWJjY3XnnXeqsrLS6mgAGoj5jQuhNMBrL7/8sh555BGNGTNG1157rV577TVddtllWrBggdXRADQQ8xsXQmmAV06fPq2ysjINHDiw9lhQUJAGDhyo4uJiC5MBaCjmNy6G0gCvHDx4UG63W5dffnmd45dffrn27dtnUSoAvsD8xsVQGgAAgBFKA7zSoUMH2e127d+/v87x/fv3KzIy0qJUAHyB+Y2LoTTAKy1atFCvXr20cuXK2mMej0crV6684KNHAQQ+5jcuhrdcwmsTJkxQWlqabrrpJt18882aNWuWqqurNWbMGKujAWgg5jcuhNIArw0fPlwHDhzQc889p3379umGG27Q8uXLz9k8BeDnh/mNC6E0oF4yMjKUkZF
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" \n",
"Code test passed\n",
"Go on to the next step\n"
]
}
],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"ax = plt.subplot()\n",
"ax.set_axis_off()\n",
"title = \"y = 3x + 2\" # Change this title\n",
"cols = ('x', 'y')\n",
"rows = [[0,0]]\n",
"for a in range(1,10):\n",
" rows.append([a, 3*a+2]) # Change only the function in this line\n",
"\n",
"ax.set_title(title)\n",
"plt.table(cellText=rows, colLabels=cols, cellLoc='center', loc='upper left')\n",
"plt.show()\n",
"\n",
"\n",
"# Only change code above this line\n",
"import math_code_test_b as test\n",
"test.step22(In[-1].split('# Only change code above this line')[0])"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "jpo7oASHGEu7"
},
"source": [
"# Step 23 - Projectile Game"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "WHx9faGkGEu7"
},
"source": [
"Learn quadratic functions by building a projectile game. Starting at (0,0) you launch a toy rocket that must clear a wall. You can randomize the height and location of the wall. The goal is to determine what initial velocity would get the rocket over the wall. Bonus: make an animation of the path of the rocket.\n"
]
},
{
"cell_type": "code",
"execution_count": 222,
"metadata": {
"id": "-yFfSgoeWHN3"
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Write your code here\n",
"fix = plt.subplot()\n",
"xlo = -2\n",
"xhi = 20\n",
"ylo = -20\n",
"yhi = 120\n",
"plt.axis([xlo, xhi, ylo, yhi])\n",
"plt.plot([0, 0], [ylo, yhi], \"black\")\n",
"plt.plot([xlo, xhi], [0, 0], \"black\")\n",
"wall_distance = random.randint(2, xhi-2)\n",
"wall_height = random.randint(2, yhi-20)\n",
"plt.plot([wall_distance, wall_distance], [0, wall_height], \"brown\")\n",
"plt.grid()\n",
"display.display(plt.gcf())\n",
"\n",
"x = np.linspace(0, xhi, xhi*1000)\n",
"# a = -4.9\n",
"a = -2\n",
"c = 0\n",
"# b = float(input(\"We are standing at origin (0, 0), guess velocity at which we need to throw ball to cross the wall: \"))\n",
"b = 1\n",
"while a*wall_distance**2 + b*wall_distance + c < wall_height:\n",
" b += 1\n",
"plt.title(f\"Velocity of {b} should suffice when wall of {wall_height} height is {wall_distance} distance away.\")\n",
"y = a*x**2 + b*x + c\n",
"x2 = []\n",
"y2 = []\n",
"for i in range(len(y)):\n",
" if y[i] < 0:\n",
" break\n",
" x2.append(x[i])\n",
" y2.append(y[i])\n",
"\n",
"time.sleep(0.5)\n",
"display.clear_output(wait=True)\n",
"plt.plot(x2, y2, \"b\")\n",
"\n",
"ball = plt.plot([x2[0]], [y2[0]], 'ro')[0]\n",
"\n",
"for i in range(1, len(x2)):\n",
" if i%1000 != 0 and i < len(x2) - 2:\n",
" continue\n",
" display.display(plt.gcf())\n",
" time.sleep(0.5)\n",
" display.clear_output(wait=True)\n",
" ball.remove()\n",
" ball = plt.plot([x2[i]], [y2[i]], 'ro')[0]\n",
"\n",
"display.display(plt.gcf())\n",
"time.sleep(0.5)\n",
"display.clear_output(wait=True)\n",
"# This step does not have a test"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "pE5o0-VMaIy3"
},
"source": [
"# Step 24 - Define Graphing Functions"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "c5tXoITnag_P"
},
"source": [
"Building on what you have already done, create a menu with the following options:<br>\n",
"<ul>\n",
"<li>Display the graph and a table of values for any \"y=\" equation input</li>\n",
"<li>Solve a system of two equations without graphing</li>\n",
"<li>Graph two equations and plot the point of intersection</li>\n",
"<li>Given a, b and c in a quadratic equation, plot the roots and vertex</li>\n",
"</ul>\n",
"Then think about how you will define a function for each item."
]
},
{
"cell_type": "code",
"execution_count": 195,
"metadata": {
"id": "lvuStaKYalPo"
},
"outputs": [],
"source": [
"# Write your code here\n",
"from sympy.parsing.sympy_parser import parse_expr\n",
"def table_and_graph():\n",
" x, y = symbols(\"x y\")\n",
" eq = input(\"y = \")\n",
" expr = parse_expr(eq)\n",
" xlo = -10\n",
" xhi = 10\n",
" density = 5\n",
" points = (xhi-xlo) * density\n",
" x_inputs = np.linspace(xlo, xhi, points)\n",
" y_outputs = []\n",
" for n in x_inputs:\n",
" y_outputs.append(expr.evalf(subs={x: n}))\n",
" \n",
" ax = plt.subplot()\n",
" ax.set_axis_off()\n",
" title = f\"y = {eq}\"\n",
" cols = ('x', 'y')\n",
" rows = []\n",
" for i in range(xlo, xhi + 1):\n",
" rows.append([f\"{i:.2f}\", f\"{round(float(expr.evalf(subs={x: i})), 2):.2f}\"])\n",
" \n",
" ax.set_title(title)\n",
" plt.table(cellText=rows, colLabels=cols, cellLoc='center', loc='upper left')\n",
" plt.show()\n",
" \n",
" fig, axis = plt.subplots()\n",
" fig_min = float(min(min(x_inputs), min(y_outputs)))\n",
" fig_max = float(max(max(x_inputs), max(y_outputs)))\n",
" plt.axis([fig_min, fig_max, fig_min, fig_max])\n",
" plt.plot([fig_min, fig_max], [0, 0], \"black\")\n",
" plt.plot([0, 0], [fig_min, fig_max], \"black\")\n",
" plt.plot(x_inputs, y_outputs, \"b\")\n",
" plt.show()\n",
"\n",
"def solve_system_of_equations():\n",
" x, y = symbols(\"x y\")\n",
" eq1 = input(\"First euqation: 0 = \")\n",
" eq2 = input(\"Second equation: 0 = \")\n",
" solutions = solve([eq1, eq2], [x, y])\n",
" if len(solutions):\n",
" print(\"Euqations intercept at:\")\n",
" for solution in solutions:\n",
" # WARNING: this will raise error for complex numbers\n",
" print(f\"({float(solution[0])}, {float(solution[1])})\")\n",
" else:\n",
" print(\"Give equations do not intercept\")\n",
"\n",
"def equations_intercept():\n",
" x, y = symbols(\"x y\")\n",
" eq1 = input(\"First euqation: 0 = \")\n",
" eq2 = input(\"Second equation: 0 = \")\n",
" solutions = solve([eq1, eq2], [x, y])\n",
" if len(solutions) == 0:\n",
" print(\"Equations do not intercept\")\n",
" return\n",
" x_intercept_1 = float(solutions[0][0])\n",
" y_intercept_1 = float(solutions[0][1])\n",
" xlo = x_intercept_1 - 20\n",
" xhi = x_intercept_1 + 20\n",
" ylo = y_intercept_1 - 20\n",
" yhi = y_intercept_1 + 20\n",
" density = 5\n",
" x_inputs = [i for i in np.arange(xlo, xhi+0.2, 0.2)]\n",
" y_solver1 = solve(eq1, y)[0]\n",
" y_solver2 = solve(eq2, y)[0]\n",
" y_ouputs_1 = [float(y_solver1.evalf(subs={x: i})) for i in x_inputs]\n",
" y_ouputs_2 = [float(y_solver2.evalf(subs={x: i})) for i in x_inputs]\n",
" fig, axis = plt.subplots()\n",
" plt.axis([xlo, xhi, ylo, yhi])\n",
" plt.plot([xlo, xhi], [0, 0], \"black\")\n",
" plt.plot([0, 0], [ylo, yhi], \"black\")\n",
" plt.plot(x_inputs, y_ouputs_1, \"blue\")\n",
" plt.plot(x_inputs, y_ouputs_2, \"orange\")\n",
" for solution in solutions:\n",
" plt.plot([solution[0]], [solution[1]], \"ro\")\n",
" plt.show()\n",
"\n",
"def quadratic_eq_roots_and_vertex():\n",
" a = float(input(\"a = \"))\n",
" b = float(input(\"b = \"))\n",
" c = float(input(\"c = \"))\n",
" vertex_x = -b/(2*a)\n",
" vertex_y = a*vertex_x**2 + b*vertex_x + c\n",
" root_1 = 0\n",
" root_2 = 0\n",
" has_roots = b**2 - 4*a*c >= 0\n",
" if has_roots:\n",
" root_1 = vertex_x + (math.sqrt(b**2 - 4*a*c)/(2*a))\n",
" root_2 = vertex_x - (math.sqrt(b**2 - 4*a*c)/(2*a))\n",
" else:\n",
" print(\"Given quadratic equation has no roots i.e. do not intercept x-axis at all\")\n",
" \n",
" xlo = root_1 - 20 if has_roots else vertex_x - 20\n",
" xhi = root_2 + 20 if has_roots else vertex_x + 20\n",
" ylo = -20 - abs(root_2-root_1) if has_roots else vertex_y - 20\n",
" yhi = 20 + abs(root_2-root_1) if has_roots else vertex_y + 20\n",
" fig, axis = plt.subplots()\n",
" plt.axis([xlo, xhi, ylo, yhi])\n",
" plt.plot([xlo, xhi], [0, 0], \"black\")\n",
" plt.plot([0, 0], [ylo, yhi], \"black\")\n",
" density = 5\n",
" x = [x_i for x_i in np.arange(xlo, xhi+ 1/density, 1/density)]\n",
" y = [a*x_i**2 + b*x_i + c for x_i in x]\n",
" plt.plot(x, y, \"blue\")\n",
" plt.plot([vertex_x], [vertex_y], \"ro\")\n",
" if has_roots:\n",
" plt.plot([root_1], [0], \"go\")\n",
" plt.plot([root_2], [0], \"go\")\n",
" plt.grid()\n",
" plt.show()\n",
"# This step does not have a test"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "D7ASvHg3b2Ph"
},
"source": [
"# Step 25 - Certification Project 2"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "KBcTUf08cRy1"
},
"source": [
"Build a graphing calculator that performs the functions mentioned in the previous step:\n",
"<ul>\n",
"<li>Display the graph and a table of values for any \"y=\" equation input</li>\n",
"<li>Solve a system of two equations without graphing</li>\n",
"<li>Graph two equations and plot the point of intersection</li>\n",
"<li>Given a, b and c in a quadratic equation, plot the roots and vertex</li>\n",
"</ul>\n",
"Define each of the functions, and make each option call a function."
]
},
{
"cell_type": "code",
"execution_count": 204,
"metadata": {
"id": "bmuz1zCecVCX"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"What would you like to do?\n",
"1: Display the graph and a table of values for any \"y=\" equation input\n",
"2: Solve a system of two equations without graphing\n",
"3: Graph two equations and plot the point of intersection\n",
"4: Given a, b and c in a quadratic equation, plot the roots and vertex\n"
]
},
{
"name": "stdin",
"output_type": "stream",
"text": [
" 3\n",
"First euqation: 0 = 2*x + y + 5\n",
"Second equation: 0 = 2*x**2 + 3*y - 7\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Write your code here\n",
"options = [\n",
" (table_and_graph, \"Display the graph and a table of values for any \\\"y=\\\" equation input\"),\n",
"(solve_system_of_equations, \"Solve a system of two equations without graphing\"),\n",
"(equations_intercept, \"Graph two equations and plot the point of intersection\"),\n",
"(quadratic_eq_roots_and_vertex, \"Given a, b and c in a quadratic equation, plot the roots and vertex\")]\n",
"\n",
"print(\"What would you like to do?\")\n",
"for i in range(len(options)):\n",
" print(f\"{i+1}: {options[i][1]}\")\n",
"\n",
"selection = int(input())\n",
"if selection >= 1 and selection <= len(options):\n",
" options[selection-1][0]()\n",
"# This step does not have a test"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"colab": {
"collapsed_sections": [
"szp5flp1fA8-",
"iNcDJ45bGtYk",
"i1mBd8gGFvBV",
"MYQL57cD2ejS",
"jIHKROStFMcR",
"wLDO_IRrFw7z",
"ExVB2joZF0rk",
"3MqIpFTOF1m9",
"NKq_qwCsF3Dj",
"wvdngkOTF4Hi",
"Q19Wm90DF5zf",
"YSY2k7S3F6d7",
"ykj42UNeF7K5",
"QSKeBTgXHRAv",
"0epVLhL0F88U",
"8FCFQaq1Hizh",
"BhKPZQJZF9w0",
"I0mklEluF-jI",
"eFehWNexGASC",
"WbqugasGGCKJ",
"hN_fvENUGBAm",
"vteEy9QFGD5I",
"VXxx7RCVSs4j",
"jpo7oASHGEu7"
],
"provenance": [],
"toc_visible": true
},
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.8.10"
}
},
"nbformat": 4,
"nbformat_minor": 4
}