• 大小: 211KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-01
  • 语言: C/C++
  • 标签: 灰度模型  c++  c  

资源简介

本程序是在VC6.0编辑环境下写的,参照灰度模型理论思想编码。用C语言的思想(结构化程序设计)编写的,只有申请和释放指针用C++语言,但是改为纯C++也不是很难。由于可以实现了预测功能,也无心修改成C++了,有兴趣的同仁可以自行修改,如有问题,敬请交流,多谢指教

资源截图

代码片段和文件信息

// 111.cpp : Defines the entry point for the console application.
//
#include “stdafx.h“
#include “stdio.h“
#include “malloc.h“
#include “string.h“
#include “math.h“

//#define  ARRAY_MAX  1000
//#define  N        4


double Abs(double x);
int GetArrayLen(double *p);

//aa矩阵m行n列  bb矩阵n行k列,最后返回m行k列的矩阵,此函数验证是正确的
double ** ArrayMul(int m  double **aa int n double **bb  int k);
//逆矩阵也是验证正确的
double **InverseMatrix(double **Aint n);
//转置矩阵
double **Tarray(double **A int m int n);
void Alfa(double **B double **Yn int n double *a double *b);

//data[]是原始序列预测的第k个数P为小残概率P>0.8时为合格C是方差比当小于0.5时为合格
double GM(double data[] int k  double *p double *c);

//void Estimate(int p int c);


int main(int argc char* argv[])
{

    double *p *c;
double data[] = {2.67 3.13 3.25 3.36 3.56 3.72};
double result=0.0 ;
p = new double;
c = new double ;
    result = GM(data 7 p c);
        delete p;
        delete c;
return 0;
}

 //灰色模型法
 double GM(double data[] int k  double *p double *c)
 {
      int rowNum = sizeof(data)/sizeof(*data);;

  rowNum = k-1;
  //    double x0 [ARRAY_MAX];
 //     double x1 [ARRAY_MAX];
  double **B = new  double*[rowNum];
  double **Yn = new double*[rowNum];
      
  double *x0 = new double[rowNum];
  double *x1 = new double[rowNum];

  int i;
  for (i=0; i   {
          B[i] = new double[2];
          Yn[i] = new double[1];
  }
      
      x0[0] = data[0];
      x1[0] = data[0];
      for (i = 1; i < rowNum; i++)
      {
          x0[i] = data[i];
          x1[i] = x1[i - 1] + x0[i];
      }

      for ( i = 0; i < rowNum - 1; i++)
      {
           B[i][0] = -0.5 * (x1[i] + x1[i + 1]);
   B[i][1] = 1;
           Yn[i][0] = x0[i + 1];                
      }
  double *a *b; 
  a = new double;
  b = new double;
  Alfa(B Yn  rowNum-1  a  b);
  
      double result;

  //作者源程序有问题
     // result = (x0[0] - *u / *a) * (1 - exp(*a)) * exp(-(*a) * (k - 1));

  result = (x0[0] - *b / *a)*exp(-(*a) * (k)) - (x0[0] - *b / *a)*exp(-(*a) * (k-1));
      printf(“\nresult = %f“ result);
            //模型精度检验

  double *q *epsilon;
  

//这两句自己不知道是不是动态申请rowNum个数组
  q = new double[rowNum];
  epsilon = new double[rowNum];
      for (i=0; i   {
          q[i] = 0.0;
          epsilon[i] = 0.0;
  }
      
      double epsilonSum = 0;
      double x0i;
      double xxi;
      double epsilonAverage;

  for (i=0; i   {
          x0i = x0[i];
  }
  q[0] = 0.0;
      epsilon[0] = 0.0;
  xxi=x0[0];
  double tempx = x0[0];
  double sum=0.0;

  for (i=1; i   {

          sum = (x0[0] - *b / *a)*exp(-(*a)*i)+(*b / *a) ;
//   printf(“ sum=%f “ sum);
      xxi = sum - tempx;
        //  printf(“ xxi=%f “ xxi);
  tempx = sum;
          
  q[i] = Abs(x0[i] - xxi);
          epsilon[i] = q[i]/x0[i];
//   printf(“ 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       8514  2010-10-07 14:11  灰度模型C源程序\GM.cpp

     文件     843264  2010-09-02 21:46  灰度模型C源程序\灰度模型.doc

     目录          0  2010-10-07 14:13  灰度模型C源程序

----------- ---------  ---------- -----  ----

               851778                    3


评论

共有 条评论