在Matlab中求离散数据集的拐点
我有一个数据集(一个具有x和y值的数组),我最终希望将其拟合为一个非线性模型。为了增加拟合良好和模型收敛的机会,我希望提供尽可能接近解的初始参数。我要拟合的模型参数之一对应于曲线的拐点。有没有一种方法可以在Matlab中估计离散数据集(不是连续函数)的拐点?我不想事先进行curvefit,因为这是为了加速curvefit并增加其成功的概率。这个想法分两步进行:在Matlab中求离散数据集的拐点,matlab,dataset,inflection,Matlab,Dataset,Inflection,我有一个数据集(一个具有x和y值的数组),我最终希望将其拟合为一个非线性模型。为了增加拟合良好和模型收敛的机会,我希望提供尽可能接近解的初始参数。我要拟合的模型参数之一对应于曲线的拐点。有没有一种方法可以在Matlab中估计离散数据集(不是连续函数)的拐点?我不想事先进行curvefit,因为这是为了加速curvefit并增加其成功的概率。这个想法分两步进行: 首先定义噪声级,并将(x,y)多边形线“简化”为一些“平滑”子集(xs,ys)。简化后,曲线特征的每一个变化都将被认为是显著的 查找多边
x
,y
)多边形线“简化”为一些“平滑”子集(xs
,ys
)。简化后,曲线特征的每一个变化都将被认为是显著的xs
,ys
) | x0 y0 1 |
1 | |
A = - | x1 y1 1 |
2 | |
| x2 y2 1 |
当这些区域为正时,多段线为“凸”(即正曲率),当这些区域为负时,多段线为“凹”(即负曲率)。曲率的变化是拐点所在的位置
从文件交换下载dpsimplify
函数后,可以运行以下代码(假设x
和y
向量已经存在):
你的数据集是干净的,还是有噪音?我不会说它是完全干净的,因为它是实验性的。然而,它是根据许多中等噪声数据集的平均值计算出来的,所以你可以说噪声没有那么糟糕。谢谢!我去试试看。@CST链接-漂亮的帖子+1.@CST Link我应该在今天晚些时候或明天有实验数据来测试它。我会通知你的。@rayryeng谢谢你[脸红]。:-)@CST链接-工作正常:)非常感谢!
%// 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);