80 votes

Comment résoudre une paire d'équations non linéaires en utilisant Python?

Quelle est la (meilleure) façon de résoudre une paire d'équations non linéaires en utilisant Python. (Numpy, Scipy ou Sympy)

par exemple:

  • x + y ^ 2 = 4
  • e ^ x + xy = 3

Un extrait de code qui résout la paire ci-dessus sera génial

81voto

HYRY Points 26340

pour la solution numérique, vous pouvez utiliser fsolve:

http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fsolve.html#scipy.optimize.fsolve

 from scipy.optimize import fsolve
import math

def equations(p):
    x, y = p
    return (x+y**2-4, math.exp(x) + x*y - 3)

x, y =  fsolve(equations, (1, 1))

print equations((x, y))
 

30voto

Krastanov Points 1556

Si vous préférez sympy, vous pouvez utiliser nsolve.

 >>> nsolve([x+y**2-4, exp(x)+x*y-3], [x, y], [1, 1])
[0.620344523485226]
[1.83838393066159]
 

Le premier argument est une liste d'équations, le second est une liste de variables et le troisième est une supposition initiale.

2voto

Reza Saidafkan Points 23

Vous pouvez utiliser openopt paquet et de la méthode de la PNL. Il a de nombreux algorithmes de programmation dynamique pour résoudre les équations algébriques non linéaires comprenant:
goldenSection, scipy_fminbound, scipy_bfgs, scipy_cg, scipy_ncg, amsg2p, scipy_lbfgsb, scipy_tnc, bobyqa, ralg, ipopt, scipy_slsqp, scipy_cobyla, lincher, algencan, que vous pouvez choisir.
Certains de ces derniers algorithmes peuvent résoudre la contrainte du problème de programmation non linéaire. Ainsi, vous pouvez introduire votre système d'équations à openopt.La PNL() avec une fonction comme ceci:

lambda x: x[0] + x[1]**2 - 4, np.exp(x[0]) + x[0]*x[1]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X