Introducción

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.

1. Ecuaciones de segundo grado

1.1. Concepto y forma general

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:

  • Si \(D>0\), existen dos soluciones reales diferentes.
  • Si \(D=0\), existe una solución real doble.
  • Si \(D<0\), existen dos soluciones complejas conjugadas y no hay soluciones reales.

1.2. Ejemplo resuelto a mano

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 \]

1.3. Resolución en R mediante la fórmula general

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.

1.4. Comprobación de las soluciones

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.

1.5. Segundo ejemplo: una raíz doble

Resolver \(x^2-4x+4=0\). Su discriminante es cero y la solución es \(x=2\).

resolver_cuadratica(1, -4, 4)
## raiz_doble 
##          2

2. Sistemas de ecuaciones lineales con dos incógnitas

2.1. Concepto y forma general

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:

  • Una solución única: las rectas se cortan en un solo punto.
  • Infinitas soluciones: las dos ecuaciones representan la misma recta.
  • Ninguna solución: las rectas son paralelas distintas.

2.2. Ejemplo resuelto a mano

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

2.3. Resolución en R mediante matrices y 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.

2.4. Comprobación del sistema

Multiplicamos la matriz de coeficientes por el vector solución. El resultado debe coincidir con el vector de términos independientes.

A %*% solucion
##      [,1]
## [1,]    7
## [2,]    2
b
## [1] 7 2

También podemos comprobar cada ecuación sustituyendo los valores:

x <- solucion[1]
y <- solucion[2]

c(
  primera_ecuacion = 2*x + y,
  segunda_ecuacion = x - y
)
## primera_ecuacion.x segunda_ecuacion.x 
##                  7                  2

Los resultados deben ser 7 y 2, respectivamente.

2.5. Regla de Cramer en R

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.

3. Ejercicios propuestos

Resuelva los siguientes ejercicios modificando los valores de los ejemplos y ejecute los fragmentos de código en R.

Ejercicio 1. Ecuación cuadrática

Resolver:

\[ 2x^2-7x+3=0 \]

resolver_cuadratica(2, -7, 3)
##  x1  x2 
## 3.0 0.5

Ejercicio 2. Sistema de ecuaciones

Resolver:

\[ \begin{cases} 3x+2y=12\\ x-y=1 \end{cases} \]

A2 <- matrix(c(3, 2,
               1, -1),
             nrow = 2, byrow = TRUE)
b2 <- c(12, 1)

solve(A2, b2)
## [1] 2.8 1.8

4. Conclusiones

5. Referencias