我有一个数据集(一个带有x和y值的数组),我最终想要拟合一个非线性模型。为了增加拟合良好的可能性以及模型将收敛,我希望提供尽可能接近解决方案的初始参数。我想要拟合的模型的一个参数对应于曲线的拐点。有没有办法可以在Matlab中估计离散数据集(不是连续函数)的拐点?我不希望事先进行曲线拟合,因为这是为了加速曲线拟合并增加其成功的可能性。
答案 0 :(得分:2)
这个想法是分两步完成的:
首先定义什么是噪音水平,并将(x
,y
)折线“简化”为某些“平滑”子集(xs
,{{1 }})。在简化之后,曲线特征的每个变化都将被认为是重要的。
查找折线(ys
,xs
)的凸度变化。
首先,您可以使用Douglas-Peucker算法,实施here。
第二点基于由折线的3个连续点构成的有符号区域:
ys
折线是“凸” - 即正曲率 - 这些区域是正的,而“凹” - 即负曲率 - 当区域为负时。曲率的变化是拐点所在的位置。
从文件交换中下载 | x0 y0 1 |
1 | |
A = - | x1 y1 1 |
2 | |
| x2 y2 1 |
功能后,您可以运行以下代码(假设dpsimplify
和x
向量已存在):
y