| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 148 人关注过本帖
标题:用C语言计算K-L信息量法,运行之后答案出现错误,请大家帮忙看看
只看楼主 加入收藏
xjy1996
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2019-3-13
结帖率:100%
  已结贴   问题点数:20  回复次数:4   
用C语言计算K-L信息量法,运行之后答案出现错误,请大家帮忙看看
程序代码:

#define N 72
#define L 12
#include <stdio.h>
#include <math.h>
 void main()
{
    int i,j=0,t,l;
    float x[N];
    float y[N];
    float pt[N],qt[N];
    float sum_x=0;
    float sum_y=0;
    float min;
    int l_num;
    int m;
    long double kl[2*L+1]={0};

printf("please center the element of the CPI\n");
    for(i=0;i<N;i++)
      scanf("%f",&x[i]);
printf("please center the element of the Candidate Index\n");
    for(i=0;i<N;i++)
      scanf("%f",&y[i]);

    for(i=0;i<N;i++)
    {
      sum_x+=x[i];
      sum_y+=y[i];
    }
 printf("sum_x=%f\n",sum_x);
 printf("sum_y=%f\n",sum_y);
    for(i=0;i<N;i++)
    {
    pt[i]=y[i]/sum_y;
    qt[i]=x[i]/sum_x;
    }
for(m=0;m<N;m++)
{

    printf("pt[%d]=%f\n",m,pt[m]);
    printf("qt[%d]=%f\n",m,qt[m]);
    for(l=-L;l<0;l++)
    {
        for(t=-l+1;t<=N;t++)
        {
          kl[j]+=pt[t-1]*log(fabs(pt[t-1]/qt[t+l-1]));
        }
        printf("kl[%d]=%f\n",j,kl[j]);
        j=j+1;
    }
    printf("j11=%d\n",j);
    for(l=0;l<=L;l++)
    {
        for(t=1;t<=N-l;t++)
        {
        kl[j]+=pt[t-1]*log(fabs(pt[t-1]/qt[t+l-1]));
        }
        printf("kl[%d]=%f\n",j,kl[j]);
        j=j+1;
    }
    printf("j22=%d\n",j);
    for(i=0;i<j;i++)
    {
    printf("kl[%d]= ",i-L);
    printf("%f\n",kl[i]);
    }
    min=fabs(kl[0]);
    l_num=0;
    for(i=1;i<j;i++)
    if(min>fabs(kl[i]))
    {min=fabs(kl[i]);l_num=i;}
    l_num=l_num-L;
    printf("l_number is =%d\n",l_num);
    printf("the min is=%.16f\n",min);
}
 }



以上是错误的截图,请帮忙修改一下,谢谢

这个是输入的数据:
CPI=87.88
88.35
89.13
90.31
91.67
93.06
94.46
95.62
96.48
97.27
98.30
99.53
100.41
100.72
100.67
100.69
100.83
101.02
101.08
101.17
100.98
100.57
100.01
99.53
99.40
99.60
100.08
100.90
102.32
104.20
106.24
107.85
108.46
107.93
106.37
104.64
103.40
103.10
103.47
103.99
104.26
103.87
102.66
100.84
99.16
98.22
98.57
100.16
102.61
105.32
107.37
108.18
107.55
106.08
105.02
105.10
106.47
108.49
110.33
111.01
110.17
107.95
105.24
103.24
102.80
104.04
106.76
110.40
114.33
118.20
121.85
124.76
Index=
103.7
102.6
103.4
102.6
103
103
102.6
103.4
103.9
102.8
103.9
104.1
101.8
102.3
101.2
101.2
101.1
101.7
101.8
102.4
103.2
103.4
103.2
103.2
102.8
102.4
102.9
102.5
102.8
102.5
102.5
101.7
101.1
101.2
101.5
101.4
101
101.5
101.5
101.3
101.2
101.5
101.5
101.9
101.8
101.7
101.4
101.9
101.7
102.7
102.2
102.3
101.8
101.6
101.3
100.9
101.2
100.9
101.4
101.2
102
100.4
100.7
100.7
101.4
101.5
101.7
102
102
102.4
102.2
102.4








附件: 您没有浏览附件的权限,请 登录注册
2019-03-13 19:33
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:291
帖 子:6164
专家分:35580
注 册:2011-1-18
  得分:20 
你输入的是
CPI=87.88
88.35
………
Index=
103.7
………
难道 代码 和 数据 不是抄同一人的?哪来的“CPI=”和“Index=”

而kl数组越界的问题自己解决,因为这属于“想不出任何存在理由的恶习”引发的。变量只应该定义并初始化在其需要使用到的块内,不要一股脑定义到最外界,污染名字空间,还容易在下次循环内忘了重新赋初值。
2019-03-14 09:04
xjy1996
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2019-3-13
  得分:0 
回复 2楼 rjsp
您好,可以帮忙修改一下吗,因为是代码小白,真的不知道怎么改,但是毕业论文急需,请您帮我改改,可以吗,谢谢您
2019-03-14 22:25
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:291
帖 子:6164
专家分:35580
注 册:2011-1-18
  得分:0 
回复 3楼 xjy1996
1。你的输入数据是错误的,我已经说过了,你应该知道怎么改了
2。试试在 for(m=0;m<N;m++) 的循环体内加 j = 0;
3。是否有逻辑错误我就不知道了,我根本就不知道你想实现什么功能。
2019-03-15 08:40
xjy1996
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2019-3-13
  得分:0 
回复 4楼 rjsp
您好,可以帮忙用C语言写一段小代码吗,我需要实现的是计算k-L信息量法,公式如图片所示,我添加到附件,就是先根据公式计算出Pi和qi,然后再根据公式计算出K-L信息量,最主要的是计算X从-12阶(就相当于计算X的值提前1-12个月)到+12阶(计算X的值滞后1-12个月)与Y每个月对应的K-L信息量,然后再筛选出最小的K-L信息量,以及最小的K-L信息量对应的滞后阶数。,可以帮忙写写代码吗,因为真的很急,有偿帮忙,谢谢,我的邮箱451284530@qq.com
附件: 您没有浏览附件的权限,请 登录注册
2019-03-15 18:56







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

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