R nls(); nlsModel中的错误:初始参数估计时的奇异梯度矩阵

时间:2020-10-30 07:02:05

标签: r nls

我从R中的nls函数收到一个错误。我搜索了一些类似的问题,但没有解决此问题。例如,我尝试使用库'minpack.lm'中的nlsLM,它也会失败。所以我必须在这里寻求帮助。以下是代码:

tt = c(10, 30, 50, 90, 180, 360, 720, 1440, 2880, 4320, 8640, 12960)
x = c(
  1.53901e-06,
  1.22765e-06,
  1.11200e-06,
  9.25185e-07,
  8.71809e-07,
  8.80705e-07,
  8.36225e-07,
  7.82849e-07,
  8.18433e-07,
  6.04928e-07,
  3.46944e-07,
  4.44800e-07
)
y = c(
  3.81639e-06,
  5.00623e-06,
  4.62815e-06,
  5.10631e-06,
  4.48359e-06,
  3.30487e-06,
  2.64879e-06,
  2.13727e-06,
  8.02865e-07,
  1.91487e-06,
  3.73855e-06,
  2.32631e-06
)

nt = length(tt)
L0 = 0.005
y0 = 0.000267681

model = function(K, Kd, k1) {
  
  eta = 5 / (4 * Kd + 40)
  eta1 = 1 - eta
  eta1_seq = eta1 ^ c(0:(nt - 1))
  Lt = L0 * eta * cumsum(eta1_seq)
  
  b = K * x - K * Lt + 1
  L = (-b + sqrt(b ^ 2.0 + 4 * K * Lt)) / (2 * K)
  
  cx = x * K * L / (K * L + 1)
  qx = Kd * cx
  
  q1 = y0 * (1 - k1 * sqrt(tt))
  
  y = qx + q1
  
  return(y)
  
}

fit <- nls(
  y ~ model(K, Kd, k1),
  start = list(K = 1e+15,
               Kd = 10,
               k1 = 1e-5),
  lower = c(1e+13, 1, 1e-10),
  upper = c(1e+20, 200, 1e-3),
  algorithm = "port"
)

在此先感谢您的帮助!

0 个答案:

没有答案