在网上找了很久也不知道要怎样对分段函数进行非线性拟合,目前思路:将阈值作为一个函数参数,根据阈值划分数据,不同的数据部分建立不同的函数进行拟合。
例如对一个数据进行前段数据一次函数、后段数据幂函数的拟合
- 首先定义一个待定参数函数powerfunction,注意如何定义分段函数。
function func = powerfunction(param, X)
a = param(1); %一次函数X1系数
b = param(2); %常数项
r =param(3);
s =param(4);
th = param(5);
%前段线性
sub1=find(X<th);
X1=X(sub1);
func(sub1)=a.*X1+b;
%后段指数
sub2=find(X>=th);
X2=X(sub2);
func(sub2)=r.*X2.^(-s);
end
+然后 lsqcurvefit拟合即可
coef = lsqcurvefit(@powerfunction, [0.1,0.1,0.1,0.1,th], x, y);
其中, [0.1,0.1,0.1,0.1,th]是函数参数初始值,x,y是已知的样本点集,powerfunction即上述自定义函数名
网友评论