具有边界约束的非线性最小二乘的求解器

时间:2017-06-12 23:06:51

标签: julia least-squares

我正在寻找Julia中Matlab的lsqnonlin函数的模拟。

LsqFit.jl看起来很棒,但不接受Matlab实施的相同论点;具体是:

  • 下界
  • 上限
  • 初始条件

其中初始条件,下限和上限是长度为6的向量。

任何建议都很棒。谢谢!

2 个答案:

答案 0 :(得分:2)

实际上,确实如此,它只是在自述文件中没有解释(为了更好的衡量,这里是一个稳定的链接README.md)。

目前还不清楚你的初始条件是什么意思。如果你的意思是初始参数,这是非常有可能的。

using LsqFit

# a two-parameter exponential model
# x: array of independent variables
# p: array of model parameters
model(x, p) = p[1]*exp.(-x.*p[2])

# some example data
# xdata: independent variables
# ydata: dependent variable
xdata = linspace(0,10,20)
ydata = model(xdata, [1.0 2.0]) + 0.01*randn(length(xdata))
p0 = [0.5, 0.5]

fit = curve_fit(model, xdata, ydata, p0)

(取自手册)。这里p0是初始参数向量。

这会给你一些非常接近[1.0, 2.0]的东西。但是如果我们想要将参数约束在[0,1]x[0,1]中呢?然后我们只需将关键字参数lowerupper设置为下限和上限的向量

fit = curve_fit(model, xdata, ydata, p0; lower = zeros(2), upper = ones(2))

根据您的确切数据,应该提供类似[1.0, 1.0]的内容。

答案 1 :(得分:0)

也许这不是一个正确的答案,但过去我取得了一些成功 在边界之外的成本函数中添加惩罚项,类似于具有阶梯式行为的强指数。当然,缺点是手动定义成本函数。