как поставить ограничение при решении нелинейных уравнений с помощью пакета "nleqslv" в R - PullRequest
0 голосов
/ 10 октября 2018

Мне нужно решить следующее нелинейное уравнение, чтобы получить значение (sd.1.est).(k) и (R.bar) - известные значения, рассчитанные на предыдущем этапе.это мой код:

library(nleqslv) 
k=0.7642437
R.bar=0.4419803
sd=1.109488
fun <- function(sd.1.est){
(-(k^2)/(2*(sd.1.est^2)))+log((k/sd.1.est)+
(((k/sd.1.est)^3)*factorial(3)/((factorial(1))^2*(factorial(2))*(2^3)))+
(((k/sd.1.est)^5)*factorial(5)/((factorial(2))^2*(factorial(3))*(2^6)))+
(((k/sd.1.est)^7)*factorial(7)/((factorial(3))^2*(factorial(4))*(2^9))))-log(4*R.bar/sqrt(2*pi))}
ss1=nleqslv(sd,fun,method="Broyden",global="qline",control=list(cndtol=10^-12,maxit=1000,allowSingular =TRUE)) 

Мне нужно наложить ограничение на sd.1.est, чтобы оно было положительным (так как это оценка для параметра масштаба).Я не знаю, как это написать.

1 Ответ

0 голосов
/ 10 октября 2018

Мы не можем запустить ваш код, так как вы не предоставили никаких данных.Другими словами, ваш код не воспроизводится.

Существует способ получить себе положительное значение для sd.1.est путем изменения переменной.Напишите заголовок вашей функции следующим образом:

fun <- function(z) {
    sd.1.est <- z*z
    ........
}

Здесь z - промежуточная переменная.Возведя в квадрат z и присвоив результат sd.1.est, вы всегда получите положительное значение для sd.1.est.

При вызове nleqslv начальное значение для z должно быть установлено наsqrt вашего начального значения sd.

Предупреждение: это может не сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...