x <- seq(0, 0.5, by = 0.01)
H2 <- 0.5 - x
I2 <- 0.5 - x
HI <- 2 * x
Q <- (HI^2) / (H2 * I2)
Kc <- 50.2
diferencia <- (Q - Kc)^2
resultado <- data.frame(x, H2, I2, HI, Q, diferencia)
print(resultado)
## x H2 I2 HI Q diferencia
## 1 0.00 0.50 0.50 0.00 0.000000e+00 2.520040e+03
## 2 0.01 0.49 0.49 0.02 1.665973e-03 2.519873e+03
## 3 0.02 0.48 0.48 0.04 6.944444e-03 2.519343e+03
## 4 0.03 0.47 0.47 0.06 1.629697e-02 2.518404e+03
## 5 0.04 0.46 0.46 0.08 3.024575e-02 2.517004e+03
## 6 0.05 0.45 0.45 0.10 4.938272e-02 2.515084e+03
## 7 0.06 0.44 0.44 0.12 7.438017e-02 2.512578e+03
## 8 0.07 0.43 0.43 0.14 1.060032e-01 2.509409e+03
## 9 0.08 0.42 0.42 0.16 1.451247e-01 2.505491e+03
## 10 0.09 0.41 0.41 0.18 1.927424e-01 2.500726e+03
## 11 0.10 0.40 0.40 0.20 2.500000e-01 2.495003e+03
## 12 0.11 0.39 0.39 0.22 3.182117e-01 2.488193e+03
## 13 0.12 0.38 0.38 0.24 3.988920e-01 2.480150e+03
## 14 0.13 0.37 0.37 0.26 4.937911e-01 2.470707e+03
## 15 0.14 0.36 0.36 0.28 6.049383e-01 2.459670e+03
## 16 0.15 0.35 0.35 0.30 7.346939e-01 2.446817e+03
## 17 0.16 0.34 0.34 0.32 8.858131e-01 2.431889e+03
## 18 0.17 0.33 0.33 0.34 1.061524e+00 2.414590e+03
## 19 0.18 0.32 0.32 0.36 1.265625e+00 2.394573e+03
## 20 0.19 0.31 0.31 0.38 1.502601e+00 2.371437e+03
## 21 0.20 0.30 0.30 0.40 1.777778e+00 2.344712e+03
## 22 0.21 0.29 0.29 0.42 2.097503e+00 2.313850e+03
## 23 0.22 0.28 0.28 0.44 2.469388e+00 2.278211e+03
## 24 0.23 0.27 0.27 0.46 2.902606e+00 2.237043e+03
## 25 0.24 0.26 0.26 0.48 3.408284e+00 2.189465e+03
## 26 0.25 0.25 0.25 0.50 4.000000e+00 2.134440e+03
## 27 0.26 0.24 0.24 0.52 4.694444e+00 2.070756e+03
## 28 0.27 0.23 0.23 0.54 5.512287e+00 1.996992e+03
## 29 0.28 0.22 0.22 0.56 6.479339e+00 1.911496e+03
## 30 0.29 0.21 0.21 0.58 7.628118e+00 1.812365e+03
## 31 0.30 0.20 0.20 0.60 9.000000e+00 1.697440e+03
## 32 0.31 0.19 0.19 0.62 1.064820e+01 1.564345e+03
## 33 0.32 0.18 0.18 0.64 1.264198e+01 1.410605e+03
## 34 0.33 0.17 0.17 0.66 1.507266e+01 1.233930e+03
## 35 0.34 0.16 0.16 0.68 1.806250e+01 1.032819e+03
## 36 0.35 0.15 0.15 0.70 2.177778e+01 8.078227e+02
## 37 0.36 0.14 0.14 0.72 2.644898e+01 5.641110e+02
## 38 0.37 0.13 0.13 0.74 3.240237e+01 3.167557e+02
## 39 0.38 0.12 0.12 0.76 4.011111e+01 1.017857e+02
## 40 0.39 0.11 0.11 0.78 5.028099e+01 6.559661e-03
## 41 0.40 0.10 0.10 0.80 6.400000e+01 1.904400e+02
## 42 0.41 0.09 0.09 0.82 8.301235e+01 1.076650e+03
## 43 0.42 0.08 0.08 0.84 1.102500e+02 3.606002e+03
## 44 0.43 0.07 0.07 0.86 1.509388e+02 1.014830e+04
## 45 0.44 0.06 0.06 0.88 2.151111e+02 2.719567e+04
## 46 0.45 0.05 0.05 0.90 3.240000e+02 7.496644e+04
## 47 0.46 0.04 0.04 0.92 5.290000e+02 2.292494e+05
## 48 0.47 0.03 0.03 0.94 9.817778e+02 8.678372e+05
## 49 0.48 0.02 0.02 0.96 2.304000e+03 5.079614e+06
## 50 0.49 0.01 0.01 0.98 9.604000e+03 9.127509e+07
## 51 0.50 0.00 0.00 1.00 Inf Inf
x_min <- x[which.min(diferencia)]
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
Problema 2:CO2
url <-"https://raw.githubusercontent.com/Jorge-pixel-sy/QM215/refs/heads/main/Datos.csv"
co2 <- read.csv(url, header = TRUE)
head(co2)
## T_K Cp S G_H_over_T H_HTr delta_f_H delta_f_G log_Kf
## 1 100.00 29.208 179.009 243.568 -6.456 -393.208 -393.683 205.639
## 2 200.00 32.359 199.975 217.046 -3.414 -393.404 -394.085 102.924
## 3 298.15 37.129 213.795 213.795 0.000 -393.522 -394.389 69.095
## 4 300.00 37.221 214.025 213.795 0.069 -393.523 -394.394 68.670
## 5 400.00 41.325 225.314 215.307 4.003 -393.583 -394.675 51.539
## 6 500.00 44.627 234.901 218.290 8.305 -393.666 -394.939 41.259
names(co2)
## [1] "T_K" "Cp" "S" "G_H_over_T" "H_HTr"
## [6] "delta_f_H" "delta_f_G" "log_Kf"
# Graficar Cp vs T
plot(co2$T_K, co2$Cp,
type = "p",
col = "green",
xlab = "Temperatura (K)",
ylab = "Cp (J/mol·K)",
main = "Cp en función de la Temperatura")
modelo_suavizado=loess(Cp ~ T_K, data = co2)
tendencia=predict(modelo_suavizado)
lines(co2$T_K, tendencia, col = "pink", lwd = 2)
Problema 3: Absorbancia y concentración
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)
df=data.frame(concentracion, absorbancia)
plot(df$concentracion, df$absorbancia,
main = "Absorbancia vs Concentracion",
xlab = "Concentracion (mol/L)",
ylab = "Absorbancia",
col = "blue", pch = 16)
modelo <- lm(absorbancia ~ concentracion)
abline(modelo, col = "black", lwd = 2)
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
absorbancia_dada <- 0.75
concentracion_estimada <- (absorbancia_dada - a) / b
cat("Concentracion para Absorbancia = 0.75:", round(concentracion_estimada, 4), "mol/L\n")
## Concentracion para Absorbancia = 0.75: 0.075 mol/L
absorbancia_dada <- 0.75
concentracion_estimada <- (absorbancia_dada - a) / b
cat("Concentracion para Absorbancia = 0.75:", round(concentracion_estimada, 4), "mol/L\n")
## Concentracion para Absorbancia = 0.75: 0.075 mol/L
Problema 4:
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 = "orange", pch = 16,
main = "Concentración vs Tiempo (con ruido)",
xlab = "Tiempo (min)", ylab = "[X] (mol/L)")
lines(tiempo, X_teorico, col = "black", lty = 2)
ln_X = log(X_ruido)
modelo = lm(ln_X ~ tiempo)
summary(modelo)
##
## Call:
## lm(formula = ln_X ~ tiempo)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.09206 -0.34923 -0.08658 0.52338 2.07954
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.98178 0.47979 -4.131 0.000569 ***
## tiempo -0.30420 0.04104 -7.412 5.11e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.139 on 19 degrees of freedom
## Multiple R-squared: 0.743, Adjusted R-squared: 0.7295
## F-statistic: 54.94 on 1 and 19 DF, p-value: 5.108e-07
k_estimado = -coef(modelo)[2]
Problema 5:Titulación ácido-base
url2 <-"https://raw.githubusercontent.com/Jorge-pixel-sy/QM215/refs/heads/main/pH.csv"
df = read.csv(url2)
names(df)[1] = "vol_NaOH_mL"
df_clean = df[is.finite(df$vol_NaOH_mL) & is.finite(df$pH), ]
plot(df_clean$vol_NaOH_mL, df_clean$pH, type = "b", col = "purple", pch = 16,
main = "Titulación de ácido acético con NaOH",
xlab = "Volumen de NaOH agregado (mL)", ylab = "pH")
delta_pH = diff(df$pH)
delta_vol = diff(df$vol_NaOH_mL)
pendiente = delta_pH / delta_vol
indice_max = which.max(pendiente)
punto_equivalencia = (df$vol_NaOH_mL[indice_max] + df$vol_NaOH_mL[indice_max + 1]) / 2
abline(v = punto_equivalencia, col = "green", lty = 2, lwd = 2)
text(punto_equivalencia, max(df$pH),
labels = paste0("Punto de equivalencia:\n", round(punto_equivalencia, 2), " mL"),
pos = 4, col = "green")