PROBLEMA 1 – EQUILIBRIO QUÍMICO EN SOLUCIÓN

H2(g) + I2(g) ⇌ 2HI(g) ; Kc = 50.2

Se introducen 0.5 mol de H2 y 0.5 mol de I2

sin HI inicial en 1 L. Analizar Q vs x.

Kc <- 50.2

x <- seq(0, 0.5, by = 0.01)

H2 <- 0.5 - x
I2 <- 0.5 - x
HI <- 2 * x

Q <- (HI^2) / (H2 * I2)

(Q - Kc)^2
##  [1] 2.520040e+03 2.519873e+03 2.519343e+03 2.518404e+03 2.517004e+03
##  [6] 2.515084e+03 2.512578e+03 2.509409e+03 2.505491e+03 2.500726e+03
## [11] 2.495003e+03 2.488193e+03 2.480150e+03 2.470707e+03 2.459670e+03
## [16] 2.446817e+03 2.431889e+03 2.414590e+03 2.394573e+03 2.371437e+03
## [21] 2.344712e+03 2.313850e+03 2.278211e+03 2.237043e+03 2.189465e+03
## [26] 2.134440e+03 2.070756e+03 1.996992e+03 1.911496e+03 1.812365e+03
## [31] 1.697440e+03 1.564345e+03 1.410605e+03 1.233930e+03 1.032819e+03
## [36] 8.078227e+02 5.641110e+02 3.167557e+02 1.017857e+02 6.559661e-03
## [41] 1.904400e+02 1.076650e+03 3.606002e+03 1.014830e+04 2.719567e+04
## [46] 7.496644e+04 2.292494e+05 8.678372e+05 5.079614e+06 9.127509e+07
## [51]          Inf
diff_Q_Kc_sq <- (Q - Kc)^2

min_index <- which.min(diff_Q_Kc_sq)
x_min <- x[min_index]
Q_min <- Q[min_index]

cat("El valor de x que minimiza (Q - Kc)^2 es:", x_min, "\n")
## El valor de x que minimiza (Q - Kc)^2 es: 0.39
cat("El valor de Q en ese punto es:", Q_min, "\n")
## El valor de Q en ese punto es: 50.28099
plot(x, Q, type = "l", col = "orange", lwd = 2,
     xlab = "Cambio (x)", ylab = "Cociente de reacción Q",
     main = "Q en función de x")
abline(h = Kc, col = "red", lty = 2)
points(x_min, Q_min, col = "darkgreen", pch = 19)
legend("topright", legend = c("Q(x)", "Kc", "mínimo Q"), 
       col = c("orange", "red", "darkgreen"), lty = c(1,2,NA), pch = c(NA, NA, 19))

PROBLEMA 2 – ANÁLISIS TERMODINÁMICO DEL CO₂ DESDE TABLAS JANAF

Se grafican los datos de Cp (J/mol·K) en función de la temperatura (K)

utilizando datos obtenidos de JANAF y cargados desde GitHub.

url <- "https://raw.githubusercontent.com/Raquelita03/QM215-2025/refs/heads/main/CO2.csv"
co2 <- read.csv(url, sep = ";")

head(co2)
##        T     Cp       S
## 1 100.00 29.106 173.307
## 2 200.00 29.126 193.485
## 3 250.00 29.201 199.990
## 4 298.15 29.376 205.147
## 5 300.00 29.385 205.329
## 6 350.00 29.694 209.880
# Columnas: T, Cp, S
plot(co2$T, co2$Cp,
     type = "p",               # puntos
     col = "red",              # color de puntos
     xlab = "Temperatura (K)", 
     ylab = "Cp (J/mol·K)", 
     main = "Cp en función de la Temperatura")

modelo_suavizado <- loess(Cp ~ T, data = co2)
tendencia <- predict(modelo_suavizado)

lines(co2$T, tendencia, col = "purple", lwd = 2)

PROBLEMA 3 – ANÁLISIS DE LA RELACIÓN LINEAL ENTRE ABSORBANCIA Y CONCENTRACIÓN DE UNA SOLUCIÓN.

Se ajusta un modelo lineal para relacionar absorbancia con concentración

y se estima la concentración para una absorbancia dada.

# Datos
concentracion <- c(0.00, 0.02, 0.04, 0.06, 0.08, 0.10)
absorbancia <- c(0.00, 0.18, 0.38, 0.59, 0.81, 1.01)

