#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/Ruben2104/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                                                         
## 4 298.15;37.129;213.795;213.795; 0.;    -393.522;-394.389;
## 5                                                         
## 6 300;    37.221;214.025;213.795; 0.069;-393.523;-394.394;
# grafica Cp vs Temperatura
datos <- data.frame(
  T = c(100,200,298,300,400,500,600,700,800,900,1000),
  Cp = c(29.208,32.359,37.129,37.221,41.325,44.627,47.321,49.564,51.434,52.999,54.308)
)
plot(datos$T, datos$Cp,
     xlab = "T",
     ylab = "Cp",
     main = "Cp VS T",
     pch = 16,
     col = "blue")
modelo <- lm(Cp ~ T, data = datos)
abline(modelo, col ="red", lwd = 2)

summary(modelo)
## 
## Call:
## lm(formula = Cp ~ T, data = datos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.5075 -1.3791  0.2504  1.3864  1.9864 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 28.465700   1.086884   26.19 8.33e-10 ***
## T            0.028350   0.001816   15.61 7.98e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.707 on 9 degrees of freedom
## Multiple R-squared:  0.9644, Adjusted R-squared:  0.9604 
## F-statistic: 243.6 on 1 and 9 DF,  p-value: 7.984e-08

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

prblema 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/Ruben2104/QM215/refs/heads/main/titulacion_acetico.csv"
datos <- read.csv(url)
head(datos)
##    mLNaOH...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 = "green", 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 = "yellow")
legend("bottomright", legend = c("Curva de titulación", "Punto de equivalencia"),
       col = c("green", "red"), lty = c(1,2))