matlab曲线拟合增加归一化系数约束

Add the constraint of normalization coefficient for matlab curve fitting

我想使用自定义模型来拟合一些数据。我使用的语法是 fit()。我使用的数学模型具有以下形式:

a*exp(-x*b)+c*exp(-y*d)+e*exp(-z*f)

其中 a,b,c,d,e,f 是我要估计的参数,x,y,z 是自变量。 (实际的数学公式比较复杂,但是像这样非线性的。)

如何在拟合曲线时加入a+c+e=1的约束条件(且a,c,e必须为正数或0)?我知道如何设置下限和上限,但不知道如何将此归一化系数约束添加到拟合中。使用 fit() 方法时是否可以这样做?

我想我已经在某个地方发布了这个,但现在找不到。

由于是非线性拟合,参数变换没什么大不了的。假设我们选择了连续可微且单调的函数:

a = f(s) = 1/2 ( 1 + s / sqrt( 1 + s^2 ) )

因此 (-inf, inf) 中的 s(0,1) 中得到 a。实际上,通过一些简单的移位和缩放,我们可以在 ( u, v ).

中得到任何 a

现在我们可以对 b 做同样的事情,但是有了额外的限制 a + b + c = 1 我们知道至多 c = 0 b 肯定小于 1 - f(s) = 1/2 ( 1 - s / sqrt( 1 + s^2 ) )。因此,现在是缩放的时候了,我们可以设置:

b = g(t, s) = 1/2 ( 1 - s / sqrt( 1 + s^2 ) ) 1/2 ( 1 + t / sqrt( 1 + t^2 ) )

再次 t (-inf, inf)。第一部分是缩放,因为已经设置了 a 的值,第二部分重复上面的过程。

最后,c就是1- f(s) - g(t, s)

最终,带有参数 st 的拟合函数看起来像:

+ 0.50 * ( 1 + s / sqrt( 1 + s^2 ) ) * exp( -x * b )
+ 0.25 * ( 1 - s / sqrt( 1 + s^2 ) ) * ( 1 + t / sqrt( 1 + t^2 ) ) * exp( -y * d )
+ (
    +1.00 
    -0.50 * ( 1 + s / sqrt( 1 + s^2 ) 
    -0.25 * ( 1 - s / sqrt( 1 + s^2 ) ) * ( 1 + t / sqrt( 1 + t^2 ) )
) * exp( -z * f )

获取 st 的结果通过错误传播提供 abc