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
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.
\[ 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
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
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.