#Problema 1

concentraciones <- function(x) {
  H2 <- 0.5 - x
  I2 <- 0.5 - x
  HI <- 2 * x
  return(list(H2 = H2, I2 = I2, HI = HI))
}
Kc <- 50.2
f_equilibrio <- function(x) {
  HI <- 2 * x
  H2 <- 0.5 - x
  I2 <- 0.5 - x
  Q <- (HI^2) / (H2 * I2)
  return(Q - Kc)
}
concentraciones <- function(x) {
  H2 <- 0.5 - x
  I2 <- 0.5 - x
  HI <- 2 * x
  return(list(H2 = H2, I2 = I2, HI = HI))
}

Kc <- 50.2
f_equilibrio <- function(x) {
  HI <- 2 * x
  H2 <- 0.5 - x
  I2 <- 0.5 - x
  Q <- (HI^2) / (H2 * I2)
  return(Q - Kc)
}

sol <- uniroot(f_equilibrio, c(0, 0.5))
x_equilibrio <- sol$root
conc_finales <- concentraciones(x_equilibrio)
print(conc_finales)
## $H2
## [1] 0.110071
## 
## $I2
## [1] 0.110071
## 
## $HI
## [1] 0.779858

#Problema 2

url <- "https://raw.githubusercontent.com/Jimena-Serrano24/QM215/refs/heads/main/JanafCO2.csv"
datos <- read.csv(url)
head(datos)
##            T...........Cp.....S....ds...dH..delta_f.....G.
## 1 100;    29.208;179.009;243.568;-6.456;-393.208;-393.683;
## 2 200;    32.359;199.975;217.046;-3.414;-393.404;-394.085;
## 3 298.15;37.129;213.795;213.795; 0.;    -393.522;-394.389;
## 4 300;    37.221;214.025;213.795; 0.069;-393.523;-394.394;
## 5 400;    41.325;225.314;215.307; 4.003;-393.583;-394.675;
## 6 500;    44.627;234.901;218.290; 8.305;-393.666;-394.939;
T <- c(100, 200, 298.15, 300, 400, 500, 600, 700, 800, 900, 1000,
       1100, 1200, 1300, 1400, 1500)

Cp <- c(29.208, 32.359, 37.129, 37.221, 41.325, 44.627, 47.321, 49.564,
        51.434, 52.999, 54.308, 55.409, 56.342, 57.137, 57.802, 58.379)

datos <- data.frame(T, Cp)

plot(datos$T, datos$Cp, type = "o", col = "blue",
     xlab = "Temperatura ",
     ylab = "Cp ",
     main = "Cp vS T")

lines(smooth.spline(datos$T, datos$Cp), col = "red", lwd = 2)

#Problema 3

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)

modelo <- lm(absorbancia ~ concentracion)
summary(modelo)
## 
## Call:
## lm(formula = absorbancia ~ concentracion)
## 
## Residuals:
##         1         2         3         4         5         6 
##  0.015714 -0.008571 -0.012857 -0.007143  0.008571  0.004286 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -0.015714   0.009073  -1.732    0.158    
## concentracion 10.214286   0.149830  68.173 2.77e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.01254 on 4 degrees of freedom
## Multiple R-squared:  0.9991, Adjusted R-squared:  0.9989 
## F-statistic:  4647 on 1 and 4 DF,  p-value: 2.774e-07
plot(concentracion, absorbancia, pch = 16, 
     xlab = "Concentración (mol/L)", ylab = "Absorbancia")
abline(modelo, col = "red")

nueva_abs <- data.frame(concentracion = 0.75)
concentracion_estimada <- (0.75 - coef(modelo)[1]) / coef(modelo)[2]
cat("Concentración estimada:", concentracion_estimada, "mol/L\n")
## Concentración estimada: 0.07496503 mol/L

#Problema 4

set.seed(123)  
tiempo <- seq(0, 20, by = 1)
X0 <- 0.100
k_teorico <- 0.25

X_teorico <- X0 * exp(-k_teorico * tiempo)

ruido <- rnorm(length(tiempo), mean = 0, sd = 0.0025)
X_simulado <- X_teorico + ruido

lnX <- log(X_simulado)
## Warning in log(X_simulado): Se han producido NaNs
modelo_cinetica <- lm(lnX ~ tiempo)
k_estimado <- -coef(modelo_cinetica)[2]

plot(tiempo, X_simulado, pch = 16, 
     xlab = "Tiempo (min)", ylab = "[X] (mol/L)")
lines(tiempo, X_teorico, col = "red")

cat("k teórico:", k_teorico, "\nk estimado:", k_estimado, "\n")
## k teórico: 0.25 
## k estimado: 0.2152729

#Problema 5

url <- "https://raw.githubusercontent.com/Jimena-Serrano24/QM215/refs/heads/main/titulacion_acetico.csv"
datos <- read.csv(url)
head(datos)
##    vol_NaOH_mL.pH
## 1 0.00       2.88
## 2 1.00       3.14
## 3 2.00       3.41
## 4 3.00       3.65
## 5 4.00       3.89
## 6 5.00       4.22
mL_NaOH <- c(0.00, 1.00, 2.00, 3.00, 4.00, 5.00)
pH <- c(2.88, 3.14, 3.41, 3.65, 3.89, 4.22)

datos <- data.frame(mL_NaOH, pH)

head(datos)
##   mL_NaOH   pH
## 1       0 2.88
## 2       1 3.14
## 3       2 3.41
## 4       3 3.65
## 5       4 3.89
## 6       5 4.22
delta_pH <- diff(pH) / diff(mL_NaOH)

vol_equiv <- mL_NaOH[which.max(delta_pH)]
cat("Punto de equivalencia estimado en:", vol_equiv, "mL\n")
## Punto de equivalencia estimado en: 4 mL
plot(mL_NaOH, pH, type = "l", col = "blue", lwd = 2,
     xlab = "Volumen de NaOH agregado (mL)",
     ylab = "pH",
     main = "Curva de titulación con punto de equivalencia")
abline(v = vol_equiv, col = "red", lty = 2)
points(mL_NaOH, pH, pch = 16, col = "blue")
legend("bottomright", legend = c("Curva de titulación", "Punto de equivalencia"),
       col = c("blue", "red"), lty = c(1,2))