summaryrefslogtreecommitdiff
path: root/tutorials/module_2/non_linear_eqn_solver.md
diff options
context:
space:
mode:
Diffstat (limited to 'tutorials/module_2/non_linear_eqn_solver.md')
-rw-r--r--tutorials/module_2/non_linear_eqn_solver.md117
1 files changed, 117 insertions, 0 deletions
diff --git a/tutorials/module_2/non_linear_eqn_solver.md b/tutorials/module_2/non_linear_eqn_solver.md
new file mode 100644
index 0000000..6d1ded3
--- /dev/null
+++ b/tutorials/module_2/non_linear_eqn_solver.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