我一直在使用 Excel 求解器来处理以下问题
求解方程中的 ab 和 c:
y = a*b*c*x/((1 - c*x)(1 - c*x + b*c*x))
受约束
0 < a < 100
0 < b < 100
0 < c < 100
f(x[1]) < 10
f(x[2]) > 20
f(x[3]) < 40
我有大约 10 个 (x,y) 值对。我最小化 abs(y - f(x)) 的总和。而且我可以在每个 x 处约束我的函数结果的系数和值的范围。
我尝试了 nls(没有尝试施加约束),虽然 Excel 提供了我愿意提供的几乎所有起始值的估计值,但 nls 几乎从未返回答案。
我改用了 optim,但在应用约束时遇到了麻烦。
这是我到目前为止的地方-
best = function(p,x,y){sum(abs(y - p[1]*p[2]*p[3]*x/((1 - p[3]*x)*(1 - p[3]*x + p[2]*p[3]*x))))}
p = c(1,1,1)
x = c(.1,.5,.9)
y = c(5,26,35)
optim(p,best,x=x,y=y)
我这样做是为了添加第一组约束-
optim(p,best,x=x,y=y,method="L-BFGS-B",lower=c(0,0,0),upper=c(100,100,100))
我收到错误““错误:ABNORMAL_TERMINATION_IN_LNSRCH”
并最终得到更高的错误值($value)。所以好像我做错了什么。我根本不知道如何应用我的另一组约束。
有人能给我一个基本的想法,如何解决这个非统计学家可以理解的问题吗?我看了很多帖子,看了几本R书。R 书籍停在最简单的 optim 用法上。