Skip to content Skip to sidebar Skip to footer

Solving Nonlinear Systems Of Equations

I'm receiving an error with this simple code, the problem is that the error only appears with one of the equations that I need (78 * x**0.3 * y**0.8 - 376). The error : invalid val

Solution 1:

F[0] will be complex if y is negative. fsolve doesn't support complex root finding.


Solution 2:

You need to solve the nonlinear equation system F(x,y) = 0 subject to x, y >= 0, which is equivalent to minimize the euclidean norm ||F(x,y)|| s.t. x,y >= 0. To solve this constrained optimization problem, you can use scipy.optimize.minimize as follows:

import numpy as np
from scipy.optimize import minimize

def Funcion(z):
   x = z[0]
   y = z[1]

   F = np.empty((2))
   F[0] = 78 * x**0.3 * y**0.8 - 376
   F[1] = 77 * x**0.5 * y - 770
   return F

# initial point
zGuess = np.array([1.0, 1.0])

# bounds x, y >= 0
bounds = [(0, None), (0, None)]

# Solve the constrained optimization problem
z = minimize(lambda z: np.linalg.norm(Funcion(z)), x0=zGuess, bounds=bounds)

# Print the solution
print(z.x)


Post a Comment for "Solving Nonlinear Systems Of Equations"