资源简介
本程序是在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
- 上一篇:VC实现TCP数据包发送(挺好的源代码)
- 下一篇:超级效率的FFT的代码(C语言)
相关资源
- 基于MFC的TCP调试助手源码95706
- 国际象棋的qt源代码
- 操作系统c语言模拟文件管理系统844
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- 基于mfc的多线程文件传输
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 利用C++哈希表的方法实现电话号码查
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 移木块游戏,可以自编自玩,vc6.0编写
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- C++纯文字DOS超小RPG游戏
- 个人日常财务管理系统(C语言)
- MFC数字钟(基于VC6.0)
- c语言电子商务系统
评论
共有 条评论