我有一个数据集(具有x和y值的数组),我最终想要拟合一个非线性模型。为了增加拟合良好和模型收敛的机会,我希望尽可能地提供接近解的初始参数。我想要拟合的模型的一个参数对应于曲线的拐点。在Matlab中,有什么方法可以估计离散数据集(而不是连续函数)的拐点吗?我不想事先曲线,因为这是为了加速曲线,并增加其成功的可能性。
发布于 2015-06-02 06:47:49
其想法是分两个步骤工作:
x
,y
)多边形线简化为一些“光滑”子集(xs
,ys
)。简化后,曲线特征的每一个变化都将被认为是重要的。xs
,ys
)凸度的变化。第二点是基于由直线的三个连续点构成的有符号区域:
| x0 y0 1 |
1 | |
A = - | x1 y1 1 |
2 | |
| x2 y2 1 |
折线是“凸的”--即正曲率--当这些区域是正的,而“凹”--即负曲率--当区域是负的。曲率的变化是拐点所在的位置。
从文件交换下载dpsimplify
函数之后,可以运行以下代码(假设x
和y
向量已经存在):
%// Part 1.
[ps,~] = dpsimplify([x(:),y(:)], 1e-3); %// adjust "tol" above noise level
xs = ps(:,1);
ys = ps(:,2);
%// Part 2
I = 1:numel(xs)-2;
sgnA = sign( ...
xs(I+0).*ys(I+1) ...
+ xs(I+1).*ys(I+2) ...
+ xs(I+2).*ys(I+0) ...
- xs(I+0).*ys(I+2) ...
- xs(I+1).*ys(I+0) ...
- xs(I+2).*ys(I+1) ...
);
k_inflex = find(2 == abs(diff(sgnA)));
x_inflex = xs(k_inflex);
y_inflex = ys(k_inflex);
https://stackoverflow.com/questions/30598420
复制相似问题