我正在尝试在 R 上实现 Marquardt 算法。我查看了 nls.lm 函数上的示例并尝试基于它编写一些东西。这是我的代码。(结果 1 是一列 262 个值,我需要进行最佳拟合指数平滑)
n=seq(1:262)
x=result1
#observed values
obs<-function(nn) x[nn+1]
#exponentially smoothed values
pred<-function(p, nn) ifelse(nn==1, obs(0), p*obs(nn-1)+(1-p)*Recall(p, nn-1))
#residuals
resFun<-function(p, nn) obs(n)-pred(p, nn)
nls.out<-nls.lm(par=0.33, resFun, nn=n, control = nls.lm.control(nprint=1)))
但它一直给我这个错误。
Error in x[n + 1] : only 0's may be mixed with negative subscripts
我意识到在某处的函数定义中一定是一个可笑的愚蠢错误,但请看看你是否能看到我做错了什么。当我在 excel 中解决这个问题时,我从 p=0.33 开始,求解器得到 top=0.55114,这基本上就是我试图让它做的,因为它从 0.33 开始找到最佳值 0.55114。
提前非常感谢,很抱歉占用您的时间。阿尔派