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)
最终,带有参数 s
和 t
的拟合函数看起来像:
+ 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 )
获取 s
和 t
的结果通过错误传播提供 a
、b
和 c
我想使用自定义模型来拟合一些数据。我使用的语法是 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)
最终,带有参数 s
和 t
的拟合函数看起来像:
+ 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 )
获取 s
和 t
的结果通过错误传播提供 a
、b
和 c