实验数据曲线的分段线性近似。结位置受限

计算科学 matlab 约束优化 回归 曲线拟合
2021-12-02 03:14:09

我需要用分段线性模型(4 节,因此 3 条线)拟合从实验数据中获得的曲线。

我尝试使用 MATLAB 函数

coeff = lsqnonlin(@fun,X0,[],[],[],x,y);

在哪里fun是一个定义为的函数:

[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

这样我应该找到系数A,B,C,D,E,F最小化模型和真实曲线之间的差异(由y)。X是系数向量。

我遇到的主要问题是结kn1kn2不能放在任何地方:通常 MATLAB 将结放置在彼此相同的距离处,但在我的情况下,我需要将结放置在实际曲线改变其斜率的确切点(当然斜率的变化确实不会突然发生,它是渐进的,因为它是一条曲线,但我需要近似它)。

为此,我考虑在拟合之前运行一些约束优化,以便在计算函数之前找到这两个点fun. 我可以用来执行此操作的 MATLAB 函数是

x_opt = fmincon ( fun2, x02, A2, b, Aeq, beq, lb, ub ) 

但我不知道如何表达与斜率变化相关的约束。

我还有其他办法吗?

0个回答
没有发现任何回复~