es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo resolver desigualdades no lineales con Python, como 1240?

Quiero resolver un sistema de ecuaciones de desigualdad no lineales, simplificado de la siguiente manera:
12<xy<14 y 2x + 3*y>40 ¿Hay alguna forma de encontrar el mínimo de x usando Python?
Sé cómo resolver ecuaciones de desigualdad lineales con scipy.optimize.linprog, pero no puedo encontrar la forma de resolver ecuaciones de desigualdad no lineales. Gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para resolver un sistema de ecuaciones de desigualdades no lineales en Python, se puede utilizar la biblioteca scipy.optimize. Sin embargo, scipy.optimize solo proporciona funciones para la solución de ecuaciones no lineales con restricciones en forma de igualdad. Para resolver un sistema de ecuaciones de desigualdades como el que se proporciona, se puede utilizar la función minimize de la biblioteca scipy.optimize.

    Para encontrar el mínimo de x, se puede definir la función objetivo como x en sí mismo, y luego utilizar la función minimize para optimizarla sujeta a las restricciones de desigualdad no lineales dadas. Aquí se muestra un fragmento de código de ejemplo que demuestra cómo resolver el sistema de ecuaciones de desigualdades no lineales utilizando scipy.optimize.minimize:

    import numpy as np
    from scipy.optimize import minimize
    
    # Definir la función objetivo
    def objetivo(x):
        return x
    
    # Definir las restricciones
    def restriccion(x):
        # Restricciones de desigualdad no lineales
        con1 = x[0]*x[1] - 12
        con2 = 14 - x[0]*x[1]
        con3 = 40 - 2*x[0] - 3*x[1]
    
        return [con1, con2, con3]
    
    # Establecer la estimación inicial
    x0 = np.array([0.0, 0.0])
    
    # Resolver el problema de optimización
    solucion = minimize(objetivo, x0, method='SLSQP', constraints={'type': 'ineq', 'fun': restriccion})
    
    # Imprimir el valor mínimo de x
    print(f"El valor mínimo de x es {solucion.x[0]}")
    

    En este código, se define la función objetivo como x, que es la variable que se quiere minimizar. Luego, se definen las restricciones de desigualdades no lineales como restriccion. Estas restricciones se expresan como una lista de funciones que deben ser mayores o iguales a cero. También se establece la estimación inicial para x como [0.0, 0.0], y se utiliza la función minimize con el solver SLSQP para resolver el problema de optimización sujeto a las restricciones de desigualdad. Finalmente, se imprime el valor mínimo de x.

Comments are closed.