El lenguaje de programación R permite realizar operaciones matemáticas, resolver problemas algebraicos y comprobar resultados mediante instrucciones reproducibles. En esta publicación se explica cómo resolver ecuaciones de segundo grado y sistemas de dos ecuaciones lineales con dos incógnitas utilizando R.
El objetivo es combinar los procedimientos matemáticos tradicionales con código en R, interpretar las soluciones y verificar que satisfacen las ecuaciones originales.
Una ecuación de segundo grado, también llamada ecuación cuadrática, tiene la forma:
\[ ax^2+bx+c=0 \]
donde \(a\), \(b\) y \(c\) son números reales y \(a\neq 0\). Sus soluciones se calculan mediante la fórmula general:
\[ x=\frac{-b\pm\sqrt{b^2-4ac}}{2a} \]
La expresión \(D=b^2-4ac\) se denomina discriminante y permite identificar el tipo de soluciones:
Resolver:
\[ x^2-5x+6=0 \]
Identificamos los coeficientes: \(a=1\), \(b=-5\) y \(c=6\).
Calculamos el discriminante:
\[ D=(-5)^2-4(1)(6)=25-24=1 \]
Aplicamos la fórmula general:
\[ x=\frac{-(-5)\pm\sqrt{1}}{2(1)} =\frac{5\pm1}{2} \]
Por tanto:
\[ x_1=3,\qquad x_2=2 \]
En R se puede crear una función que reciba los coeficientes y calcule
las raíces. Se utiliza sqrt() para obtener la raíz
cuadrada.
resolver_cuadratica <- function(a, b, c) {
if (a == 0) {
stop("El coeficiente a debe ser distinto de cero.")
}
discriminante <- b^2 - 4*a*c
if (discriminante > 0) {
x1 <- (-b + sqrt(discriminante)) / (2*a)
x2 <- (-b - sqrt(discriminante)) / (2*a)
return(c(x1 = x1, x2 = x2))
} else if (discriminante == 0) {
x <- -b / (2*a)
return(c(raiz_doble = x))
} else {
parte_real <- -b / (2*a)
parte_imaginaria <- sqrt(abs(discriminante)) / (2*a)
return(c(
x1_real = parte_real,
x1_imaginaria = parte_imaginaria,
x2_real = parte_real,
x2_imaginaria = -parte_imaginaria
))
}
}
# Resolver x^2 - 5x + 6 = 0
resultado <- resolver_cuadratica(1, -5, 6)
resultado## x1 x2
## 3 2
Interpretación: el resultado muestra las dos raíces reales: 3 y 2. La función también contempla los casos de raíz doble y raíces complejas.
Para comprobar una raíz, se sustituye su valor en la ecuación original. El resultado debe ser cero.
a <- 1
b <- -5
c <- 6
raices <- resolver_cuadratica(a, b, c)
# Evaluar ax^2 + bx + c para cada raíz real
comprobacion <- a * raices^2 + b * raices + c
comprobacion## x1 x2
## 0 0
En este ejemplo, ambas sustituciones producen cero, por lo que las soluciones son correctas.
Un sistema de dos ecuaciones lineales con dos incógnitas puede expresarse como:
\[ \begin{cases} a_1x+b_1y=c_1\\ a_2x+b_2y=c_2 \end{cases} \]
La solución es el par ordenado \((x,y)\) que satisface simultáneamente las dos ecuaciones.
Un sistema puede tener:
Resolver el sistema:
\[ \begin{cases} 2x+y=7\\ x-y=2 \end{cases} \]
De la segunda ecuación despejamos \(y=x-2\). Sustituimos en la primera:
\[ 2x+(x-2)=7 \]
\[ 3x=9 \Rightarrow x=3 \]
Luego:
\[ y=3-2=1 \]
La solución es \((x,y)=(3,1)\).
solve()Un sistema lineal se puede escribir como \(A\mathbf{x}=\mathbf{b}\). En R,
solve(A, b) calcula la solución cuando la matriz de
coeficientes es invertible.
# Matriz de coeficientes
A <- matrix(c(2, 1,
1, -1),
nrow = 2, byrow = TRUE)
# Vector de términos independientes
b <- c(7, 2)
# Resolver el sistema
solucion <- solve(A, b)
names(solucion) <- c("x", "y")
solucion## x y
## 3 1
Interpretación: R obtiene \(x=3\) y \(y=1\), coincidiendo con el procedimiento algebraico.
Multiplicamos la matriz de coeficientes por el vector solución. El resultado debe coincidir con el vector de términos independientes.
## [,1]
## [1,] 7
## [2,] 2
## [1] 7 2
También podemos comprobar cada ecuación sustituyendo los valores:
## primera_ecuacion.x segunda_ecuacion.x
## 7 2
Los resultados deben ser 7 y 2, respectivamente.
Para un sistema de dos ecuaciones, la regla de Cramer utiliza determinantes. Si el determinante principal es distinto de cero, existe una solución única:
\[ \Delta=a_1b_2-a_2b_1 \]
\[ x=\frac{c_1b_2-c_2b_1}{\Delta}, \qquad y=\frac{a_1c_2-a_2c_1}{\Delta} \]
resolver_cramer <- function(a1, b1, c1, a2, b2, c2) {
delta <- a1*b2 - a2*b1
if (delta == 0) {
stop("El determinante es cero: no existe una solución única. Revise si el sistema tiene infinitas soluciones o ninguna.")
}
delta_x <- c1*b2 - c2*b1
delta_y <- a1*c2 - a2*c1
c(x = delta_x/delta, y = delta_y/delta)
}
resolver_cramer(2, 1, 7,
1, -1, 2)## x y
## 3 1
La regla de Cramer y la función solve() producen el
mismo par ordenado para este sistema.
Resuelva los siguientes ejercicios modificando los valores de los ejemplos y ejecute los fragmentos de código en R.
Resolver:
\[ 2x^2-7x+3=0 \]
## x1 x2
## 3.0 0.5
solve(), siempre que exista una solución
única.