From 8ab48120f03185a051f652b18f97439265884221 Mon Sep 17 00:00:00 2001
From: Christian Kolset <christian.kolset@gmail.com>
Date: Tue, 29 Apr 2025 18:34:26 -0600
Subject: Added tex files to book/

---
 book/module2/non_linear_eqn_solver.tex | 129 +++++++++++++++++++++++++++++++++
 1 file changed, 129 insertions(+)
 create mode 100644 book/module2/non_linear_eqn_solver.tex

(limited to 'book/module2/non_linear_eqn_solver.tex')

diff --git a/book/module2/non_linear_eqn_solver.tex b/book/module2/non_linear_eqn_solver.tex
new file mode 100644
index 0000000..5550d12
--- /dev/null
+++ b/book/module2/non_linear_eqn_solver.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}
-- 
cgit v1.2.3

