我正在尝试为一个包含两个积分和两个拟合参数在其上限中的稍微复杂的表达式制作适合的
我得到了错误信息:
“nlsModel(formula,mf,start,wts)中的奇异梯度矩阵在初始参数估计值处”。
我已经搜索了之前的答案,但没有帮助。参数初始化似乎没问题,我已经尝试过更改参数,但都不起作用。如果我的函数只有一个积分,一切都很好,但添加第二个积分项后就出现了错误。我不认为函数过于参数化,因为我已经使用更多参数执行了其他拟合,并且它们有效。下面是一些数据的列表。
最小示例如下:
nls
。我得到了错误信息:
“nlsModel(formula,mf,start,wts)中的奇异梯度矩阵在初始参数估计值处”。
我已经搜索了之前的答案,但没有帮助。参数初始化似乎没问题,我已经尝试过更改参数,但都不起作用。如果我的函数只有一个积分,一切都很好,但添加第二个积分项后就出现了错误。我不认为函数过于参数化,因为我已经使用更多参数执行了其他拟合,并且它们有效。下面是一些数据的列表。
最小示例如下:
integrand <- function(X) {
return(X^4/(2*sinh(X/2))^2)
}
fitting = function(T1, T2, N, D, x){
int1 = integrate(integrand, lower=0, upper = T1)$value
int2 = integrate(integrand, lower=0, upper = T2)$value
return(N*(D/x)^2*(exp(D/x)/(1+exp(D/x))^2
)+(448.956*(x/T1)^3*int1)+(299.304*(x/T2)^3*int2))
}
fit = nls(y ~ fitting(T1, T2, N, D, x),
start=list(T1=400,T2=200,N=0.01,D=2))
------> 供参考,有效的适配方案如下:
integrand <- function(X) {
return(X^4/(2*sinh(X/2))^2)
}
fitting = function(T1, N, D, x){
int = integrate(integrand, lower=0, upper = T1)$value
return(N*(D/x)^2*(exp(D/x)/(1+exp(D/x))^2 )+(748.26)*(x/T1)^3*int)
}
fit = nls(y ~ fitting(T1 , N, D, x), start=list(T1=400,N=0.01,D=2))
------->用于说明问题的数据:
dat<- read.table(text="x y
0.38813 0.0198
0.79465 0.02206
1.40744 0.01676
1.81532 0.01538
2.23105 0.01513
2.64864 0.01547
3.05933 0.01706
3.47302 0.01852
3.88791 0.02074
4.26301 0.0256
4.67607 0.03028
5.08172 0.03507
5.48327 0.04283
5.88947 0.05017
6.2988 0.05953
6.7022 0.07185
7.10933 0.08598
7.51924 0.0998
7.92674 0.12022
8.3354 0.1423
8.7384 0.16382
9.14656 0.19114
9.55062 0.22218
9.95591 0.25542", header=TRUE)
我无法弄清楚发生了什么。我需要对三个整体组件进行适配,但是即使是对于两个组件,我也遇到了这个问题。非常感谢您的帮助。谢谢。