| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 835 人关注过本帖
标题:C语言寻找一组数据中的第一第二峰值
只看楼主 加入收藏
zzmx
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2020-2-4
结帖率:83.33%
  已结贴   问题点数:15  回复次数:38   
C语言寻找一组数据中的第一第二峰值
实验要求,我需要找出一组数组中的两个峰值:第一个峰值和第二个峰值及其数组下标。这组数据画出的图应该是这样的,我就要找出图中的那两个峰值
我写的程序如下,我试了一下,这样找出的数据是不对的。比如有的数据会找出这样的数(隔得太近了,肯定不是)有的会找出这样的数
所以,请问有没有办法找出这样的两个峰值。
程序代码:
#include <iostream>
int main(int argc, char** argv)
 {
     double a[3000];
     double peak1,peak2,min=a[0];
     int i,p1,p2,t1,t2,life;
     FILE *fp=NULL;
     FILE *fpp=NULL;
     fp=fopen("G:\\uz\\new\\data100578.txt","r");
     for(i=0;i<2500;i++)
     {
         fscanf(fp,"%lf",&a[i]);
     }
     for(i=1;i<2500;i++)
     {
         if(a[i]<min)
         {
         min=a[i];
        peak1=a[i];
         p1=i+1;    
         }
     }//找第一个峰值 
     
     for(i=p1,min=a[p1];i<2500;i++)
     {
         if(a[i]<min)
         {
         min=a[i];
         peak2=a[i];
         p2=i+1;    
         }
     }//找第二个峰值
     printf("%lf %d\n",peak1,p1);
    printf("%lf %d\n",peak2,p2);
     fclose(fp);
    return 0;
}

附几组数据

[此贴子已经被作者于2020-2-11 12:19编辑过]

附件: 您没有浏览附件的权限,请 登录注册
搜索更多相关主题的帖子: C语言 峰值 数据 min int min C语言 数据 int 峰值 
2020-02-11 12:14
叶纤
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:326
专家分:411
注 册:2019-11-22
  得分:4 
楼主最好不要把c++语法和c语言语法混淆。
我测试是正好
还有fopen对于我来说是新知识,并没有太多认知,如果你fopen,那写错我也看不出来了,我没学过
程序代码:
  #include <iostream>
int main()
{
    double a[3000]= {};
    double peak=0,peak_2=0,min=a[0],mina=a[0];
    int i=0,p1=0,p2=0,t1=0,t2=0,life=0;
    FILE *fp=NULL;
    FILE *fpp=NULL;
    fp=fopen("G:\\uz\\new\\data100578.txt","r");


    for(i=1; i<sizeof(a)/sizeof(double); i++)
    {
        if(min>a[i])
        {
            min =a[i];
            p1=i+1;
        }
    }
    a[p1-1]=a[(sizeof(a)/sizeof(double))-1];
    a[(sizeof(a)/sizeof(double))-1]=a[p1-1];
    for(i=1; i<sizeof(a)/sizeof(double); i++)
    {
        if(mina>a[i])
        {
            mina =a[i];
            p2=i+1;
        }
    }

    std::cout<<min<<"\t"<<"xiabiao"<<"\t"<<p1;
    std::cout<<'\n';
    std::cout<<mina<<"\t"<<"xiabiao"<<"\t"<<p2;
    fclose(fp);
    return 0;
}   


每天进步一点点,一点点,就可以了
2020-02-11 19:42
纯蓝之刃
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:12
帖 子:275
专家分:1724
注 册:2019-7-29
  得分:4 
