我在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的估計值應爲大於零的 。
如果你想估計正整數,你的問題是你的方法,而不是你的初始值。 (也就是說,如果你想估計正整數,爲什麼你從非整數值開始?) – Gregor
也許試試'nloptr'包,它是用於非線性編程的問題。 – Gregor
軟件包'nleqslv'沒有強制整數值解決方案的選項。它試圖找到解決方程系統的真正有價值的解決方案。你怎麼知道有一個整數值解決方案?如果有解決方案,您必須尋求解決問題的方法! – Bhas