几个小时以来,我一直在努力解决以下问题:我正在尝试获得一个适合我测量数据的函数。但是,我需要说明我选择特定功能的原因。在仔细阅读了一些关于方解石成核和生长的文献后,我们认为描述碳酸钙成核时间的函数必须具有以下形式:
时间(s) = (I^a) (pH^b) ((化学计量(r_aq))^c)*((omega-1)^d)
其中,I - 离子强度,omega = 饱和度,a、b、c、d 是几个参数。(例如d是晶体生长的类型)。
首先,我想通过假设恒定的 pH 值、饱和度和离子强度来检查 c 参数值(我有这方面的实验数据)。最终,我试图通过 nls 函数获取所有参数值,因此有人可以在几种地球化学条件下判断成核时间的范围。
但是,我对这个目标有两个问题:
1)该功能似乎无法正常工作。它给了我关于 递归默认参数引用/早期问题和参数丢失的错误,我无法修复(我认为它很容易修复)
2) nls 函数本身在初始参数估计时给我一个关于奇异梯度矩阵的错误。
我试图用谷歌搜索我的错误,但不幸的是我无法自己修复它们。有关功能部分的代码如下
# function
I <- 0.20
pH <- 11
r_aq70_fit <- seq(0.01, 100, 0.01)
t70_fit <- seq(1, 10000, 1)
omega <- 70
a <- 1
b <- 1
d <-1
funct70 <- function(I=I, pH, r_aq70_fit, omega=omega, a, b, c, d) {
(I^a)*(pH^b)*((r_aq70_fit)^c)*((omega-1)^d)
}
fit70 <- nls(t70_fit ~ funct70(I, pH, r_aq70_fit, omega, a, b, c, d),
data = data.frame(r_aq70_fit, t70_fit),
start = list(a=a, b=b, c=0.5, d=d))
从我的测量中绘制的数据:测量1
(不知道能不能打开)