Я пытаюсь сделать nls
подходящим для немного сложного выражения, которое включает в себя два интеграла с двумя параметрами соответствия в их верхних пределах.nls уникальная градиентная матрица - параметры посадки в верхних пределах интеграла
я получил ошибку
"Ошибка в nlsModel (формула, М.Ф., начало, 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)
Я не могу понять, что произойдет. Мне нужно выполнить эту подгонку для трех интегральных компонентов, но даже для двух я имею эту проблему. Я очень ценю вашу помощь. Спасибо.