summaryrefslogtreecommitdiff
path: root/tutorials/module_1/notebook_1/array.ipynb
diff options
context:
space:
mode:
Diffstat (limited to 'tutorials/module_1/notebook_1/array.ipynb')
-rw-r--r--tutorials/module_1/notebook_1/array.ipynb251
1 files changed, 0 insertions, 251 deletions
diff --git a/tutorials/module_1/notebook_1/array.ipynb b/tutorials/module_1/notebook_1/array.ipynb
deleted file mode 100644
index f087b7e..0000000
--- a/tutorials/module_1/notebook_1/array.ipynb
+++ /dev/null
@@ -1,251 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Arrays\n",
- "\n",
- "In computer programming, an array is a structure for storing and\n",
- "retrieving data. We often talk about an array as if it were a grid in\n",
- "space, with each cell storing one element of the data. For instance, if\n",
- "each element of the data were a number, we might visualize a\n",
- "“one-dimensional” array like a list:\n",
- "\n",
- "| 1 | 5 | 2 | 0 |\n",
- "|-----|-----|-----|-----|\n",
- "\n",
- "A two-dimensional array would be like a table:\n",
- "\n",
- "| 1 | 5 | 2 | 0 |\n",
- "|-----|-----|-----|-----|\n",
- "| 8 | 3 | 6 | 1 |\n",
- "| 1 | 7 | 2 | 9 |\n",
- "\n",
- "A three-dimensional array would be like a set of tables, perhaps stacked\n",
- "as though they were printed on separate pages. If we visualize the\n",
- "position of each element as a position in space. Then we can represent\n",
- "the value of the element as a property. In other words, if we were to\n",
- "analyze the stress concentration of an aluminum block, the property\n",
- "would be stress.\n",
- "\n",
- "- From [Numpy\n",
- " documentation](https://numpy.org/doc/2.2/user/absolute_beginners.html)\n",
- "\n",
- "<figure>\n",
- "<img src=\"attachment:figures/multi-dimensional-array.png\"\n",
- "alt=\"Mathworks 3-D array\" />\n",
- "<figcaption aria-hidden=\"true\">Mathworks 3-D array</figcaption>\n",
- "</figure>\n",
- "\n",
- "If the load on this block changes over time, then we may want to add a\n",
- "4th dimension i.e. additional sets of 3-D arrays for each time\n",
- "increment. As you can see - the more dimensions we add, the more\n",
- "complicated of a problem we have to solve. It is possible to increase\n",
- "the number of dimensions to the n-th order. This course we will not be\n",
- "going beyond dimensional analysis.\n",
- "\n",
- "## Numpy - the python’s array library\n",
- "\n",
- "In this tutorial we will be introducing arrays and we will be using the\n",
- "numpy library. Arrays, lists, vectors, matrices, sets - You might’ve\n",
- "heard of them before, they all store data. In programming, an array is a\n",
- "variable that can hold more than one value at a time. We will be using\n",
- "the Numpy python library to create arrays. Since we already have\n",
- "installed Numpy previously, we can start using the package.\n",
- "\n",
- "Before importing our first package, let’s as ourselves *what is a\n",
- "package?* A package can be thought of as pre-written python code that we\n",
- "can re-use. This means the for every script that we write in python we\n",
- "need to tell it to use a certain package. We call this importing a\n",
- "package.\n",
- "\n",
- "### Importing Numpy\n",
- "\n",
- "When using packages in python, we need to let it know what package we\n",
- "will be using. This is called importing. To import numpy we need to\n",
- "declare it a the start of a script as follows:\n",
- "\n",
- "``` python\n",
- "import numpy as np\n",
- "```\n",
- "\n",
- "- `import` - calls for a library to use, in our case it is Numpy.\n",
- "- `as` - gives the library an alias in your script. It’s common\n",
- " convention in Python programming to make the code shorter and more\n",
- " readable. We will be using *np* as it’s a standard using in many\n",
- " projects.\n",
- "\n",
- "## Creating arrays\n",
- "\n",
- "Now that we have imported the library we can create a one dimensional\n",
- "array or *vector* with three elements.\n",
- "\n",
- "``` python\n",
- "x = np.array([1,2,3])\n",
- "```\n",
- "\n",
- "To create a *matrix* we can nest the arrays to create a two dimensional\n",
- "array. This is done as follows.\n",
- "\n",
- "``` python\n",
- "matrix = np.array([[1,2,3],\n",
- " [4,5,6],\n",
- " [7,8,9]])\n",
- "```\n",
- "\n",
- "*Note: for every array we nest, we get a new dimension in our data\n",
- "structure.*\n",
- "\n",
- "### Numpy array creation functions\n",
- "\n",
- "Numpy comes with some built-in function that we can use to create arrays\n",
- "quickly. Here are a couple of functions that are commonly used in\n",
- "python. \\#### np.arange The `np.arange()` function returns an array with\n",
- "evenly spaced values within a specified range. It is similar to the\n",
- "built-in `range()` function in Python but returns a Numpy array instead\n",
- "of a list. The parameters for this function are the start value\n",
- "(inclusive), the stop value (exclusive), and the step size. If the step\n",
- "size is not provided, it defaults to 1.\n",
- "\n",
- "``` python\n",
- ">>> np.arange(4)\n",
- "array([0. , 1., 2., 3. ])\n",
- "```\n",
- "\n",
- "In this example, `np.arange(4)` generates an array starting from 0 and\n",
- "ending before 4, with a step size of 1.\n",
- "\n",
- "#### np.linspace\n",
- "\n",
- "The `np.linspace()` function returns an array of evenly spaced values\n",
- "over a specified range. Unlike `np.arange()`, which uses a step size to\n",
- "define the spacing between elements, `np.linspace()` uses the number of\n",
- "values you want to generate and calculates the spacing automatically. It\n",
- "accepts three parameters: the start value, the stop value, and the\n",
- "number of samples.\n",
- "\n",
- "``` python\n",
- ">>> np.linspace(1., 4., 6)\n",
- "array([1. , 1.6, 2.2, 2.8, 3.4, 4. ])\n",
- "```\n",
- "\n",
- "In this example, `np.linspace(1., 4., 6)` generates 6 evenly spaced\n",
- "values between 1. and 4., including both endpoints.\n",
- "\n",
- "Try this and see what happens:\n",
- "\n",
- "``` python\n",
- "x = np.linspace(0,100,101)\n",
- "y = np.sin(x)\n",
- "```\n",
- "\n",
- "#### Other useful functions\n",
- "\n",
- "- `np.zeros()`\n",
- "- `np.ones()`\n",
- "- `np.eye()`\n",
- "\n",
- "### Working with Arrays\n",
- "\n",
- "Now that we have been introduced to some ways to create arrays using the\n",
- "Numpy functions let’s start using them. \\#### Indexing Indexing in\n",
- "Python allows you to access specific elements within an array based on\n",
- "their position. This means you can directly retrieve and manipulate\n",
- "individual items as needed.\n",
- "\n",
- "Python uses **zero-based indexing**, meaning the first element is at\n",
- "position **0** rather than **1**. This approach is common in many\n",
- "programming languages. For example, in a list with five elements, the\n",
- "first element is at index `0`, followed by elements at indices `1`, `2`,\n",
- "`3`, and `4`.\n",
- "\n",
- "Here’s an example of data from a rocket test stand where thrust was\n",
- "recorded as a function of time.\n",
- "\n",
- "``` python\n",
- "thrust_lbf = np.array(0.603355, 2.019083, 2.808092, 4.054973, 1.136618, 0.943668)\n",
- "\n",
- "print(thrust_lbs[3])\n",
- "```\n",
- "\n",
- "Due to the nature of zero-based indexing. If we want to call the value\n",
- "`4.054973` that will be the 3rd index. \\#### Operations on arrays -\n",
- "Arithmetic operations (`+`, `-`, `*`, `/`, `**`) - `np.add()`,\n",
- "`np.subtract()`, `np.multiply()`, `np.divide()` - `np.dot()` for dot\n",
- "product - `np.matmul()` for matrix multiplication - `np.linalg.inv()`,\n",
- "`np.linalg.det()` for linear algebra \\##### Statistics - `np.mean()`,\n",
- "`np.median()`, `np.std()`, `np.var()` - `np.min()`, `np.max()`,\n",
- "`np.argmin()`, `np.argmax()` - Summation along axes:\n",
- "`np.sum(arr, axis=0)`\n",
- "\n",
- "## Exercise\n",
- "\n",
- "Let’s solve a statics problem given the following problem\n",
- "\n",
- "A simply supported bridge of length L = 20 m is subjected to three point\n",
- "loads:\n",
- "\n",
- "- $P_1 = 10 kN$ at $x = 5 m$\n",
- "- $P_2 = 15 kN$ at $x = 10 m$\n",
- "- $P_3 = 20 kN$ at $x = 15 m$\n",
- "\n",
- "The bridge is supported by two reaction forces at points AAA (left\n",
- "support) and BBB (right support). We assume the bridge is in static\n",
- "equilibrium, meaning the sum of forces and sum of moments about any\n",
- "point must be zero.\n",
- "\n",
- "##### Equilibrium Equations:\n",
- "\n",
- "1. **Sum of Forces in the Vertical Direction**:\n",
- " $R_A + R_B - P_1 - P_2 - P_3 = 0$\n",
- "2. **Sum of Moments About Point A**:\n",
- " $5 P_1 + 10 P_2 + 15 P_3 - 20 R_B = 0$\n",
- "3. **Sum of Moments About Point B**:\n",
- " $20 R_A - 15 P_3 - 10 P_2 - 5 P_1 = 0$\n",
- "\n",
- "##### System of Equations:\n",
- "\n",
- "$$\n",
- "\\begin{cases} R_A + R_B - 10 - 15 - 20 = 0 \\\\ 5(10) + 10(15) + 15(20) - 20 R_B = 0 \\\\ 20 R_A - 5(10) - 10(15) - 15(20) = 0 \\end{cases}\n",
- "$$\n",
- "\n",
- "### Solution\n",
- "\n",
- "``` python\n",
- "import numpy as np\n",
- "\n",
- "# Define the coefficient matrix A\n",
- "A = np.array([\n",
- " [1, 1],\n",
- " [0, -20],\n",
- " [20, 0]\n",
- "])\n",
- "\n",
- "# Define the right-hand side vector b\n",
- "b = np.array([\n",
- " 45,\n",
- " 5*10 + 10*15 + 15*20,\n",
- " 5*10 + 10*15 + 15*20\n",
- "])\n",
- "\n",
- "# Solve the system of equations Ax = b\n",
- "x = np.linalg.lstsq(A, b, rcond=None)[0] # Using least squares to handle potential overdetermination\n",
- "\n",
- "# Display the results\n",
- "print(f\"Reaction force at A (R_A): {x[0]:.2f} kN\")\n",
- "print(f\"Reaction force at B (R_B): {x[1]:.2f} kN\")\n",
- "```"
- ],
- "attachments": {
- "figures/multi-dimensional-array.png": {
- "image/png": "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\n"
- }
- },
- "id": "06fdd8f8-bc8a-40fd-92c8-758d43e6e2a6"
- }
- ],
- "nbformat": 4,
- "nbformat_minor": 5,
- "metadata": {}
-}