如何求已知曲线(方程未知)的拐点(即求一阶、二阶导数)?
mathcad吧
全部回复
仅看楼主
level 6
pingshamo1 楼主
求曲线拐点的方法是我在文献中看到的,具体分两步。
1. 对曲线进行平滑处理:根据一组反射光谱数据绘制曲线,用ksmooth 方法进行平滑处理;
2. 对上一步得到的曲线求导(一阶、二阶导数):文献提示用的是MathCAD中的 differentiation functions (我觉得可能是指微分方程)。
结果会求出类似下图箭头所指的拐点。
实际操作中我能够完成第一步,第二步却搞不出来,还望懂的朋友赐教,谢谢!
我用的是MathCAD15,数据链接:百度网盘
我的处理过程和结果如下图所示:
2015年12月26日 12点12分 1
level 12
你的蓝色箭头所指的地方没有什么拐点呀?
2015年12月27日 05点12分 2
我觉得这三个蓝色箭头都是拐点,他事实已经求出来了
2015年12月27日 10点12分
@loupoo2 那个图是文献中的,我还做不出来
2015年12月27日 14点12分
@pingshamo1 拐点定义为二阶导数为零,对应的一阶导数是局部峰值(最大或最小值)。
2015年12月27日 14点12分
level 11
又快忘记拐点的含义了。
拐点是函数曲线凹凸性改变的点吗?该点的二阶导为0,一阶导具有什么特征来着?
你提到对ksmooth的结果求导,可ksmooth的函数式是否是未知的?怎么求导呢?
2015年12月27日 11点12分 3
对的,我也搞不清楚这一点。
2015年12月27日 14点12分
level 11
拐点就是曲线凹凸性发生改变的点,二阶导数为零。二次一下的函数没有拐点。也就是说一阶导数必须为一次以上函数。不过ksmooth不知道怎么用的
2015年12月27日 11点12分 4
level 12
@angelycs ,数值计算无所谓显式,只要是一串x,y一一对应,且步长均匀的两列矩阵,都可以求导的。我用MC的时候尽量避免显式解,主要是显式解除了热闹且好看之外没什么用处。
2015年12月27日 11点12分 5
嗯,离散数据求导吗?我想想,是不是用Δy/Δx的值来近似代表其一阶导的值?
2015年12月27日 11点12分
请问关于显示解可以在哪里学习一下,或许我用得上。 P.S. 我是新手,简单学了一下软件自带的教程,没看到关于显示解的内容。
2015年12月27日 14点12分
level 15
我认为,既然原始数据本来就是一组散点的集合,并且不能分解成常见的基本函数,那么,就没有必要将它拟合成一个回归函数表达式然后求导,直接考察这些点坐标的情况就可以了。
1。.构建这些散点的坐标值的(列)向量P,每个元素的值是用复数表示的坐标值P[n=x+i*y ;
2。根据P构造各点的斜率向量K,K[n=(y[n+1-y[n)/(x[n+1-x[n) ;最后一点没法得到其斜率,为使向量的元素个数不变,只好假设它的斜率与前一点的斜率相同;
3。由K可以得到各点与其后一点之间的斜率的增量dK[n=K[n+1-K[n ;为使向量的元素个数不变,同样假设最后一点的增量与其前一点的增量相同;
4。除最后一点外,都可以考察增量的变化,构造增量的变化矩阵D[n=dK[n+1-dK[n ;最后一点做相同的假设,使向量的元素个数不变;
5。构造向量D,用sign() 得到各点的增量变化量的符号值dD=sign(D[n) :-1,0 ,1 ;
6。构造向量N1=match(-1.dD)和N2=match(1,dD) ;
7。N=sort(stackt(N1,N2)) ;
8。在向量N中,如果N[n+1-N[n=1 ,那么, P[n的值就是拐点的坐标值。(这一步是臆想的,需验证、修正)
这是我的思路,没有经过实际验证,难免有错,仅供楼主参考。
2015年12月28日 00点12分 6
第5步应是dD[n=sign(D[n) 。不过第5步和第6步都可能用上矩阵向量符号,便可以简化计算过程,避免for循环。
2015年12月28日 00点12分
即使得到了散点的回归函数表达式,也未必能得到它的一阶、二阶导数。
2015年12月28日 01点12分
第7步和第8步是错的,混淆了一直递增和一直递减的情况。应该是绝对值 |N1[n-N2[m|的值为 1 。
2015年12月28日 01点12分
任何思路都难免有漏洞和错误,都需要在实践中验证、修正。
2015年12月28日 01点12分
level 15
所谓噪声或者说噪点,从数值角度来看,就是突然出现的不符合整体变化趋势的异常数值点。所以,可以事先设定一个鉴别尺度值n,如果某点的前n个点的斜率增量是单调增(减),而后n个点的斜率增量是单调减(增),那么就认定该点是拐点。小于n值的“拐点”就判为假拐点。
2015年12月28日 08点12分 7
∑(n个点的增量符号值dD)= -n或者 n
2015年12月28日 08点12分
level 13
楼主若能用差分的方法处理你的问题,也许比用平滑~微分这套方法得到的结果更有档次!
2015年12月28日 08点12分 9
谢谢您的建议,我摸索一下。
2015年12月28日 11点12分
1