首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Matlab中求离散数据集的拐点

在Matlab中求离散数据集的拐点
EN

Stack Overflow用户
提问于 2015-06-02 06:07:02
回答 1查看 3.2K关注 0票数 0

我有一个数据集(具有x和y值的数组),我最终想要拟合一个非线性模型。为了增加拟合良好和模型收敛的机会,我希望尽可能地提供接近解的初始参数。我想要拟合的模型的一个参数对应于曲线的拐点。在Matlab中,有什么方法可以估计离散数据集(而不是连续函数)的拐点吗?我不想事先曲线,因为这是为了加速曲线,并增加其成功的可能性。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-02 06:47:49

其想法是分两个步骤工作:

  1. 首先定义什么是噪声水平,并将(xy)多边形线简化为一些“光滑”子集(xsys)。简化后,曲线特征的每一个变化都将被认为是重要的。
  2. 寻找多边形线(xsys)凸度的变化。

对于第一点,您可以使用道格拉斯-派克算法,实现这里

第二点是基于由直线的三个连续点构成的有符号区域:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
      | x0   y0   1 |
    1 |             |
A = - | x1   y1   1 |
    2 |             |
      | x2   y2   1 |

折线是“凸的”--即正曲率--当这些区域是正的,而“凹”--即负曲率--当区域是负的。曲率的变化是拐点所在的位置。

从文件交换下载dpsimplify函数之后,可以运行以下代码(假设xy向量已经存在):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%// 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);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30598420

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文