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))
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)
# 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
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