0

nlsLM我想使用包中的函数执行非线性最小二乘估计minpack.lm

我想对估计施加上限和下限,以强制算法在特定支持下找到解决方案。

这些方面的东西:

library(minpack.lm)
mydata <- data.frame(x=c(0,5,9,13,17,20),y = c(0,11,20,29,38,45))
myfit <- nlsLM(formula(y ~ a*x), data = mydata, start=list(a = 2.5), lower = c(a = 0), upper = c(a = 5))
summary(myfit)

我的问题是:

是否可以对 应用惩罚函数nlsLM,以避免算法返回角点解决方案?例如,在我的示例中,a 不等于 0 或 5。

警告:我只关注 package 的解决方案minpack.lm

4

1 回答 1

2

要实现这个从右边接近 0 或从左边接近 5 时接近无穷大的障碍函数:a

log(a)^2 + log(5-a)^2 

作为惩罚,我们形成目标函数

(y[1] - a*x[1])^2 + ... + (y[n] - a*x[n])^2 + (0 - log(a))^2 + (0 - log(5-a))^2

像这样

n <- nrow(mydata)
mydata0 <- rbind(mydata, 0 * mydata[1:2, ])
nlsLM(y ~ c(a * x[1:n], log(a), log(5 - a)), mydata0, start = list(a = 1))
于 2020-12-11T03:07:02.917 回答