summaryrefslogtreecommitdiff
path: root/book/module1/arrays.tex
diff options
context:
space:
mode:
Diffstat (limited to 'book/module1/arrays.tex')
-rw-r--r--book/module1/arrays.tex411
1 files changed, 0 insertions, 411 deletions
diff --git a/book/module1/arrays.tex b/book/module1/arrays.tex
deleted file mode 100644
index a5486d9..0000000
--- a/book/module1/arrays.tex
+++ /dev/null
@@ -1,411 +0,0 @@
- \hypertarget{matrixarrays}{%
-\section{matrixArrays}\label{matrixarrays}}
-
-In computer programming, an array is a structure for storing and
-retrieving data. We often talk about an array as if it were a grid in
-space, with each cell storing one element of the data. For instance, if
-each element of the data were a number, we might visualize a
-``one-dimensional'' array like a list:
-
-\begin{longtable}[]{@{}llll@{}}
-\toprule
-1 & 5 & 2 & 0 \\
-\midrule
-\endhead
-\bottomrule
-\end{longtable}
-
-A two-dimensional array would be like a table:
-
-\begin{longtable}[]{@{}llll@{}}
-\toprule
-1 & 5 & 2 & 0 \\
-\midrule
-\endhead
-8 & 3 & 6 & 1 \\
-1 & 7 & 2 & 9 \\
-\bottomrule
-\end{longtable}
-
-A three-dimensional array would be like a set of tables, perhaps stacked
-as though they were printed on separate pages. If we visualize the
-position of each element as a position in space. Then we can represent
-the value of the element as a property. In other words, if we were to
-analyze the stress concentration of an aluminum block, the property
-would be stress.
-
-\begin{itemize}
-\tightlist
-\item
- From
- \href{https://numpy.org/doc/2.2/user/absolute_beginners.html}{Numpy
- documentation}
-
-\end{itemize}
-
-If the load on this block changes over time, then we may want to add a
-4th dimension i.e.~additional sets of 3-D arrays for each time
-increment. As you can see - the more dimensions we add, the more
-complicated of a problem we have to solve. It is possible to increase
-the number of dimensions to the n-th order. This course we will not be
-going beyond dimensional analysis.
-
-\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center}
-
-\hypertarget{numpy---the-pythons-array-library}{%
-\section{Numpy - the python's array
-library}\label{numpy---the-pythons-array-library}}
-
-In this tutorial we will be introducing arrays and we will be using the
-numpy library. Arrays, lists, vectors, matrices, sets - You might've
-heard of them before, they all store data. In programming, an array is a
-variable that can hold more than one value at a time. We will be using
-the Numpy python library to create arrays. Since we already have
-installed Numpy previously, we can start using the package.
-
-Before importing our first package, let's as ourselves \emph{what is a
-package?} A package can be thought of as pre-written python code that we
-can re-use. This means the for every script that we write in python we
-need to tell it to use a certain package. We call this importing a
-package.
-
-\hypertarget{importing-numpy}{%
-\subsection{Importing Numpy}\label{importing-numpy}}
-
-When using packages in python, we need to let it know what package we
-will be using. This is called importing. To import numpy we need to
-declare it a the start of a script as follows:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\ImportTok{import}\NormalTok{ numpy }\ImportTok{as}\NormalTok{ np}
-\end{Highlighting}
-\end{Shaded}
-
-\begin{itemize}
-\tightlist
-\item
- \texttt{import} - calls for a library to use, in our case it is Numpy.
-\item
- \texttt{as} - gives the library an alias in your script. It's common
- convention in Python programming to make the code shorter and more
- readable. We will be using \emph{np} as it's a standard using in many
- projects.
-\end{itemize}
-
-\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center}
-
-\hypertarget{creating-arrays}{%
-\section{Creating arrays}\label{creating-arrays}}
-
-Now that we have imported the library we can create a one dimensional
-array or \emph{vector} with three elements.
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\NormalTok{x }\OperatorTok{=}\NormalTok{ np.array([}\DecValTok{1}\NormalTok{,}\DecValTok{2}\NormalTok{,}\DecValTok{3}\NormalTok{])}
-\end{Highlighting}
-\end{Shaded}
-
-To create a \emph{matrix} we can nest the arrays to create a two
-dimensional array. This is done as follows.
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\NormalTok{matrix }\OperatorTok{=}\NormalTok{ np.array([[}\DecValTok{1}\NormalTok{,}\DecValTok{2}\NormalTok{,}\DecValTok{3}\NormalTok{],}
-\NormalTok{ [}\DecValTok{4}\NormalTok{,}\DecValTok{5}\NormalTok{,}\DecValTok{6}\NormalTok{],}
-\NormalTok{ [}\DecValTok{7}\NormalTok{,}\DecValTok{8}\NormalTok{,}\DecValTok{9}\NormalTok{]])}
-\end{Highlighting}
-\end{Shaded}
-
-\emph{Note: for every array we nest, we get a new dimension in our data
-structure.}
-
- \hypertarget{display-arrays}{%
-\section{Display arrays}\label{display-arrays}}
-
-Using command print("") Accessing particular elements of an array
-\ldots..
-
- \hypertarget{practice-problem}{%
-\section{Practice Problem}\label{practice-problem}}
-
-Problem statement
-
- \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
-\prompt{In}{incolor}{1}{\boxspacing}
-\begin{Verbatim}[commandchars=\\\{\}]
-\PY{k+kn}{import} \PY{n+nn}{numpy} \PY{k}{as} \PY{n+nn}{np}
-
-\PY{n}{x} \PY{o}{=} \PY{n}{np}\PY{o}{.}\PY{n}{array}\PY{p}{(}\PY{p}{[}\PY{l+m+mi}{7}\PY{p}{,} \PY{l+m+mi}{10} \PY{p}{,}\PY{l+m+mi}{12}\PY{p}{]}\PY{p}{)}
-
-\PY{n+nb}{print}\PY{p}{(}\PY{n}{x}\PY{p}{)}
-
-\PY{n+nb}{print}\PY{p}{(}\PY{n}{x}\PY{p}{[}\PY{l+m+mi}{1}\PY{p}{]}\PY{p}{)}
-\end{Verbatim}
-\end{tcolorbox}
-
- \begin{Verbatim}[commandchars=\\\{\}]
-[ 7 10 12]
-10
- \end{Verbatim}
-
- \hypertarget{numpy-array-creation-functions}{%
-\subsection{Numpy array creation
-functions}\label{numpy-array-creation-functions}}
-
-Numpy comes with some built-in function that we can use to create arrays
-quickly. Here are a couple of functions that are commonly used in
-python.
-
-\hypertarget{np.arange}{%
-\subsubsection{np.arange}\label{np.arange}}
-
-The \texttt{np.arange()} function returns an array with evenly spaced
-values within a specified range. It is similar to the built-in
-\texttt{range()} function in Python but returns a Numpy array instead of
-a list. The parameters for this function are the start value
-(inclusive), the stop value (exclusive), and the step size. If the step
-size is not provided, it defaults to 1.
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\OperatorTok{\textgreater{}\textgreater{}\textgreater{}}\NormalTok{ np.arange(}\DecValTok{4}\NormalTok{)}
-\NormalTok{array([}\FloatTok{0.}\NormalTok{ , }\FloatTok{1.}\NormalTok{, }\FloatTok{2.}\NormalTok{, }\FloatTok{3.}\NormalTok{ ])}
-\end{Highlighting}
-\end{Shaded}
-
-In this example, \texttt{np.arange(4)} generates an array starting from
-0 and ending before 4, with a step size of 1.
-
-\hypertarget{np.linspace}{%
-\subsubsection{np.linspace}\label{np.linspace}}
-
-The \texttt{np.linspace()} function returns an array of evenly spaced
-values over a specified range. Unlike \texttt{np.arange()}, which uses a
-step size to define the spacing between elements, \texttt{np.linspace()}
-uses the number of values you want to generate and calculates the
-spacing automatically. It accepts three parameters: the start value, the
-stop value, and the number of samples.
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\OperatorTok{\textgreater{}\textgreater{}\textgreater{}}\NormalTok{ np.linspace(}\FloatTok{1.}\NormalTok{, }\FloatTok{4.}\NormalTok{, }\DecValTok{6}\NormalTok{)}
-\NormalTok{array([}\FloatTok{1.}\NormalTok{ , }\FloatTok{1.6}\NormalTok{, }\FloatTok{2.2}\NormalTok{, }\FloatTok{2.8}\NormalTok{, }\FloatTok{3.4}\NormalTok{, }\FloatTok{4.}\NormalTok{ ])}
-\end{Highlighting}
-\end{Shaded}
-
-In this example, \texttt{np.linspace(1.,\ 4.,\ 6)} generates 6 evenly
-spaced values between 1. and 4., including both endpoints.
-
-Try this and see what happens:
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\NormalTok{x }\OperatorTok{=}\NormalTok{ np.linspace(}\DecValTok{0}\NormalTok{,}\DecValTok{100}\NormalTok{,}\DecValTok{101}\NormalTok{)}
-\NormalTok{y }\OperatorTok{=}\NormalTok{ np.sin(x)}
-\end{Highlighting}
-\end{Shaded}
-
-\hypertarget{other-useful-functions}{%
-\subsubsection{Other useful functions}\label{other-useful-functions}}
-
-\begin{itemize}
-\tightlist
-\item
- \texttt{np.zeros()}
-\item
- \texttt{np.ones()}
-\item
- \texttt{np.eye()}
-\end{itemize}
-
- \hypertarget{practice-problem}{%
-\subsection{Practice problem}\label{practice-problem}}
-
-Problem statement below
-
- \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
-\prompt{In}{incolor}{2}{\boxspacing}
-\begin{Verbatim}[commandchars=\\\{\}]
-\PY{n}{y}\PY{o}{=}\PY{n}{np}\PY{o}{.}\PY{n}{linspace}\PY{p}{(}\PY{l+m+mi}{10}\PY{p}{,}\PY{l+m+mi}{20}\PY{p}{,}\PY{l+m+mi}{5}\PY{p}{)}
-\PY{n+nb}{print}\PY{p}{(}\PY{n}{y}\PY{p}{)}
-\end{Verbatim}
-\end{tcolorbox}
-
- \begin{Verbatim}[commandchars=\\\{\}]
-[10. 12.5 15. 17.5 20. ]
- \end{Verbatim}
-
- \hypertarget{working-with-arrays}{%
-\subsection{Working with Arrays}\label{working-with-arrays}}
-
-Now that we have been introduced to some ways to create arrays using the
-Numpy functions let's start using them.
-
-\hypertarget{indexing}{%
-\subsubsection{Indexing}\label{indexing}}
-
-Indexing in Python allows you to access specific elements within an
-array based on their position. This means you can directly retrieve and
-manipulate individual items as needed.
-
-Python uses \textbf{zero-based indexing}, meaning the first element is
-at position \textbf{0} rather than \textbf{1}. This approach is common
-in many programming languages. For example, in a list with five
-elements, the first element is at index \texttt{0}, followed by elements
-at indices \texttt{1}, \texttt{2}, \texttt{3}, and \texttt{4}.
-
-Here's an example of data from a rocket test stand where thrust was
-recorded as a function of time.
-
-\begin{Shaded}
-\begin{Highlighting}[]
-\NormalTok{thrust\_lbf }\OperatorTok{=}\NormalTok{ np.array(}\FloatTok{0.603355}\NormalTok{, }\FloatTok{2.019083}\NormalTok{, }\FloatTok{2.808092}\NormalTok{, }\FloatTok{4.054973}\NormalTok{, }\FloatTok{1.136618}\NormalTok{, }\FloatTok{0.943668}\NormalTok{)}
-
-\OperatorTok{\textgreater{}\textgreater{}\textgreater{}}\NormalTok{ thrust\_lbs[}\DecValTok{3}\NormalTok{]}
-\end{Highlighting}
-\end{Shaded}
-
-Due to the nature of zero-based indexing. If we want to call the value
-\texttt{4.054973} that will be the 3rd index.
-
-\hypertarget{operations-on-arrays}{%
-\subsubsection{Operations on arrays}\label{operations-on-arrays}}
-
-\begin{itemize}
-\tightlist
-\item
- Arithmetic operations (\texttt{+}, \texttt{-}, \texttt{*}, \texttt{/},
- \texttt{**})
-\item
- \texttt{np.add()}, \texttt{np.subtract()}, \texttt{np.multiply()},
- \texttt{np.divide()}
-\item
- \texttt{np.dot()} for dot product
-\item
- \texttt{np.matmul()} for matrix multiplication
-\item
- \texttt{np.linalg.inv()}, \texttt{np.linalg.det()} for linear algebra
-\end{itemize}
-
-\hypertarget{statistics}{%
-\paragraph{Statistics}\label{statistics}}
-
-\begin{itemize}
-\tightlist
-\item
- \texttt{np.mean()}, \texttt{np.median()}, \texttt{np.std()},
- \texttt{np.var()}
-\item
- \texttt{np.min()}, \texttt{np.max()}, \texttt{np.argmin()},
- \texttt{np.argmax()}
-\item
- Summation along axes: \texttt{np.sum(arr,\ axis=0)}
-\end{itemize}
-
-\hypertarget{combining-arrays}{%
-\paragraph{Combining arrays}\label{combining-arrays}}
-
-\begin{itemize}
-\tightlist
-\item
- Concatenation: \texttt{np.concatenate((arr1,\ arr2),\ axis=0)}
-\item
- Stacking: \texttt{np.vstack()}, \texttt{np.hstack()}
-\item
- Splitting: \texttt{np.split()}
-\end{itemize}
-
- \hypertarget{exercise}{%
-\section{Exercise}\label{exercise}}
-
-Let's solve a statics problem given the following problem
-
-A simply supported bridge of length L=20L = 20L=20 m is subjected to
-three point loads:
-
-\begin{itemize}
-\tightlist
-\item
- \(P1=1010 kN\) at \(x=5m\)
-\item
- \(P2=15 kN\) at \(x=10m\)
-\item
- \(P3=20 kN\) at \(x=15m\)
-\end{itemize}
-
-The bridge is supported by two reaction forces at points AAA (left
-support) and BBB (right support). We assume the bridge is in static
-equilibrium, meaning the sum of forces and sum of moments about any
-point must be zero.
-
-\hypertarget{equilibrium-equations}{%
-\paragraph{Equilibrium Equations:}\label{equilibrium-equations}}
-
-\begin{enumerate}
-\def\labelenumi{\arabic{enumi}.}
-\item
- \textbf{Sum of Forces in the Vertical Direction}:
-
- \(R_A + R_B - P_1 - P_2 - P_3 = 0\)
-\item
- \textbf{Sum of Moments About Point A}:
-
- \(5 P_1 + 10 P_2 + 15 P_3 - 20 R_B = 0\)
-\item
- \textbf{Sum of Moments About Point B}:
-
- \(20 R_A - 15 P_3 - 10 P_2 - 5 P_1 = 0\)
-\end{enumerate}
-
-\hypertarget{system-of-equations}{%
-\paragraph{System of Equations:}\label{system-of-equations}}
-
-\[
-\begin{cases}
-R_A + R_B - 10 - 15 - 20 = 0 \\
-5 \cdot 10 + 10 \cdot 15 + 15 \cdot 20 - 20 R_B = 0 \\
-20 R_A - 5 \cdot 10 - 10 \cdot 15 - 15 \cdot 20 = 0
-\end{cases}
-\]
-
- \hypertarget{solution}{%
-\subsubsection{Solution}\label{solution}}
-
- \begin{tcolorbox}[breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder]
-\prompt{In}{incolor}{3}{\boxspacing}
-\begin{Verbatim}[commandchars=\\\{\}]
-\PY{k+kn}{import} \PY{n+nn}{numpy} \PY{k}{as} \PY{n+nn}{np}
-
-\PY{c+c1}{\PYZsh{} Define the coefficient matrix A}
-\PY{n}{A} \PY{o}{=} \PY{n}{np}\PY{o}{.}\PY{n}{array}\PY{p}{(}\PY{p}{[}
- \PY{p}{[}\PY{l+m+mi}{1}\PY{p}{,} \PY{l+m+mi}{1}\PY{p}{]}\PY{p}{,}
- \PY{p}{[}\PY{l+m+mi}{0}\PY{p}{,} \PY{o}{\PYZhy{}}\PY{l+m+mi}{20}\PY{p}{]}\PY{p}{,}
- \PY{p}{[}\PY{l+m+mi}{20}\PY{p}{,} \PY{l+m+mi}{0}\PY{p}{]}
-\PY{p}{]}\PY{p}{)}
-
-\PY{c+c1}{\PYZsh{} Define the right\PYZhy{}hand side vector b}
-\PY{n}{b} \PY{o}{=} \PY{n}{np}\PY{o}{.}\PY{n}{array}\PY{p}{(}\PY{p}{[}
- \PY{l+m+mi}{45}\PY{p}{,}
- \PY{l+m+mi}{5}\PY{o}{*}\PY{l+m+mi}{10} \PY{o}{+} \PY{l+m+mi}{10}\PY{o}{*}\PY{l+m+mi}{15} \PY{o}{+} \PY{l+m+mi}{15}\PY{o}{*}\PY{l+m+mi}{20}\PY{p}{,}
- \PY{l+m+mi}{5}\PY{o}{*}\PY{l+m+mi}{10} \PY{o}{+} \PY{l+m+mi}{10}\PY{o}{*}\PY{l+m+mi}{15} \PY{o}{+} \PY{l+m+mi}{15}\PY{o}{*}\PY{l+m+mi}{20}
-\PY{p}{]}\PY{p}{)}
-
-\PY{c+c1}{\PYZsh{} Solve the system of equations Ax = b}
-\PY{c+c1}{\PYZsh{} Using least squares to handle potential overdetermination}
-\PY{n}{x} \PY{o}{=} \PY{n}{np}\PY{o}{.}\PY{n}{linalg}\PY{o}{.}\PY{n}{lstsq}\PY{p}{(}\PY{n}{A}\PY{p}{,} \PY{n}{b}\PY{p}{,} \PY{n}{rcond}\PY{o}{=}\PY{k+kc}{None}\PY{p}{)}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{]}
-
-\PY{c+c1}{\PYZsh{} Display the results}
-\PY{n+nb}{print}\PY{p}{(}\PY{l+s+sa}{f}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Reaction force at A (R\PYZus{}A): }\PY{l+s+si}{\PYZob{}}\PY{n}{x}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{]}\PY{l+s+si}{:}\PY{l+s+s2}{.2f}\PY{l+s+si}{\PYZcb{}}\PY{l+s+s2}{ kN}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)}
-\PY{n+nb}{print}\PY{p}{(}\PY{l+s+sa}{f}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Reaction force at B (R\PYZus{}B): }\PY{l+s+si}{\PYZob{}}\PY{n}{x}\PY{p}{[}\PY{l+m+mi}{1}\PY{p}{]}\PY{l+s+si}{:}\PY{l+s+s2}{.2f}\PY{l+s+si}{\PYZcb{}}\PY{l+s+s2}{ kN}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)}
-\end{Verbatim}
-\end{tcolorbox}
-
- \begin{Verbatim}[commandchars=\\\{\}]
-Reaction force at A (R\_A): 25.11 kN
-Reaction force at B (R\_B): -24.89 kN
- \end{Verbatim}
-
-
- % Add a bibliography block to the postdoc