MATLAB中怎样找出一维向量的急剧变化点? 比如a=[1,2,3,2.5,4,1
最佳回答
最新回答共有2条回答
-
2026-04-09 02:47:33要减肥的大碗
回复=abs(diff(a));[c,d]=max(b);disp(d(1)+1)disp(c(1)) 再问: 实际上,我这里的向量a不止有一个拐点,给一个更具体的例子吧: a=[1 2 2。5 3。2 5 5。1 5 5。2 5 5。3 5。2 7 11 16 17],这里的a在数值5附近基本保持不变,现在需要找出这个水平段的拐点,有什么比较简单的办法吗? 再答: clearclca=[1 2 2。5 3。2 5 5。1 5 5。2 5 5。3 5。2 7 11 16 17];n=length(a);Ia=1:n;pa=spline(Ia,a);m=2;% 分成三段Iam0=linspace(1,n,m+2);Iam0=Iam0(2:end-1);% fmincon 用的约束条件,但是这个函数有警告% A=diag(ones(1,m),-1)+diag(-ones(1,m+1));A(:,end)=[];% b=[-1;zeros(m-1,1);n];Iam=fminsearch(@(x)sum(abs(interp1([1,x,n],ppval(pa,[1,x,n]),Ia,'linear')-a)),Iam0);%,A,bIam=[1,round(Iam),n];plot(Ia,a,'*')hold onplot(Iam,a(Iam),'-r')再问: 谢谢啦。我只是想找到离散曲线的两个拐弯点即可,并不需要曲线拟合,你是人为地将a分成了3段了吧?再问: 谢谢你这么细致地为我指点。我实际上只需要确定出a代表曲线的水平段的起始位置即可。 再答: 对呀,变量Iam(1 x m, m=2)就是两个拐点的下标,以Iam为变量,拐点分开的三段(m+1)直线与曲线的绝对误差和为目标,找到最佳变量,即拐点。根据拐点的多少m也可以取其它整数值。再问: 谢谢啦,会给你好评啊。我想进一步知道,如果a中有2个甚至更多个水平折线,你这种找水平段的方法还适用不?要是管用的话,这真是一个绝佳办法!再问: 刚补充的这个问题的关键点是,预先不知道到底有几个水平折线(2个,3个,4个都有可能),只需找到长度最长的那个水平折线即可! 再答: 适合多个的情况,但个数只能人工控制,而且越多,计算复杂度也越高一些。如果只需“找到长度最长的那个水平折线”,这不是最佳方式,试试下面的方法:clearclca=[1 2 2。5 3。2 5 5。1 5 5。2 5 5。3 5。2 7 11 16 17 17+[5。1 5 5。2 5 5。3]];n=length(a);tol=0。5;% tol 为寻找水平点时,容许的数据误差da=[abs(diff(a))<tol,0];% |差分|j1=0;j2=0;s1=0;s2=0;for i=1:n if da(i)==0 if s2<s1 s2=s1;%s2 最长水平段的数据个数-1 j2=j1;%j2 最长水平段的起始下标 end s1=0;j1=0; else if j1==0 j1=i;%j1 水平段的起始下标 end s1=s1+1;%s1 水平段的数据个数-1 endendplot(a,'b*')hold onplot(j2:(j2+s2),a(j2:(j2+s2)),'-r') 再问: 谢谢啦!
热门文章
- 康达学院专转本五年制
- 高考一个考场分ab卷吗
- not only but also用法
- 某物体做自由落体运动,从释放开始计时,则物体在前2s内的平均速度为______m/s,物体下落2m时的速度大小为______m/s.
- 三角函数公式大全表格
- 地理中考必背知识点2022
- 2013-2014学年小学六年级科学上学期期末考试试卷及答案
- 人教版2014-2015学年小学五年级英语第二学期期中教学质量检测试卷及答案
- 【Linux驱动开发】设备树详解(二)设备树语法详解
- 别跟客户扯细节
- 在别的城市买房子能落户吗
- 卖房前要把装修贷还完吗
- 高中政治教学提高教学效果的方法探究
- “互联网+”背景下的初中英语课堂教学改革与创新策略研究
- 2022年终止合同范本
- 租房合同范本范文
- 如何挑选土豆
- 如何挑选土鸡
