资源简介
本程序是在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语言)
相关资源
- 超级效率的FFT的代码(C语言)
- VC实现TCP数据包发送(挺好的源代码)
- UR机械臂与PC通讯程序socket2018_03_16
- C语言实现二值图像连通区域标记,可
- 仿QQ MFC 程序
- SM2/SM3算法C语言实现
- CvImgCtrl 演示程序
- 用C语言实现异质链表
- 消消乐游戏c语言代码
- DTW算法 C++实现
- at89c51单片机产生5KHZ方波c语言编程
- STM32系列单片机C语言编程语法指导
- 东北大学C语言课设—小金库
- 最简单的C++静态调用DLL
- 用C++设计一个立方体类Box,它能计算
- C语言课设---汉诺塔程序代码
- 林锐 《高质量C/C++编程》
- c语言实现矩阵求逆程序
- Linux c语言多线程实现生产者/消费者问
- 航班信息管理系统C语言编写
- C++ 实现的HTTP协议打包解析器
- 图像分割和边缘检测完全C语言源代码
- 五子棋MFC源码及注释.
- 用OpenCV实现Photoshop色阶调整算法
- C++ Primer Plus第6版_中英文版两个_带书
- C++实现的FTP服务器
- C语言后台代码
- C++家庭财务管理系统
- Linux下硬盘分区读写程序
- VC++ 控制IE网页操作
评论
共有 条评论