summaryrefslogtreecommitdiff
path: root/book/module2/num_methods_1.tex
diff options
context:
space:
mode:
authorChristian Kolset <christian.kolset@gmail.com>2025-04-29 18:54:01 -0600
committerChristian Kolset <christian.kolset@gmail.com>2025-04-29 18:54:01 -0600
commitd0f224c34e0a0726274c62e9fe66220af6d2e6cc (patch)
tree60a78908d64001b3d7e0f006aeb393691d409384 /book/module2/num_methods_1.tex
parentdc13208abd61cc3ac7c64a4373f3ad85689f1293 (diff)
Updated Chapter indexing.
Diffstat (limited to 'book/module2/num_methods_1.tex')
-rw-r--r--book/module2/num_methods_1.tex129
1 files changed, 129 insertions, 0 deletions
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}