(波峰波谷)C++实现MATLAB一维数组函数findpeaks()函数求一维离散值极值

来源:互联网 发布:天刀离玉堂捏脸数据 编辑:程序博客网 时间:2024/05/16 03:44

一、代码

[cpp] view plain copy
 print?
  1. #include <iostream>  
  2. #include <vector>  
  3. using namespace std;  
  4.   
  5. //  
  6. //C++实现求一维离散数据极值(波峰、波谷)  
  7. //  
  8. //参数:数组,数组大小  
  9. void findPeaks(int *num,int count)  
  10. {  
  11.     vector<int> sign;  
  12.     for(int i = 1;i<count;i++)  
  13.     {  
  14.         /*相邻值做差: 
  15.          *小于0,赋-1 
  16.          *大于0,赋1 
  17.          *等于0,赋0 
  18.          */  
  19.         int diff = num[i] - num[i-1];  
  20.         if(diff>0)  
  21.         {  
  22.             sign.push_back(1);  
  23.         }  
  24.         else if(diff<0)  
  25.         {  
  26.             sign.push_back(-1);  
  27.         }  
  28.         else  
  29.         {  
  30.             sign.push_back(0);  
  31.         }  
  32.     }  
  33.     //再对sign相邻位做差  
  34.     //保存极大值和极小值的位置  
  35.     vector<int> indMax;  
  36.     vector<int> indMin;  
  37.   
  38.     for(int j = 1;j<sign.size();j++)  
  39.     {  
  40.         int diff = sign[j]-sign[j-1];  
  41.         if(diff<0)  
  42.         {  
  43.             indMax.push_back(j);  
  44.         }  
  45.         else if(diff>0)  
  46.         {  
  47.             indMin.push_back(j);  
  48.         }  
  49.     }  
  50.     cout<<"极大值为:"<<endl;  
  51.     for(int m = 0;m<indMax.size();m++)  
  52.     {  
  53.         cout<<num[indMax[m]]<<"  ";  
  54.     }  
  55.     cout<<endl;  
  56.     cout<<"极小值为:"<<endl;  
  57.     for(int n = 0;n<indMin.size();n++)  
  58.     {  
  59.         cout<<num[indMin[n]]<<"  ";  
  60.     }  
  61. }  
  62.   
  63. int main()  
  64. {  
  65.     int a[] = {1,2,10,2,4,1,8,10,23,0};  
  66.     findPeaks(a,10);  
  67.     return 0;  
  68. }  

二、运行结果:


三、用MATLAB验证结果




网址:http://blog.csdn.net/chentravelling/article/details/44966781

0 0
原创粉丝点击