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