問題描述
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL0cGRNdXSUNWNk1mYoR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLwEjM0MzNyATMzIjMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
如圖示,一個矩形波,現在要求定位該波的起跳點。一般算法可以采用間隔一定點數(比如50點)的兩個點,逐次周遊整個波形,計算間隔兩點之間的斜率,斜率開始變得最大的點可以作為該波形的起始點。
這種傳統算法是逐點周遊,效率較低。可以采用折半查找法進行定位。
算法思想:
首先選取曲線上最大值P2, 以曲線起點P1,最大值P2的中點P3,比較P2P3, P1P2直線斜率,來決定下一個中點P3’ 的取值。
兩斜率之差>0,在P1, P3範圍内取中值,更新P3點為P2點,P3’ 點為P3點,P1點保持不變,更新計算P2P3, P1P2的斜率
兩斜率<0, 在P2,P3範圍内取中值。更新P3’點為P1點,P2點保持不變,P3點更新為新的P1P2的中點。更新計算P2P3,P1P2的斜率。