From d0f224c34e0a0726274c62e9fe66220af6d2e6cc Mon Sep 17 00:00:00 2001 From: Christian Kolset Date: Tue, 29 Apr 2025 18:54:01 -0600 Subject: Updated Chapter indexing. --- book/computingME.pdf | Bin 3782618 -> 4057638 bytes book/module2/error.tex | 4 +- book/module2/module2.tex | 4 +- book/module2/non_linear_eqn_solver.tex | 129 ---------------------------- book/module2/num_methods_1.tex | 129 ++++++++++++++++++++++++++++ book/module3/module3.tex | 2 +- book/module3/non_linear_eqn_solver.tex | 129 ---------------------------- tutorials/module_2/non_linear_eqn_solver.md | 117 ------------------------- tutorials/module_2/num_methods_1.md | 117 +++++++++++++++++++++++++ 9 files changed, 252 insertions(+), 379 deletions(-) delete mode 100644 book/module2/non_linear_eqn_solver.tex create mode 100644 book/module2/num_methods_1.tex delete mode 100644 book/module3/non_linear_eqn_solver.tex delete mode 100644 tutorials/module_2/non_linear_eqn_solver.md create mode 100644 tutorials/module_2/num_methods_1.md diff --git a/book/computingME.pdf b/book/computingME.pdf index 145ae15..572b469 100644 Binary files a/book/computingME.pdf and b/book/computingME.pdf differ diff --git a/book/module2/error.tex b/book/module2/error.tex index 2646dc8..758a206 100644 --- a/book/module2/error.tex +++ b/book/module2/error.tex @@ -29,9 +29,9 @@ part of the computation}. An example of this could be using a finite number of terms from a Taylor Series expansion to approximate a function. -Approximating \(e^x\) by the first few terms of its Taylor series: +Approximating $e^x$ by the first few terms of its Taylor series: -\[e^x \approx 1 + x + \frac{x^2}{2!} + \frac{x^3}{3!}​\] +$e^x \approx 1 + x + \frac{x^2}{2!} + \frac{x^3}{3!}​\$ The error comes from \textbf{neglecting} all the higher order terms (\(\frac{x^4}{4!}, \frac{x^5}{5!}\), \ldots). diff --git a/book/module2/module2.tex b/book/module2/module2.tex index 2781a0e..14f37e0 100644 --- a/book/module2/module2.tex +++ b/book/module2/module2.tex @@ -1,6 +1,8 @@ \chapter{Module 2: Algorithm Development} \input{module2/problem_solving_strategies} -\input{module2/intro_to_numerical_methods} +\input{module2/num_methods_1} +\input{module2/error} \input{module2/ai_assisted_programming} \input{module2/debugging_code} \input{module2/version_control} +\input{module2/documentation} diff --git a/book/module2/non_linear_eqn_solver.tex b/book/module2/non_linear_eqn_solver.tex deleted file mode 100644 index 5550d12..0000000 --- a/book/module2/non_linear_eqn_solver.tex +++ /dev/null @@ -1,129 +0,0 @@ -\section{Solving non-linear -equations}\label{solving-non-linear-equations} - -\subsection{Introduction}\label{introduction} - -\subsection{Prerequisites}\label{prerequisites} - -\begin{Shaded} -\begin{Highlighting}[] -\ImportTok{import}\NormalTok{ numpy} -\ImportTok{import}\NormalTok{ scipy} -\ImportTok{import}\NormalTok{ sympy} -\end{Highlighting} -\end{Shaded} - -\subsection{fsolve from SciPy}\label{fsolve-from-scipy} - -\begin{Shaded} -\begin{Highlighting}[] -\ImportTok{from}\NormalTok{ scipy.optimize }\ImportTok{import}\NormalTok{ fsolve} - -\KeywordTok{def}\NormalTok{ equations(}\BuiltInTok{vars}\NormalTok{):} -\NormalTok{ x, y }\OperatorTok{=} \BuiltInTok{vars} -\NormalTok{ eq1 }\OperatorTok{=}\NormalTok{ x}\OperatorTok{**}\DecValTok{2} \OperatorTok{+}\NormalTok{ y}\OperatorTok{**}\DecValTok{2} \OperatorTok{{-}} \DecValTok{25} -\NormalTok{ eq2 }\OperatorTok{=}\NormalTok{ x}\OperatorTok{**}\DecValTok{2} \OperatorTok{{-}}\NormalTok{ y} - \ControlFlowTok{return}\NormalTok{ [eq1, eq2]} - -\NormalTok{initial\_guess }\OperatorTok{=}\NormalTok{ [}\DecValTok{1}\NormalTok{, }\DecValTok{1}\NormalTok{]} -\NormalTok{solution }\OperatorTok{=}\NormalTok{ fsolve(equations, initial\_guess)} -\BuiltInTok{print}\NormalTok{(}\StringTok{"Solution:"}\NormalTok{, solution)} -\end{Highlighting} -\end{Shaded} - -\subsection{root from SciPy}\label{root-from-scipy} - -\begin{Shaded} -\begin{Highlighting}[] -\ImportTok{from}\NormalTok{ scipy.optimize }\ImportTok{import}\NormalTok{ root} - -\KeywordTok{def}\NormalTok{ equations(}\BuiltInTok{vars}\NormalTok{):} -\NormalTok{ x, y }\OperatorTok{=} \BuiltInTok{vars} -\NormalTok{ eq1 }\OperatorTok{=}\NormalTok{ x}\OperatorTok{**}\DecValTok{2} \OperatorTok{+}\NormalTok{ y}\OperatorTok{**}\DecValTok{2} \OperatorTok{{-}} \DecValTok{25} -\NormalTok{ eq2 }\OperatorTok{=}\NormalTok{ x}\OperatorTok{**}\DecValTok{2} \OperatorTok{{-}}\NormalTok{ y} - \ControlFlowTok{return}\NormalTok{ [eq1, eq2]} - -\NormalTok{initial\_guess }\OperatorTok{=}\NormalTok{ [}\DecValTok{1}\NormalTok{, }\DecValTok{1}\NormalTok{]} -\NormalTok{solution }\OperatorTok{=}\NormalTok{ root(equations, initial\_guess)} -\BuiltInTok{print}\NormalTok{(}\StringTok{"Solution:"}\NormalTok{, solution.x)} -\end{Highlighting} -\end{Shaded} - -\subsection{minimize from SciPy}\label{minimize-from-scipy} - -\begin{Shaded} -\begin{Highlighting}[] -\ImportTok{from}\NormalTok{ scipy.optimize }\ImportTok{import}\NormalTok{ minimize} - -\CommentTok{\# Define the equations} -\KeywordTok{def}\NormalTok{ equation1(x, y):} - \ControlFlowTok{return}\NormalTok{ x}\OperatorTok{**}\DecValTok{2} \OperatorTok{+}\NormalTok{ y}\OperatorTok{**}\DecValTok{2} \OperatorTok{{-}} \DecValTok{25} - -\KeywordTok{def}\NormalTok{ equation2(x, y):} - \ControlFlowTok{return}\NormalTok{ x}\OperatorTok{**}\DecValTok{2} \OperatorTok{{-}}\NormalTok{ y} - -\CommentTok{\# Define the objective function for optimization} -\KeywordTok{def}\NormalTok{ objective(xy):} -\NormalTok{ x, y }\OperatorTok{=}\NormalTok{ xy} - \ControlFlowTok{return}\NormalTok{ equation1(x, y)}\OperatorTok{**}\DecValTok{2} \OperatorTok{+}\NormalTok{ equation2(x, y)}\OperatorTok{**}\DecValTok{2} - -\CommentTok{\# Initial guess} -\NormalTok{initial\_guess }\OperatorTok{=}\NormalTok{ [}\DecValTok{1}\NormalTok{, }\DecValTok{1}\NormalTok{]} - -\CommentTok{\# Perform optimization} -\NormalTok{result }\OperatorTok{=}\NormalTok{ minimize(objective, initial\_guess)} -\NormalTok{solution\_optimization }\OperatorTok{=}\NormalTok{ result.x} - -\BuiltInTok{print}\NormalTok{(}\StringTok{"Optimization Method Solution:"}\NormalTok{, solution\_optimization)} -\end{Highlighting} -\end{Shaded} - -\subsection{nsolve from SymPy}\label{nsolve-from-sympy} - -\begin{Shaded} -\begin{Highlighting}[] -\ImportTok{from}\NormalTok{ sympy }\ImportTok{import}\NormalTok{ symbols, Eq, nsolve} - -\CommentTok{\# Define the variables} -\NormalTok{x, y }\OperatorTok{=}\NormalTok{ symbols(}\StringTok{\textquotesingle{}x y\textquotesingle{}}\NormalTok{)} - -\CommentTok{\# Define the equations} -\NormalTok{eq1 }\OperatorTok{=}\NormalTok{ Eq(x}\OperatorTok{**}\DecValTok{2} \OperatorTok{+}\NormalTok{ y}\OperatorTok{**}\DecValTok{2}\NormalTok{, }\DecValTok{25}\NormalTok{)} -\NormalTok{eq2 }\OperatorTok{=}\NormalTok{ Eq(x }\OperatorTok{{-}}\NormalTok{ y, }\DecValTok{0}\NormalTok{)} - -\CommentTok{\# Initial guess for the solution} -\NormalTok{initial\_guess }\OperatorTok{=}\NormalTok{ [}\DecValTok{1}\NormalTok{, }\DecValTok{1}\NormalTok{]} - -\CommentTok{\# Use nsolve to find the solution} -\NormalTok{solution }\OperatorTok{=}\NormalTok{ nsolve([eq1, eq2], [x, y], initial\_guess)} -\BuiltInTok{print}\NormalTok{(}\StringTok{"Solution:"}\NormalTok{, solution)} -\end{Highlighting} -\end{Shaded} - -\subsection{newton\_method from NumPy}\label{newton_method-from-numpy} - -\begin{Shaded} -\begin{Highlighting}[] -\ImportTok{import}\NormalTok{ numpy }\ImportTok{as}\NormalTok{ np} - -\KeywordTok{def}\NormalTok{ equations(}\BuiltInTok{vars}\NormalTok{):} -\NormalTok{ x, y }\OperatorTok{=} \BuiltInTok{vars} -\NormalTok{ eq1 }\OperatorTok{=}\NormalTok{ x}\OperatorTok{**}\DecValTok{2} \OperatorTok{+}\NormalTok{ y}\OperatorTok{**}\DecValTok{2} \OperatorTok{{-}} \DecValTok{25} -\NormalTok{ eq2 }\OperatorTok{=}\NormalTok{ x}\OperatorTok{**}\DecValTok{2} \OperatorTok{{-}}\NormalTok{ y} - \ControlFlowTok{return}\NormalTok{ np.array([eq1, eq2])} - -\KeywordTok{def}\NormalTok{ newton\_method(initial\_guess, tolerance}\OperatorTok{=}\FloatTok{1e{-}6}\NormalTok{, max\_iter}\OperatorTok{=}\DecValTok{100}\NormalTok{):} - \BuiltInTok{vars} \OperatorTok{=}\NormalTok{ np.array(initial\_guess, dtype}\OperatorTok{=}\BuiltInTok{float}\NormalTok{)} - \ControlFlowTok{for}\NormalTok{ \_ }\KeywordTok{in} \BuiltInTok{range}\NormalTok{(max\_iter):} -\NormalTok{ J }\OperatorTok{=}\NormalTok{ np.array([[}\DecValTok{2} \OperatorTok{*} \BuiltInTok{vars}\NormalTok{[}\DecValTok{0}\NormalTok{], }\DecValTok{2} \OperatorTok{*} \BuiltInTok{vars}\NormalTok{[}\DecValTok{1}\NormalTok{]], [}\DecValTok{2} \OperatorTok{*} \BuiltInTok{vars}\NormalTok{[}\DecValTok{0}\NormalTok{], }\OperatorTok{{-}}\DecValTok{1}\NormalTok{]])} -\NormalTok{ F }\OperatorTok{=}\NormalTok{ equations(}\BuiltInTok{vars}\NormalTok{)} -\NormalTok{ delta }\OperatorTok{=}\NormalTok{ np.linalg.solve(J, }\OperatorTok{{-}}\NormalTok{F)} - \BuiltInTok{vars} \OperatorTok{+=}\NormalTok{ delta} - \ControlFlowTok{if}\NormalTok{ np.linalg.norm(delta) }\OperatorTok{\textless{}}\NormalTok{ tolerance:} - \ControlFlowTok{return} \BuiltInTok{vars} - -\NormalTok{initial\_guess }\OperatorTok{=}\NormalTok{ [}\DecValTok{1}\NormalTok{, }\DecValTok{1}\NormalTok{]} -\NormalTok{solution }\OperatorTok{=}\NormalTok{ newton\_method(initial\_guess)} -\BuiltInTok{print}\NormalTok{(}\StringTok{"Solution:"}\NormalTok{, solution)} -\end{Highlighting} -\end{Shaded} diff --git a/book/module2/num_methods_1.tex b/book/module2/num_methods_1.tex new file mode 100644 index 0000000..5550d12 --- /dev/null +++ b/book/module2/num_methods_1.tex @@ -0,0 +1,129 @@ +\section{Solving non-linear +equations}\label{solving-non-linear-equations} + +\subsection{Introduction}\label{introduction} + +\subsection{Prerequisites}\label{prerequisites} + +\begin{Shaded} +\begin{Highlighting}[] +\ImportTok{import}\NormalTok{ numpy} +\ImportTok{import}\NormalTok{ scipy} +\ImportTok{import}\NormalTok{ sympy} +\end{Highlighting} +\end{Shaded} + +\subsection{fsolve from SciPy}\label{fsolve-from-scipy} + +\begin{Shaded} +\begin{Highlighting}[] +\ImportTok{from}\NormalTok{ scipy.optimize }\ImportTok{import}\NormalTok{ fsolve} + +\KeywordTok{def}\NormalTok{ equations(}\BuiltInTok{vars}\NormalTok{):} +\NormalTok{ x, y }\OperatorTok{=} \BuiltInTok{vars} +\NormalTok{ eq1 }\OperatorTok{=}\NormalTok{ x}\OperatorTok{**}\DecValTok{2} \OperatorTok{+}\NormalTok{ y}\OperatorTok{**}\DecValTok{2} \OperatorTok{{-}} \DecValTok{25} +\NormalTok{ eq2 }\OperatorTok{=}\NormalTok{ x}\OperatorTok{**}\DecValTok{2} \OperatorTok{{-}}\NormalTok{ y} + \ControlFlowTok{return}\NormalTok{ [eq1, eq2]} + +\NormalTok{initial\_guess }\OperatorTok{=}\NormalTok{ [}\DecValTok{1}\NormalTok{, }\DecValTok{1}\NormalTok{]} +\NormalTok{solution }\OperatorTok{=}\NormalTok{ fsolve(equations, initial\_guess)} +\BuiltInTok{print}\NormalTok{(}\StringTok{"Solution:"}\NormalTok{, solution)} +\end{Highlighting} +\end{Shaded} + +\subsection{root from SciPy}\label{root-from-scipy} + +\begin{Shaded} +\begin{Highlighting}[] +\ImportTok{from}\NormalTok{ scipy.optimize }\ImportTok{import}\NormalTok{ root} + +\KeywordTok{def}\NormalTok{ equations(}\BuiltInTok{vars}\NormalTok{):} +\NormalTok{ x, y }\OperatorTok{=} \BuiltInTok{vars} +\NormalTok{ eq1 }\OperatorTok{=}\NormalTok{ x}\OperatorTok{**}\DecValTok{2} \OperatorTok{+}\NormalTok{ y}\OperatorTok{**}\DecValTok{2} \OperatorTok{{-}} \DecValTok{25} +\NormalTok{ eq2 }\OperatorTok{=}\NormalTok{ x}\OperatorTok{**}\DecValTok{2} \OperatorTok{{-}}\NormalTok{ y} + \ControlFlowTok{return}\NormalTok{ [eq1, eq2]} + +\NormalTok{initial\_guess }\OperatorTok{=}\NormalTok{ [}\DecValTok{1}\NormalTok{, }\DecValTok{1}\NormalTok{]} +\NormalTok{solution }\OperatorTok{=}\NormalTok{ root(equations, initial\_guess)} +\BuiltInTok{print}\NormalTok{(}\StringTok{"Solution:"}\NormalTok{, solution.x)} +\end{Highlighting} +\end{Shaded} + +\subsection{minimize from SciPy}\label{minimize-from-scipy} + +\begin{Shaded} +\begin{Highlighting}[] +\ImportTok{from}\NormalTok{ scipy.optimize }\ImportTok{import}\NormalTok{ minimize} + +\CommentTok{\# Define the equations} +\KeywordTok{def}\NormalTok{ equation1(x, y):} + \ControlFlowTok{return}\NormalTok{ x}\OperatorTok{**}\DecValTok{2} \OperatorTok{+}\NormalTok{ y}\OperatorTok{**}\DecValTok{2} \OperatorTok{{-}} \DecValTok{25} + +\KeywordTok{def}\NormalTok{ equation2(x, y):} + \ControlFlowTok{return}\NormalTok{ x}\OperatorTok{**}\DecValTok{2} \OperatorTok{{-}}\NormalTok{ y} + +\CommentTok{\# Define the objective function for optimization} +\KeywordTok{def}\NormalTok{ objective(xy):} +\NormalTok{ x, y }\OperatorTok{=}\NormalTok{ xy} + \ControlFlowTok{return}\NormalTok{ equation1(x, y)}\OperatorTok{**}\DecValTok{2} \OperatorTok{+}\NormalTok{ equation2(x, y)}\OperatorTok{**}\DecValTok{2} + +\CommentTok{\# Initial guess} +\NormalTok{initial\_guess }\OperatorTok{=}\NormalTok{ [}\DecValTok{1}\NormalTok{, }\DecValTok{1}\NormalTok{]} + +\CommentTok{\# Perform optimization} +\NormalTok{result }\OperatorTok{=}\NormalTok{ minimize(objective, initial\_guess)} +\NormalTok{solution\_optimization }\OperatorTok{=}\NormalTok{ result.x} + +\BuiltInTok{print}\NormalTok{(}\StringTok{"Optimization Method Solution:"}\NormalTok{, solution\_optimization)} +\end{Highlighting} +\end{Shaded} + +\subsection{nsolve from SymPy}\label{nsolve-from-sympy} + +\begin{Shaded} +\begin{Highlighting}[] +\ImportTok{from}\NormalTok{ sympy }\ImportTok{import}\NormalTok{ symbols, Eq, nsolve} + +\CommentTok{\# Define the variables} +\NormalTok{x, y }\OperatorTok{=}\NormalTok{ symbols(}\StringTok{\textquotesingle{}x y\textquotesingle{}}\NormalTok{)} + +\CommentTok{\# Define the equations} +\NormalTok{eq1 }\OperatorTok{=}\NormalTok{ Eq(x}\OperatorTok{**}\DecValTok{2} \OperatorTok{+}\NormalTok{ y}\OperatorTok{**}\DecValTok{2}\NormalTok{, }\DecValTok{25}\NormalTok{)} +\NormalTok{eq2 }\OperatorTok{=}\NormalTok{ Eq(x }\OperatorTok{{-}}\NormalTok{ y, }\DecValTok{0}\NormalTok{)} + +\CommentTok{\# Initial guess for the solution} +\NormalTok{initial\_guess }\OperatorTok{=}\NormalTok{ [}\DecValTok{1}\NormalTok{, }\DecValTok{1}\NormalTok{]} + +\CommentTok{\# Use nsolve to find the solution} +\NormalTok{solution }\OperatorTok{=}\NormalTok{ nsolve([eq1, eq2], [x, y], initial\_guess)} +\BuiltInTok{print}\NormalTok{(}\StringTok{"Solution:"}\NormalTok{, solution)} +\end{Highlighting} +\end{Shaded} + +\subsection{newton\_method from NumPy}\label{newton_method-from-numpy} + +\begin{Shaded} +\begin{Highlighting}[] +\ImportTok{import}\NormalTok{ numpy }\ImportTok{as}\NormalTok{ np} + +\KeywordTok{def}\NormalTok{ equations(}\BuiltInTok{vars}\NormalTok{):} +\NormalTok{ x, y }\OperatorTok{=} \BuiltInTok{vars} +\NormalTok{ eq1 }\OperatorTok{=}\NormalTok{ x}\OperatorTok{**}\DecValTok{2} \OperatorTok{+}\NormalTok{ y}\OperatorTok{**}\DecValTok{2} \OperatorTok{{-}} \DecValTok{25} +\NormalTok{ eq2 }\OperatorTok{=}\NormalTok{ x}\OperatorTok{**}\DecValTok{2} \OperatorTok{{-}}\NormalTok{ y} + \ControlFlowTok{return}\NormalTok{ np.array([eq1, eq2])} + +\KeywordTok{def}\NormalTok{ newton\_method(initial\_guess, tolerance}\OperatorTok{=}\FloatTok{1e{-}6}\NormalTok{, max\_iter}\OperatorTok{=}\DecValTok{100}\NormalTok{):} + \BuiltInTok{vars} \OperatorTok{=}\NormalTok{ np.array(initial\_guess, dtype}\OperatorTok{=}\BuiltInTok{float}\NormalTok{)} + \ControlFlowTok{for}\NormalTok{ \_ }\KeywordTok{in} \BuiltInTok{range}\NormalTok{(max\_iter):} +\NormalTok{ J }\OperatorTok{=}\NormalTok{ np.array([[}\DecValTok{2} \OperatorTok{*} \BuiltInTok{vars}\NormalTok{[}\DecValTok{0}\NormalTok{], }\DecValTok{2} \OperatorTok{*} \BuiltInTok{vars}\NormalTok{[}\DecValTok{1}\NormalTok{]], [}\DecValTok{2} \OperatorTok{*} \BuiltInTok{vars}\NormalTok{[}\DecValTok{0}\NormalTok{], }\OperatorTok{{-}}\DecValTok{1}\NormalTok{]])} +\NormalTok{ F }\OperatorTok{=}\NormalTok{ equations(}\BuiltInTok{vars}\NormalTok{)} +\NormalTok{ delta }\OperatorTok{=}\NormalTok{ np.linalg.solve(J, }\OperatorTok{{-}}\NormalTok{F)} + \BuiltInTok{vars} \OperatorTok{+=}\NormalTok{ delta} + \ControlFlowTok{if}\NormalTok{ np.linalg.norm(delta) }\OperatorTok{\textless{}}\NormalTok{ tolerance:} + \ControlFlowTok{return} \BuiltInTok{vars} + +\NormalTok{initial\_guess }\OperatorTok{=}\NormalTok{ [}\DecValTok{1}\NormalTok{, }\DecValTok{1}\NormalTok{]} +\NormalTok{solution }\OperatorTok{=}\NormalTok{ newton\_method(initial\_guess)} +\BuiltInTok{print}\NormalTok{(}\StringTok{"Solution:"}\NormalTok{, solution)} +\end{Highlighting} +\end{Shaded} diff --git a/book/module3/module3.tex b/book/module3/module3.tex index 3e93796..3c59ddd 100644 --- a/book/module3/module3.tex +++ b/book/module3/module3.tex @@ -1,4 +1,4 @@ \chapter{Module 3: Applications of Computational Mathematics} -\input{module3/non_linear_eqn_solver} +\input{module3/numerical_methods} \input{module3/supersonic} \input{module3/system_of_equations} diff --git a/book/module3/non_linear_eqn_solver.tex b/book/module3/non_linear_eqn_solver.tex deleted file mode 100644 index 5550d12..0000000 --- a/book/module3/non_linear_eqn_solver.tex +++ /dev/null @@ -1,129 +0,0 @@ -\section{Solving non-linear -equations}\label{solving-non-linear-equations} - -\subsection{Introduction}\label{introduction} - -\subsection{Prerequisites}\label{prerequisites} - -\begin{Shaded} -\begin{Highlighting}[] -\ImportTok{import}\NormalTok{ numpy} -\ImportTok{import}\NormalTok{ scipy} -\ImportTok{import}\NormalTok{ sympy} -\end{Highlighting} -\end{Shaded} - -\subsection{fsolve from SciPy}\label{fsolve-from-scipy} - -\begin{Shaded} -\begin{Highlighting}[] -\ImportTok{from}\NormalTok{ scipy.optimize }\ImportTok{import}\NormalTok{ fsolve} - -\KeywordTok{def}\NormalTok{ equations(}\BuiltInTok{vars}\NormalTok{):} -\NormalTok{ x, y }\OperatorTok{=} \BuiltInTok{vars} -\NormalTok{ eq1 }\OperatorTok{=}\NormalTok{ x}\OperatorTok{**}\DecValTok{2} \OperatorTok{+}\NormalTok{ y}\OperatorTok{**}\DecValTok{2} \OperatorTok{{-}} \DecValTok{25} -\NormalTok{ eq2 }\OperatorTok{=}\NormalTok{ x}\OperatorTok{**}\DecValTok{2} \OperatorTok{{-}}\NormalTok{ y} - \ControlFlowTok{return}\NormalTok{ [eq1, eq2]} - -\NormalTok{initial\_guess }\OperatorTok{=}\NormalTok{ [}\DecValTok{1}\NormalTok{, }\DecValTok{1}\NormalTok{]} -\NormalTok{solution }\OperatorTok{=}\NormalTok{ fsolve(equations, initial\_guess)} -\BuiltInTok{print}\NormalTok{(}\StringTok{"Solution:"}\NormalTok{, solution)} -\end{Highlighting} -\end{Shaded} - -\subsection{root from SciPy}\label{root-from-scipy} - -\begin{Shaded} -\begin{Highlighting}[] -\ImportTok{from}\NormalTok{ scipy.optimize }\ImportTok{import}\NormalTok{ root} - -\KeywordTok{def}\NormalTok{ equations(}\BuiltInTok{vars}\NormalTok{):} -\NormalTok{ x, y }\OperatorTok{=} \BuiltInTok{vars} -\NormalTok{ eq1 }\OperatorTok{=}\NormalTok{ x}\OperatorTok{**}\DecValTok{2} \OperatorTok{+}\NormalTok{ y}\OperatorTok{**}\DecValTok{2} \OperatorTok{{-}} \DecValTok{25} -\NormalTok{ eq2 }\OperatorTok{=}\NormalTok{ x}\OperatorTok{**}\DecValTok{2} \OperatorTok{{-}}\NormalTok{ y} - \ControlFlowTok{return}\NormalTok{ [eq1, eq2]} - -\NormalTok{initial\_guess }\OperatorTok{=}\NormalTok{ [}\DecValTok{1}\NormalTok{, }\DecValTok{1}\NormalTok{]} -\NormalTok{solution }\OperatorTok{=}\NormalTok{ root(equations, initial\_guess)} -\BuiltInTok{print}\NormalTok{(}\StringTok{"Solution:"}\NormalTok{, solution.x)} -\end{Highlighting} -\end{Shaded} - -\subsection{minimize from SciPy}\label{minimize-from-scipy} - -\begin{Shaded} -\begin{Highlighting}[] -\ImportTok{from}\NormalTok{ scipy.optimize }\ImportTok{import}\NormalTok{ minimize} - -\CommentTok{\# Define the equations} -\KeywordTok{def}\NormalTok{ equation1(x, y):} - \ControlFlowTok{return}\NormalTok{ x}\OperatorTok{**}\DecValTok{2} \OperatorTok{+}\NormalTok{ y}\OperatorTok{**}\DecValTok{2} \OperatorTok{{-}} \DecValTok{25} - -\KeywordTok{def}\NormalTok{ equation2(x, y):} - \ControlFlowTok{return}\NormalTok{ x}\OperatorTok{**}\DecValTok{2} \OperatorTok{{-}}\NormalTok{ y} - -\CommentTok{\# Define the objective function for optimization} -\KeywordTok{def}\NormalTok{ objective(xy):} -\NormalTok{ x, y }\OperatorTok{=}\NormalTok{ xy} - \ControlFlowTok{return}\NormalTok{ equation1(x, y)}\OperatorTok{**}\DecValTok{2} \OperatorTok{+}\NormalTok{ equation2(x, y)}\OperatorTok{**}\DecValTok{2} - -\CommentTok{\# Initial guess} -\NormalTok{initial\_guess }\OperatorTok{=}\NormalTok{ [}\DecValTok{1}\NormalTok{, }\DecValTok{1}\NormalTok{]} - -\CommentTok{\# Perform optimization} -\NormalTok{result }\OperatorTok{=}\NormalTok{ minimize(objective, initial\_guess)} -\NormalTok{solution\_optimization }\OperatorTok{=}\NormalTok{ result.x} - -\BuiltInTok{print}\NormalTok{(}\StringTok{"Optimization Method Solution:"}\NormalTok{, solution\_optimization)} -\end{Highlighting} -\end{Shaded} - -\subsection{nsolve from SymPy}\label{nsolve-from-sympy} - -\begin{Shaded} -\begin{Highlighting}[] -\ImportTok{from}\NormalTok{ sympy }\ImportTok{import}\NormalTok{ symbols, Eq, nsolve} - -\CommentTok{\# Define the variables} -\NormalTok{x, y }\OperatorTok{=}\NormalTok{ symbols(}\StringTok{\textquotesingle{}x y\textquotesingle{}}\NormalTok{)} - -\CommentTok{\# Define the equations} -\NormalTok{eq1 }\OperatorTok{=}\NormalTok{ Eq(x}\OperatorTok{**}\DecValTok{2} \OperatorTok{+}\NormalTok{ y}\OperatorTok{**}\DecValTok{2}\NormalTok{, }\DecValTok{25}\NormalTok{)} -\NormalTok{eq2 }\OperatorTok{=}\NormalTok{ Eq(x }\OperatorTok{{-}}\NormalTok{ y, }\DecValTok{0}\NormalTok{)} - -\CommentTok{\# Initial guess for the solution} -\NormalTok{initial\_guess }\OperatorTok{=}\NormalTok{ [}\DecValTok{1}\NormalTok{, }\DecValTok{1}\NormalTok{]} - -\CommentTok{\# Use nsolve to find the solution} -\NormalTok{solution }\OperatorTok{=}\NormalTok{ nsolve([eq1, eq2], [x, y], initial\_guess)} -\BuiltInTok{print}\NormalTok{(}\StringTok{"Solution:"}\NormalTok{, solution)} -\end{Highlighting} -\end{Shaded} - -\subsection{newton\_method from NumPy}\label{newton_method-from-numpy} - -\begin{Shaded} -\begin{Highlighting}[] -\ImportTok{import}\NormalTok{ numpy }\ImportTok{as}\NormalTok{ np} - -\KeywordTok{def}\NormalTok{ equations(}\BuiltInTok{vars}\NormalTok{):} -\NormalTok{ x, y }\OperatorTok{=} \BuiltInTok{vars} -\NormalTok{ eq1 }\OperatorTok{=}\NormalTok{ x}\OperatorTok{**}\DecValTok{2} \OperatorTok{+}\NormalTok{ y}\OperatorTok{**}\DecValTok{2} \OperatorTok{{-}} \DecValTok{25} -\NormalTok{ eq2 }\OperatorTok{=}\NormalTok{ x}\OperatorTok{**}\DecValTok{2} \OperatorTok{{-}}\NormalTok{ y} - \ControlFlowTok{return}\NormalTok{ np.array([eq1, eq2])} - -\KeywordTok{def}\NormalTok{ newton\_method(initial\_guess, tolerance}\OperatorTok{=}\FloatTok{1e{-}6}\NormalTok{, max\_iter}\OperatorTok{=}\DecValTok{100}\NormalTok{):} - \BuiltInTok{vars} \OperatorTok{=}\NormalTok{ np.array(initial\_guess, dtype}\OperatorTok{=}\BuiltInTok{float}\NormalTok{)} - \ControlFlowTok{for}\NormalTok{ \_ }\KeywordTok{in} \BuiltInTok{range}\NormalTok{(max\_iter):} -\NormalTok{ J }\OperatorTok{=}\NormalTok{ np.array([[}\DecValTok{2} \OperatorTok{*} \BuiltInTok{vars}\NormalTok{[}\DecValTok{0}\NormalTok{], }\DecValTok{2} \OperatorTok{*} \BuiltInTok{vars}\NormalTok{[}\DecValTok{1}\NormalTok{]], [}\DecValTok{2} \OperatorTok{*} \BuiltInTok{vars}\NormalTok{[}\DecValTok{0}\NormalTok{], }\OperatorTok{{-}}\DecValTok{1}\NormalTok{]])} -\NormalTok{ F }\OperatorTok{=}\NormalTok{ equations(}\BuiltInTok{vars}\NormalTok{)} -\NormalTok{ delta }\OperatorTok{=}\NormalTok{ np.linalg.solve(J, }\OperatorTok{{-}}\NormalTok{F)} - \BuiltInTok{vars} \OperatorTok{+=}\NormalTok{ delta} - \ControlFlowTok{if}\NormalTok{ np.linalg.norm(delta) }\OperatorTok{\textless{}}\NormalTok{ tolerance:} - \ControlFlowTok{return} \BuiltInTok{vars} - -\NormalTok{initial\_guess }\OperatorTok{=}\NormalTok{ [}\DecValTok{1}\NormalTok{, }\DecValTok{1}\NormalTok{]} -\NormalTok{solution }\OperatorTok{=}\NormalTok{ newton\_method(initial\_guess)} -\BuiltInTok{print}\NormalTok{(}\StringTok{"Solution:"}\NormalTok{, solution)} -\end{Highlighting} -\end{Shaded} diff --git a/tutorials/module_2/non_linear_eqn_solver.md b/tutorials/module_2/non_linear_eqn_solver.md deleted file mode 100644 index 6d1ded3..0000000 --- a/tutorials/module_2/non_linear_eqn_solver.md +++ /dev/null @@ -1,117 +0,0 @@ -# Solving non-linear equations - -## Introduction - - -## Prerequisites - -```python -import numpy -import scipy -import sympy -``` - - -## fsolve from SciPy - -```python -from scipy.optimize import fsolve - -def equations(vars): - x, y = vars - eq1 = x**2 + y**2 - 25 - eq2 = x**2 - y - return [eq1, eq2] - -initial_guess = [1, 1] -solution = fsolve(equations, initial_guess) -print("Solution:", solution) -``` - -## root from SciPy -```python -from scipy.optimize import root - -def equations(vars): - x, y = vars - eq1 = x**2 + y**2 - 25 - eq2 = x**2 - y - return [eq1, eq2] - -initial_guess = [1, 1] -solution = root(equations, initial_guess) -print("Solution:", solution.x) -``` - - -## minimize from SciPy -```python -from scipy.optimize import minimize - -# Define the equations -def equation1(x, y): - return x**2 + y**2 - 25 - -def equation2(x, y): - return x**2 - y - -# Define the objective function for optimization -def objective(xy): - x, y = xy - return equation1(x, y)**2 + equation2(x, y)**2 - -# Initial guess -initial_guess = [1, 1] - -# Perform optimization -result = minimize(objective, initial_guess) -solution_optimization = result.x - -print("Optimization Method Solution:", solution_optimization) - -``` - -## nsolve from SymPy -```python -from sympy import symbols, Eq, nsolve - -# Define the variables -x, y = symbols('x y') - -# Define the equations -eq1 = Eq(x**2 + y**2, 25) -eq2 = Eq(x - y, 0) - -# Initial guess for the solution -initial_guess = [1, 1] - -# Use nsolve to find the solution -solution = nsolve([eq1, eq2], [x, y], initial_guess) -print("Solution:", solution) -``` - -## newton_method from NumPy - -```python -import numpy as np - -def equations(vars): - x, y = vars - eq1 = x**2 + y**2 - 25 - eq2 = x**2 - y - return np.array([eq1, eq2]) - -def newton_method(initial_guess, tolerance=1e-6, max_iter=100): - vars = np.array(initial_guess, dtype=float) - for _ in range(max_iter): - J = np.array([[2 * vars[0], 2 * vars[1]], [2 * vars[0], -1]]) - F = equations(vars) - delta = np.linalg.solve(J, -F) - vars += delta - if np.linalg.norm(delta) < tolerance: - return vars - -initial_guess = [1, 1] -solution = newton_method(initial_guess) -print("Solution:", solution) -``` \ No newline at end of file diff --git a/tutorials/module_2/num_methods_1.md b/tutorials/module_2/num_methods_1.md new file mode 100644 index 0000000..6d1ded3 --- /dev/null +++ b/tutorials/module_2/num_methods_1.md @@ -0,0 +1,117 @@ +# Solving non-linear equations + +## Introduction + + +## Prerequisites + +```python +import numpy +import scipy +import sympy +``` + + +## fsolve from SciPy + +```python +from scipy.optimize import fsolve + +def equations(vars): + x, y = vars + eq1 = x**2 + y**2 - 25 + eq2 = x**2 - y + return [eq1, eq2] + +initial_guess = [1, 1] +solution = fsolve(equations, initial_guess) +print("Solution:", solution) +``` + +## root from SciPy +```python +from scipy.optimize import root + +def equations(vars): + x, y = vars + eq1 = x**2 + y**2 - 25 + eq2 = x**2 - y + return [eq1, eq2] + +initial_guess = [1, 1] +solution = root(equations, initial_guess) +print("Solution:", solution.x) +``` + + +## minimize from SciPy +```python +from scipy.optimize import minimize + +# Define the equations +def equation1(x, y): + return x**2 + y**2 - 25 + +def equation2(x, y): + return x**2 - y + +# Define the objective function for optimization +def objective(xy): + x, y = xy + return equation1(x, y)**2 + equation2(x, y)**2 + +# Initial guess +initial_guess = [1, 1] + +# Perform optimization +result = minimize(objective, initial_guess) +solution_optimization = result.x + +print("Optimization Method Solution:", solution_optimization) + +``` + +## nsolve from SymPy +```python +from sympy import symbols, Eq, nsolve + +# Define the variables +x, y = symbols('x y') + +# Define the equations +eq1 = Eq(x**2 + y**2, 25) +eq2 = Eq(x - y, 0) + +# Initial guess for the solution +initial_guess = [1, 1] + +# Use nsolve to find the solution +solution = nsolve([eq1, eq2], [x, y], initial_guess) +print("Solution:", solution) +``` + +## newton_method from NumPy + +```python +import numpy as np + +def equations(vars): + x, y = vars + eq1 = x**2 + y**2 - 25 + eq2 = x**2 - y + return np.array([eq1, eq2]) + +def newton_method(initial_guess, tolerance=1e-6, max_iter=100): + vars = np.array(initial_guess, dtype=float) + for _ in range(max_iter): + J = np.array([[2 * vars[0], 2 * vars[1]], [2 * vars[0], -1]]) + F = equations(vars) + delta = np.linalg.solve(J, -F) + vars += delta + if np.linalg.norm(delta) < tolerance: + return vars + +initial_guess = [1, 1] +solution = newton_method(initial_guess) +print("Solution:", solution) +``` \ No newline at end of file -- cgit v1.2.3