程序代码:
#include <stdio.h>
#define Threshold -10            //设置阈值
int main(int argc, char** argv)
{
    float a[3000];
    float peak1,peak2,peak2_1,peak2_2,min=a[0];
    int i,p1,p2,p2_1,p2_2,t1,t2,life;
    FILE *fp=NULL;
    FILE *fpp=NULL;
    fp=fopen("F:\\data\\data100000.txt","r");
    for(i=0; i<2500; i++)
    {
        fscanf(fp,"%f",&a[i]);
        //printf("%d-%f\n",i,a[i]);
    }
    for(i=0; i<2500; i++)
    {
        if(a[i]<min)
        {
            min=a[i];
            peak1=a[i];
            p1=i;
            printf("min=%f,p1=%d\n",peak1,p1);
        }
    }//找最大的峰值

    for(i=p1; i>0; i--)         //以第一个极值为基准,将数据分为两部分处理
    {
        if(a[i]>Threshold)
        {
            t1=i;
            break;
        }
    }
    for(i=p1; i<2500; i++)
    {
        if(a[i]>Threshold)
        {
            t2=i;
            break;
        }
    }

    min=0;
    for(i=0; i<t1; i++)
    {
        if(a[i]<min)
        {
            min=a[i];
            peak2_1=a[i];
            p2_1=i;
            printf("min=%f,p2_1=%d\n",peak2_1,p2_1);
        }
    }
    min=0;
    for(i=t2; i<2500; i++)
    {
        if(a[i]<min)
        {
            min=a[i];
            peak2_2=a[i];
            p2_2=i;
            printf("min=%f,p2_2=%d\n",peak2_1,p2_1);
        }
    }

    if(peak2_1<peak2_2)                             //分别处理的两部分结果比较,取最值
    {
        peak2=peak2_1;
        p2=p2_1;
    }
    else
    {
        peak2=peak2_2;
        p2=p2_2;
    }

    printf("%f %d\n",peak1,p1+1);
    printf("%f %d\n",peak2,p2+1);
    fclose(fp);
    return 0;
}

2020-02-11 21:10
叶纤
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:326
专家分:411
注 册:2019-11-22
  得分:0 
回复 5楼 纯蓝之刃
浮点数小数点后位数多了,精度也会变啊

[此贴子已经被作者于2020-2-11 22:35编辑过]

附件: 您没有浏览附件的权限,请 登录注册

每天进步一点点,一点点,就可以了
2020-02-11 21:42
叶纤
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:326
专家分:411
注 册:2019-11-22
  得分:0 
还有怎么开小数点后那么多位的?我也想开,
突然发现我的代码下标忘加1了

[此贴子已经被作者于2020-2-11 21:50编辑过]


每天进步一点点,一点点,就可以了
2020-02-11 21:46
xianfajushi
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:4
帖 子:284
专家分:230
注 册:2007-9-8
  得分:4 
之前发的图片也觉得数据奇怪,查文件数据内容,发现数据没读到,暂不跟帖,希望理解一下,
以下是引用叶纤在2020-2-11 21:46:34的发言:



修改了一下已经读到数据,0文件获得2个数据:


附件: 您没有浏览附件的权限,请 登录注册
2020-02-11 22:32
xianfajushi
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:4
帖 子:284
专家分:230
注 册:2007-9-8
  得分:0 
读1文件获得2个位置:


[此贴子已经被作者于2020-2-11 22:34编辑过]

附件: 您没有浏览附件的权限,请 登录注册
2020-02-11 22:32
叶纤
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:326
专家分:411
注 册:2019-11-22
  得分:0 
回复 7楼 xianfajushi
                。。。。。。

[此贴子已经被作者于2020-2-11 23:20编辑过]


每天进步一点点,一点点,就可以了
2020-02-11 23:02
xianfajushi
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:4
帖 子:284
专家分:230
注 册:2007-9-8
  得分:0 
文件0找到的2个位置似乎与图片上的一样,文件1不知是否对?待贴主回复看看。
分析波形的数据不易,波形数据是复杂的,假如波形未爬升到0又下降形成另一个波谷,算不算要找的?这是要说明清楚的。

波形数据是复杂的,要把典型的波形图例举出来,说明需要分析的所有条件限制,才能设计出符合的程序,简单的分析是不够的;

[此贴子已经被作者于2020-2-12 08:20编辑过]

2020-02-11 23:44
叶纤
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:326
专家分:411
注 册:2019-11-22
  得分:0 
回复 9楼 xianfajushi
我找的峰值和您的一样,不过2文件的下标和您的有偏差,还有光靠1文件的波形图并不能总结出什么,
我和您一样脑中有很多如果如果,感觉第二个峰值为-10太狗血了,等我有空的时候再改个我认为行的方案
-453.604000     xiabiao 1160
-10.895800      xiabiao 450

每天进步一点点,一点点,就可以了
2020-02-12 12:11
快速回复:C语言寻找一组数据中的第一第二峰值
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.070379 second(s), 8 queries.
Copyright©2004-2020, BCCN.NET, All Rights Reserved