Resolver ecuaciones lineales usando eval() en Python

Las ecuaciones lineales que usan una variable de la forma a + bx = c + dx se pueden resolver en Python usando la función eval() . El tipo de entrada será una ecuación lineal en forma de string. 

Sintaxis:

eval(expression, globals=None, locals=None)

Aquí, transformaremos la ecuación en una expresión de números reales e imaginarios de modo que eval pueda procesarla fácilmente.

Por ejemplo, 5x + 4 = 2x + 10 se convierte en 5j + 4 – (2j + 10) al desplazar todos los términos del lado derecho hacia el izquierdo. Estamos transformando esta ecuación en una ecuación compleja porque eval() no puede procesar las ecuaciones de otra manera. Transformarlo en un número complejo ayuda a una evaluación más rápida. 

Paso 1: Usaremos replace() en python para reemplazar «=» con «-(» y reemplazar «x» con «j».

Paso 2: Luego se agrega la string con “+)” para completar la expresión.

Paso 3: Luego se hace { “j”: 1j} para cambiar la ecuación a un formato que pueda ser fácilmente evaluado por la función eval(). En este paso se evalúan todos los términos constantes y también los términos x o imaginarios.

Paso 4: Luego, la expresión evaluada simplemente se descompone en partes real e imaginaria. Si la parte imaginaria existe o la x es verdadera y no cero se imprime la respuesta sino si la parte imaginaria es 0 y la parte real es verdadera no hay solución o hay infinitas soluciones. Aquí,

x = 2.000000

es la solución final.

Ejemplo 1:

Python3

def solve(equation):
    
    # replacing all the x terms with j 
    # the imaginary part
    s1 = equation.replace('x', 'j')
      
    # shifting the equal sign to start 
    # an opening bracket
    s2 = s1.replace('=', '-(')
      
    # adding the closing bracket to form 
    # a complete expression
    s = s2+')'
      
    # mapping the literal j to the complex j
    z = eval(s, {'j': 1j})
    real, imag = z.real, -z.imag
      
    # if the imaginary part is true return the
    # answer
    if imag:
        return "x = %f" % (real/imag)
    else:
        if real:
            return "No solution"
        else:
            return "Infinite solutions"
  
  
equation = "2+3x=5x-7"
print(solve(equation))
Producción

x = 4.500000

Ejemplo 2:

Python3

def solve(equation):
    
    # replacing all the x terms with j 
    # the imaginary part
    s1 = equation.replace('x', 'j')
      
    # shifting the equal sign to start 
    # an opening bracket
    s2 = s1.replace('=', '-(')
      
    # adding the closing bracket to form 
    # a complete expression
    s = s2+')'
      
    # mapping the literal j to the complex j
    z = eval(s, {'j': 1j})
    real, imag = z.real, -z.imag
      
    # if the imaginary part is true return the
    # answer
    if imag:
        return "x = %f" % (real/imag)
    else:
        if real:
            return "No solution"
        else:
            return "Infinite solutions"
  
  
equation = "x=x+10"
print(solve(equation))
Producción

No solution

Ejemplo 3:

Python3

def solve(equation):
    
    # replacing all the x terms with j
    # the imaginary part
    s1 = equation.replace('x', 'j')
      
    # shifting the equal sign to start 
    # an opening bracket
    s2 = s1.replace('=', '-(')
      
    # adding the closing bracket to form 
    # a complete expression
    s = s2+')'
      
    # mapping the literal j to the complex j
    z = eval(s, {'j': 1j})
    real, imag = z.real, -z.imag
      
    # if the imaginary part is true return the
    # answer
    if imag:
        return "x = %f" % (real/imag)
    else:
        if real:
            return "No solution"
        else:
            return "Infinite solutions"
  
  
equation = "2x=2x"
print(solve(equation))
Producción

Infinite solutions

Publicación traducida automáticamente

Artículo escrito por sangy987 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *