Matlab 分段函数非线性拟合

2019-10-09  本文已影响0人  吵吵人

在网上找了很久也不知道要怎样对分段函数进行非线性拟合,目前思路:将阈值作为一个函数参数,根据阈值划分数据,不同的数据部分建立不同的函数进行拟合。
例如对一个数据进行前段数据一次函数、后段数据幂函数的拟合

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即上述自定义函数名

上一篇 下一篇

猜你喜欢

热点阅读