金币
UID31819
帖子
主题
积分696
注册时间2012-5-30
最后登录1970-1-1
听众
性别保密
|

楼主 |
发表于 2024-10-20 11:05:33
|
显示全部楼层
# 创建温度向量
tempr <- c(37, 43, 54, 60)
# 创建 NA 值的向量,长度与 tempr 相同
k <- c(NA, NA, NA, NA)
# 创建数据框 datals,包含 tempr 和 k
datals <- data.frame(tempr, k)
# 重复 tempr 中的值,使得每个温度对应六个时间点
temp <- c(rep(tempr[1], 6), rep(tempr[2], 6), rep(tempr[3], 6), rep(tempr[4], 6))
# 创建时间向量 time,对应不同温度下的取样时间
time <- c(0, 2, 5, 10, 15, 20, # 37°C 下的时间点
0, 1, 2, 4, 8, 12, # 43°C 下的时间点
0, 0.5, 1, 2, 3, 4, # 54°C 下的时间点
0, 0.25, 0.5, 1, 1.5, 2)# 60°C 下的时间点
# 创建浓度向量 concen,对应不同温度下的浓度值
concen <- c(100, 96.03, 88.18, 80.574, 72.32, 64.92, # 37°C 下的浓度
100, 96.025, 92.256, 85.08, 71.433, 62.305, # 43°C 下的浓度
100, 94.035, 87.962, 79.31, 69.016, 61.392, # 54°C 下的浓度
100, 94.94, 89.067, 82.36, 73.308, 64.13) # 60°C 下的浓度
# 创建数据框 datax,包含温度、时间和浓度
datax <- data.frame(temp, time, concen)
# 循环处理每个温度下的数据
for (i in 1:4) {
# 选择当前温度下的数据
newdata <- datax[datax$temp == tempr[i], ]
# 使用 with 函数简化 newdata 的调用
with(newdata, {
# 指定浓度和时间作为变量
y <- concen
x <- time
# 使用非线性最小二乘法拟合数据
nlmod <- nls(y ~ A * exp(-B * x))
# 从拟合模型中提取系数 B
datals[i, 2] <<- coefficients(nlmod)["B"]
})
}
# 输出 datals 数据框
print(datals)
# 计算绝对温度的倒数
x <- 1 / (datals$tempr + 273.15)
# 计算 k 的自然对数
y <- log(datals$k)
# 创建新数据框 datalz
datalz <- data.frame(y, x)
# 使用线性模型拟合 y ~ x
lmod <- lm(y ~ x, data = datalz)
# 输出线性模型的摘要信息
summary(lmod)
# 输出线性模型的系数
print(coefficients(lmod))
# 提取线性模型的系数
u <- coefficients(lmod)
# 计算 25°C 下的 k 值
k25 <- exp(u[1] + u[2] / (25 + 273.15))
# 计算浓度降至 90% 所需的时间 t0.9
t0.9 <- -log(0.9) / k25
# 输出 t0.9 的值
print(t0.9)
# 输出 datax 数据框
print(datax) |
|