A Soluciones Complejas, Códigos Simples

Resolución de ecuaciones de segundo grado y sistemas de ecuaciones de dos incógnitas mediante ejecución de códigos simples junto a la documentación respectiva.

Resolución de Ecuaciones Cuadráticas

Para resolver una ecuación de la forma \(ax^2 + bx + c = 0\), se utiliza la fórmula general

\[x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}\]

Se debe definir la función cuadrática en R para automatizar el cálculo, incluyendo raíces reales y complejas:

resolver_cuadratica <- function(a, b, c) {
  if (a == 0) {
    stop("El coeficiente 'a' no puede ser cero en una ecuación de segundo grado.")
  }
  
  # Se calcula el discriminante (parte de la ecuación cuadrática)
  discriminante <- b^2 - 4*a*c
  
  if (discriminante > 0) {
    # Si el discriminante es > 0, la ecuación tiene dos soluciones reales:
    x1 <- (-b + sqrt(discriminante)) / (2*a)
    x2 <- (-b - sqrt(discriminante)) / (2*a)
    return(list(tipo = "Reales distintos", raices = c(x1, x2)))
    
  } else if (discriminante == 0) {
    # Si el discriminante es = 0, la ecuación tiene 1 solución real
    x <- -b / (2*a)
    return(list(tipo = "Real Doble", raices = x))
    
  } else {
    #  Si el discriminante es < 0, la ecuación tiene soluciones complejas
    parte_real <- -b / (2*a)
    parte_imaginaria <- sqrt(as.complex(discriminante)) / (2*a)
    x1 <- parte_real + parte_imaginaria
    x2 <- parte_real - parte_imaginaria
    return(list(tipo = "Soluciones complejas", raices = c(x1, x2)))
  }
}

Ejercicio de Aplicación

Se tiene la siguiente expresión cuadrática: \[x^2 - 5x + 6 = 0\]

resultado_cuad <- resolver_cuadratica(1, -5, 6)
print(resultado_cuad)
## $tipo
## [1] "Reales distintos"
## 
## $raices
## [1] 3 2

¿Cómo funciona el código?

  • Validación del Coeficiente a: Una ecuación de segundo grado exige que \(a \neq 0\). Si fuera cero, la función se detiene con stop() porque estaríamos ante una ecuación lineal, no cuadrática.
  • Cálculo del Discriminante: Se calcula \(\Delta = b^2 - 4ac\). Este valor es la clave para determinar la naturaleza de las soluciones
    • Si \(\Delta > 0\): se ejecuta la fórmula general dos veces, con \(+\) y otra con \(-\) para obtener dos resultados reales
    • Si \(\Delta = 0\): la parábola toca el eje X en un punto y posee una única raíz real
    • Si \(\Delta < 0\): se utiliza as.complex() para números imaginarios y permite que calcule la raíz cuadrada de un número negativo y devuelva las soluciones en el formato \(a + bi\).

Sistemas de Ecuaciones Lineales (2x2)

Un sistema de dos ecuaciones con dos incógnitas se puede representar de forma matricial como \(Ax = B\): \[\begin{cases} a_{11}x + a_{12}y = b_1 \\ a_{21}x + a_{22}y = b_2 \end{cases}\]

Se debe definir la función para resolver sistemas de ecuaciones en forma de matriz para automatizar el cálculo:

resolver_sistema_2x2 <- function(a11, a12, b1, a21, a22, b2) {
  # Se construye la matriz de coeficientes (A)
  A <- matrix(c(a11, a21, a12, a22), nrow = 2, ncol = 2)
  
  # Se crea el vector de resultados (B)
  B <- c(b1, b2)
  
  # Se resuelve mediante la función solve()
  tryCatch({
    solucion <- solve(A, B)
    names(solucion) <- c("x", "y")
    return(solucion)
  }, error = function(e) {
    return("El sistema no tiene solución única, puede ser una matriz singular o líneas paralelas")
  })
}

Ejercicio de Aplicación

Se tiene el siguiente sistema de ecuaciones con dos incógnitas: \[ \begin{cases} 2x + y = 7 \\ x - 3y = -7 \end{cases} \]

resultado_sis <- resolver_sistema_2x2(2, 1, 7, 1, -3, -7)
print(resultado_sis)
## x y 
## 2 3

¿Cómo funciona el código?

  • Construcción de la Matriz A: La función matrix() organiza los coeficientes (\(x\) Y \(y\)). Los coeficientes tiene un orden en específico.
  • Vector de Resultados B: Contiene los términos independientes, es decir, los números después del signo igual (=).
  • Uso de solve(A, B): Busca de forma interna la matriz inversa \(A^{-1}\) para hallar \(x = A^{-1}B\).
  • Manejo de Errores con tryCatch: No todos los sistemas tienen solución, por ello se utiliza la función que se descompone en dos partes y evita que el programa se detenga abruptamente
    • Intento (try): Es el código que quieres ejecutar, si falla en el proceso, se mantiene la función solve (A, B).
    • Solución al error (error): Es lo que debe hacer R solo si lo anterior falla, en lugar de detenerse, muestra el mensaje: “El sistema no tiene solución única, puede ser una matriz singular o líneas paralelas”