具有边界约束的非线性最小二乘求解器
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]
中呢?然后我们简单地将关键字参数 lower
和 upper
设置为下限和上限向量
fit = curve_fit(model, xdata, ydata, p0; lower = zeros(2), upper = ones(2))
根据您的确切数据,应该会给出类似 [1.0, 1.0]
的结果。
我正在寻找 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]
中呢?然后我们简单地将关键字参数 lower
和 upper
设置为下限和上限向量
fit = curve_fit(model, xdata, ydata, p0; lower = zeros(2), upper = ones(2))
根据您的确切数据,应该会给出类似 [1.0, 1.0]
的结果。