Rのnleqslvパッケージを使用して、非線形方程式系を解いています。 Rコードは以下の通りです。私の開始値に何が問題なのですか
require(nleqslv)
x <- c(6,12,18,24,30)
NMfun1 <- function(k,n) {
y <- rep(NA, length(k))
y[1] <- -(5/k[1])+sum(x^k[2]*exp(k[3]*x))+2*sum(k[4]*x^k[2]*exp(-k[1]*x^k[2]*exp(k[3]*x)+k[3]*x)/(1-k[4]*exp(-k[1]*x^k[2]*exp(k[3]*x))))
y[2] <- -sum(log(x))-sum(1/(k[2]+k[3]*x))+sum(k[1]*x^k[2]*exp(k[3]*x)*log(x))+2*sum(k[1]*k[4]*exp(-k[1]*x^k[2]*exp(k[3]*x)+k[3]*x)*log(x)/(1-k[4]*exp(-k[1]*x^k[2]*exp(k[3]*x))))
y[3] <- -sum(x/(k[2]+k[3]*x))+sum(k[1]*x^(k[2]+1)*exp(k[3]*x))-sum(x)+2*sum(k[4]*x^k[2]*exp(-k[1]*x^k[2]*exp(k[3]*x)+k[3]*x)/(1-k[4]*exp(-k[1]*x^k[2]*exp(k[3]*x))))
y[4] <- -(5/(1-k[4]))+2*sum(exp(-k[1]*x^k[2]*exp(k[3]*x))/(1-k[4]*exp(-k[1]*x^k[2]*exp(k[3]*x))))
return(y)
}
kstart <- c(0.05, 0, 0.35, 0.9)
NMfun1(kstart)
nleqslv(kstart, NMfun1, control=list(btol=.0001),method="Newton")
得られたkの推定値は以下のとおりです。 0.04223362 -0.08360564 0.14216026 0.37854908
しかし、kの推定値は、0より大きい である必要があります。
正の整数を見積もる場合は、問題はメソッドであり、開始値ではありません。 (つまり、正の整数を見積もりたいのであれば、なぜ非整数値で始めるのですか?) – Gregor
おそらく 'nloptr'パッケージを試してみてください。これは非線形プログラミングの問題です。 – Gregor
パッケージ 'nleqslv'には、整数値の解決を強制するオプションがありません。方程式系を解く真の価値のある解を見つけようとします。どのように整数値の解決策があることを知っていますか?解決策があれば、あなたの問題を解決する方法を別の場所で探す必要があります。 – Bhas