Ecuación de segundo grado

La ecuación general es:

\[ax^2 + bx + c = 0\] La fórmula para calcular las raíces es:

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

# Función para resolver la ecuación de segundo grado
resolver_ecuacion_segundo_grado <- function(a, b, c) {
  if (a == 0) stop("Error: a = 0, no es una ecuación de segundo grado.")
  delta <- b^2 - 4*a*c

  if (delta > 0) {
    x1 <- (-b + sqrt(delta)) / (2*a)
    x2 <- (-b - sqrt(delta)) / (2*a)
    return(c(x1 = x1, x2 = x2))
  } else if (delta == 0) {
    x <- -b / (2*a)
    return(c(x = x))
  } else {
    parte_real <- -b / (2*a)
    parte_imag <- sqrt(abs(delta)) / (2*a)
    x1 <- complex(real = parte_real, imaginary = parte_imag)
    x2 <- complex(real = parte_real, imaginary = -parte_imag)
    return(c(x1 = x1, x2 = x2))
  }
}
cat("Ejemplo 1: x^2 + 5x + 6 = 0\n")
## Ejemplo 1: x^2 + 5x + 6 = 0
print(resolver_ecuacion_segundo_grado(1, 5, 6))
## x1 x2 
## -2 -3
cat("\nEjemplo 2: x^2 + 2x + 5 = 0\n")
## 
## Ejemplo 2: x^2 + 2x + 5 = 0
print(resolver_ecuacion_segundo_grado(1, 2, 5))
##    x1    x2 
## -1+2i -1-2i

Sistema de dos ecuaciones y dos incógnitas (método de sustitución)

Consideramos el sistema: \[\begin{cases} a_1 x + b_1 y = c_1 \\ a_2 x + b_2 y = c_2 \end{cases}\] método de sustitución El cual consiste en despejar una incógnita en una ecuación y sustituirla en la otra.

Ejemplo de fórmula general (despejar \(x\) en la primera ecuación):

\[ x = \frac{c_1 - b_1 y}{a_1}\quad (si\; a_1 \neq 0) \] A continuación hay una función en R que realiza el método de sustitución y muestra paso a paso los cálculos.

# Función que resuelve un sistema 2x2 por sustitución y muestra pasos
sistema_sustitucion <- function(a1, b1, c1, a2, b2, c2, despejar = "x") {
  pasos <- character()
  # Comprobar casos degenerados
  if (a1 == 0 && b1 == 0) stop("La primera ecuación no contiene incógnitas (0 = c1).")
  if (a2 == 0 && b2 == 0) stop("La segunda ecuación no contiene incógnitas (0 = c2).")

  if (despejar == "x") {
    if (a1 == 0) {
      stop("No se puede despejar x en la primera ecuación porque a1 = 0. Cambia 'despejar' a 'y' o intercambia ecuaciones.")
    }
    pasos <- c(pasos, paste0("Despejar x de la primera ecuación: x = (", c1, " - ", b1, " y) / ", a1))
    # Sustituir en la segunda
    pasos <- c(pasos, paste0("Sustituir en la segunda ecuación: ", a2, "*[(", c1, " - ", b1, " y)/", a1, "] + ", b2, " y = ", c2))
    # Resolver para y
    # Compute algebraically
    # a2*(c1 - b1*y)/a1 + b2*y = c2
    # (a2*c1)/a1 - (a2*b1)/a1 * y + b2*y = c2
    coef_y <- - (a2*b1)/a1 + b2
    termino_const <- (a2*c1)/a1
    pasos <- c(pasos, paste0("Esto da: (", termino_const, ") + (", coef_y, ") y = ", c2))
    # Solve for y: coef_y * y = c2 - termino_const
    if (abs(coef_y) < .Machine$double.eps) {
      if (abs(c2 - termino_const) < .Machine$double.eps) {
        pasos <- c(pasos, "Las ecuaciones son dependientes: infinitas soluciones.")
        return(list(pasos = pasos, tipo = "infinitas"))
      } else {
        pasos <- c(pasos, "Sistema incompatible: no tiene solución.")
        return(list(pasos = pasos, tipo = "incompatibles"))
      }
    }
    y <- (c2 - termino_const) / coef_y
    pasos <- c(pasos, paste0("Resolver para y: y = (", c2, " - ", termino_const, ") / (", coef_y, ") = ", y))
    # Sustituir para x
    x <- (c1 - b1*y)/a1
    pasos <- c(pasos, paste0("Sustituir en x = (", c1, " - ", b1, "*", y, ")/", a1, " => x = ", x))
    return(list(pasos = pasos, tipo = "única", x = x, y = y))

  } else if (despejar == "y") {
    if (b1 == 0) {
      stop("No se puede despejar y en la primera ecuación porque b1 = 0. Cambia 'despejar' a 'x' o intercambia ecuaciones.")
    }
    pasos <- c(pasos, paste0("Despejar y de la primera ecuación: y = (", c1, " - ", a1, " x) / ", b1))
    pasos <- c(pasos, paste0("Sustituir en la segunda: ", a2, " x + ", b2, "*[(", c1, " - ", a1, " x)/", b1, "] = ", c2))
    # Compute:
    # a2*x + b2*(c1 - a1*x)/b1 = c2
    termino_const <- (b2*c1)/b1
    coef_x <- a2 - (b2*a1)/b1
    pasos <- c(pasos, paste0("Esto da: (", coef_x, ") x + (", termino_const, ") = ", c2))
    if (abs(coef_x) < .Machine$double.eps) {
      if (abs(c2 - termino_const) < .Machine$double.eps) {
        pasos <- c(pasos, "Las ecuaciones son dependientes: infinitas soluciones.")
        return(list(pasos = pasos, tipo = "infinitas"))
      } else {
        pasos <- c(pasos, "Sistema incompatible: no tiene solución.")
        return(list(pasos = pasos, tipo = "incompatibles"))
      }
    }
    x <- (c2 - termino_const)/coef_x
    pasos <- c(pasos, paste0("Resolver para x: x = (", c2, " - ", termino_const, ") / (", coef_x, ") = ", x))
    y <- (c1 - a1*x)/b1
    pasos <- c(pasos, paste0("Sustituir en y = (", c1, " - ", a1, "*", x, ")/", b1, " => y = ", y))
    return(list(pasos = pasos, tipo = "única", x = x, y = y))

  } else {
    stop("Parámetro 'despejar' debe ser 'x' o 'y'.")
  }
}
# Ejemplo: resolver sistema
# 2x + 3y = 8
# 1x - 4y = -2

res <- sistema_sustitucion(2, 3, 8, 1, -4, -2, despejar = "x")
cat(paste(res$pasos, collapse = "\n"))
## Despejar x de la primera ecuación: x = (8 - 3 y) / 2
## Sustituir en la segunda ecuación: 1*[(8 - 3 y)/2] + -4 y = -2
## Esto da: (4) + (-5.5) y = -2
## Resolver para y: y = (-2 - 4) / (-5.5) = 1.09090909090909
## Sustituir en x = (8 - 3*1.09090909090909)/2 => x = 2.36363636363636
if (res$tipo == "única") {
  cat("\n\nSolución: x = ", res$x, ", y = ", res$y, "\n")
}
## 
## 
## Solución: x =  2.363636 , y =  1.090909

R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

Including Plots

You can also embed plots, for example:

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.