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



我想使用自定义模型来拟合一些数据。我使用的语法是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 = 0b必须明确小于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的 fit 函数如下所示:

+ 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

最新更新