Julia 带边界约束的非线性最小二乘解算器

Julia 带边界约束的非线性最小二乘解算器,julia,least-squares,Julia,Least Squares,我正在寻找一个类似于Julia中Matlab的lsqnonlin函数的函数 看起来不错,但不接受Matlab实现的相同参数;具体而言: 下限 上界 初始条件 其中,初始条件、下限和上限是长度为6的向量 任何建议都会很棒。谢谢 也许这不是一个正确的答案,但我在过去取得了一些成功 将惩罚项添加到边界外的成本函数中,类似于具有阶梯行为的强指数。当然,缺点是手动定义成本函数。也许这不是一个正确的答案,但我在过去取得了一些成功 将惩罚项添加到边界外的成本函数中,类似于具有阶梯行为的强指数。当然,缺点是

我正在寻找一个类似于Julia中Matlab的
lsqnonlin
函数的函数

看起来不错,但不接受Matlab实现的相同参数;具体而言:

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


任何建议都会很棒。谢谢

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

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

事实上,它是这样的,只是自述文件中没有解释(为了更好地衡量,这里有一个稳定的链接)

不清楚你所说的初始条件是什么意思。如果你是指初始参数,这是非常可能的

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]
的内容。

事实上是这样的,只是自述文件中没有解释(为了更好地衡量,这里有一个稳定的链接)

不清楚你所说的初始条件是什么意思。如果你是指初始参数,这是非常可能的

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]
的内容