#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Thu Apr 3 11:53:24 2025 @author: christian """ from scipy.optimize import fsolve, root, minimize from sympy import symbols, Eq, nsolve import numpy as np ### 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= fsolve(equations, initial_guess) ### 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 = root(equations, initial_guess) ### 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 ### 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 = nsolve([eq1, eq2], [x, y], initial_guess) ### newton_method ### 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 = newton_method(initial_guess)