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

Solver for non-linear least squares with boundary constraints

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

LsqFit.jl 看起来不错,但不接受与 Matlab 实现相同的参数;具体来说:

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

任何建议都很棒。谢谢!

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

实际上,它确实如此,只是在自述文件中没有解释(为了更好的衡量,这里有一个稳定的 link 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] 的结果。