3

几个小时以来,我一直在努力解决以下问题:我正在尝试获得一个适合我测量数据的函数。但是,我需要说明我选择特定功能的原因。在仔细阅读了一些关于方解石成核和生长的文献后,我们认为描述碳酸钙成核时间的函数必须具有以下形式:

时间(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

(不知道能不能打开)

4

0 回答 0