diff options
Diffstat (limited to 'tutorials/module_2/non_linear_eqn_solver.md')
| -rw-r--r-- | tutorials/module_2/non_linear_eqn_solver.md | 117 |
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 |