# Crear data frame
df <- data.frame(concentracion, absorbancia)

# Gráfico base
plot(df$concentracion, df$absorbancia,
     main = "Absorbancia vs Concentración",
     xlab = "Concentración (mol/L)",
     ylab = "Absorbancia",
     col = "orange", pch = 16)  # Ajuste de color y forma de punto

# Ajuste lineal
modelo <- lm(absorbancia ~ concentracion, data = df)
abline(modelo, col = "red", lwd = 2)

# Coeficientes
a <- coef(modelo)[1]
b <- coef(modelo)[2]
cat("Ecuación: Absorbancia =", round(a, 2), "+", round(b, 2), "* Conc\n")
## Ecuación: Absorbancia = -0.02 + 10.21 * Conc
# Estimación para absorbancia = 0.75
absorbancia_dada <- 0.75
concentracion_estimada <- (absorbancia_dada - a) / b
cat("Concentración para Absorbancia = 0.75:", round(concentracion_estimada, 4), "mol/L\n")
## Concentración para Absorbancia = 0.75: 0.075 mol/L
# Líneas auxiliares horizontales y verticales
abline(h = 0.75, col = "green", lty = 2)
abline(v = concentracion_estimada, col = "darkgray", lty = 2)

# Mostrar R^2
resumen <- summary(modelo)
cat("Coeficiente de determinación R^2:", round(resumen$r.squared, 4), "\n")
## Coeficiente de determinación R^2: 0.9991

PROBLEMA 4 – CINÉTICA DE PRIMER ORDEN EN LA DEGRADACIÓN DE X

Un compuesto X se descompone según una cinética de primer orden.

Se simulan datos, se agrega ruido experimental, se grafican resultados

y se estima el valor de la constante de velocidad k.

tiempo = seq(0, 20, by = 1)
X0 = 0.100
k = 0.25

X_teorico = X0 * exp(-k * tiempo)

set.seed(123)
ruido = rnorm(length(tiempo), mean = 0, sd = 0.005)
X_ruido = X_teorico + ruido
X_ruido[X_ruido < 0] = 0.0001

plot(tiempo, X_ruido, type = "b", col = "pink", pch = 16,
     main = "Concentración vs Tiempo (con ruido)",
     xlab = "Tiempo (min)", ylab = "[X] (mol/L)")
lines(tiempo, X_teorico, col = "purple", lty = 2)

# PROBLEMA 5 – ANÁLISIS DE DATOS DE UNA TITULACIÓN ÁCIDO-BASE # Se grafica el pH en función del volumen de NaOH agregado # y se estima gráficamente el punto de equivalencia.

datos <- read.csv("https://raw.githubusercontent.com/Raquelita03/QM215-2025/refs/heads/main/titulacion_acetico.csv", sep = ";")

names(datos)
## [1] "vol_NaOH_mL" "pH"
# [1] "vol_NaOH_mL" "pH"

datos_clean <- datos[is.finite(datos$vol_NaOH_mL) & is.finite(datos$pH), ]

# Graficar curva de titulación 
plot(datos_clean$vol_NaOH_mL, datos_clean$pH,
     type = "b", col = "pink", pch = 16,
     main = "Titulación de ácido acético con NaOH",
     xlab = "Volumen de NaOH agregado (mL)", ylab = "pH")

# Calcular derivada (pendiente entre puntos)
delta_pH <- diff(datos_clean$pH)
delta_vol <- diff(datos_clean$vol_NaOH_mL)
pendiente <- delta_pH / delta_vol

# Estimar punto de equivalencia
indice_max <- which.max(pendiente)
punto_equivalencia <- (datos_clean$vol_NaOH_mL[indice_max] + datos_clean$vol_NaOH_mL[indice_max + 1]) / 2

# Agregar línea vertical en el punto de equivalencia
abline(v = punto_equivalencia, col = "red", lty = 2, lwd = 2)

# Punto de equivalencia
text(punto_equivalencia, max(datos_clean$pH), 
     labels = paste0("Punto de equivalencia:\n", round(punto_equivalencia, 2), " mL"),
     pos = 4, col = "blue")

cat("Punto de equivalencia estimado:", round(punto_equivalencia, 2), "mL\n")
## Punto de equivalencia estimado: 9.5 mL