我需要用分段线性模型(4 节,因此 3 条线)拟合从实验数据中获得的曲线。
我尝试使用 MATLAB 函数
coeff = lsqnonlin(@fun,X0,[],[],[],x,y);
在哪里是一个定义为的函数:
[f] = fun (X,x,y)
A = X(1);
.
.
.
F = X(6);
if x(i) <= kn1
f(i) = A+B*x(i)-y(i);
elseif x(i) > kn1 && x(i) <= kn2
f(i) = C+D*x(i)-y(i);
else
f(i) = E+F*x(i)-y(i);
end
这样我应该找到系数最小化模型和真实曲线之间的差异(由)。是系数向量。
我遇到的主要问题是结和不能放在任何地方:通常 MATLAB 将结放置在彼此相同的距离处,但在我的情况下,我需要将结放置在实际曲线改变其斜率的确切点(当然斜率的变化确实不会突然发生,它是渐进的,因为它是一条曲线,但我需要近似它)。
为此,我考虑在拟合之前运行一些约束优化,以便在计算函数之前找到这两个点. 我可以用来执行此操作的 MATLAB 函数是
x_opt = fmincon ( fun2, x02, A2, b, Aeq, beq, lb, ub )
但我不知道如何表达与斜率变化相关的约束。
我还有其他办法吗?