目录

1. 前言

2. 理论基础

3. 代码


1. 前言

最近小白在跟进一个项目,其中运用到了灰色关联分析法用来分析样本数据。同时在阅读了一些原理资料后,设计了一个模块化的C++程序(其实也不算模块化啦),关于原理方面,我在这里就不过多的赘述了,想要了解原理的同学,可以移步到下面的链接去了解。接下来我就把我编写的算法程序分享给大家。

2. 理论基础

链接:原理链接1、原理链接2

3. 代码

(1).h文件:

#pragma once
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>using namespace std;class GRA
{
public:GRA();void SetTargetSequence(vector<double> target_);//设置目标序列void SetIndexSequence(vector<vector<double>> index_);//设置样本序列void SetWeight(vector<double> w);//设置权重double PolarityMin(vector<double> targetIndex_);//数据标准化double PolarityMax(vector<double> targetIndex_);//数据标准化double IndexMax(vector<double> targetIndex_);//数据标准化double IndexMin(vector<double> targetIndex_);//数据标准化void ForwardProcessing(vector<double> &index_, int num);//数据正向化void MaximumDimensionless(vector<double> &index_);//数据标准化void MinimumDimensionless(vector<double>& index_);//数据标准化void PushIndex(vector<double> index_);vector<vector<double>> TransPose(vector<vector<double>> index_);//转置void GreyRelationCompute();//灰色关联度计算vector<double> GetGreyRelation();//输出关联度向量vector<vector<double>> GetRelationMatrix();//输出关联度矩阵(用于检测数据计算准确性)private:vector<double> weight;//权重double row;vector<double> targetSequence;//目标序列vector<vector<double>> indexSequence;//样本序列vector<vector<double>> relationMatrix;//关联度矩阵vector<double> relation;//关联度向量};

(2).cpp文件:

#include <iostream>
#include <vector>
#include "GRA.h"using namespace std;GRA::GRA()
{row = 0.5;}void GRA::SetTargetSequence(vector<double> target_)
{targetSequence = target_;
}void GRA::SetIndexSequence(vector<vector<double>> index_)
{indexSequence = index_;
}void GRA::SetWeight(vector<double> w)
{weight = w;
}double GRA::PolarityMax(vector<double> targetIndex_)
{double tmp = fabs(targetSequence[0] - targetIndex_[0]);for (int i = 0; i < targetIndex_.size(); i++){if (tmp < (fabs(targetSequence[i] - targetIndex_[i]))){tmp = fabs(targetSequence[i] - targetIndex_[i]);}}return tmp;}double GRA::PolarityMin(vector<double> targetIndex_)
{double tmp = fabs(targetSequence[0] - targetIndex_[0]);for (int i = 0; i < targetIndex_.size(); i++){if (tmp > (fabs(targetSequence[i] - targetIndex_[i]))){tmp = fabs(targetSequence[i] - targetIndex_[i]);}}return tmp;}double GRA::IndexMax(vector<double> targetIndex_)
{double tmp = targetIndex_[0];for (int i = 0; i < targetIndex_.size(); i++){if (tmp < targetIndex_[i]){tmp = targetIndex_[i];}else{continue;}}return tmp;
}double GRA::IndexMin(vector<double> targetIndex_)
{double tmp = targetIndex_[0];for (int i = 0; i < targetIndex_.size(); i++){if (tmp > targetIndex_[i]){tmp = targetIndex_[i];}else{continue;}}return tmp;
}void GRA::ForwardProcessing(vector<double> &index_,int num)
{double Max = IndexMax(index_);for (int i = 0; i < index_.size(); i++){index_[i] = fabs(targetSequence[num] - index_[i]);}return;
}void GRA::MaximumDimensionless(vector<double>& index_)
{double MAX = IndexMax(index_);double MIN = IndexMin(index_);for (int i = 0; i < index_.size(); i++){index_[i] = (index_[i] - MIN) / (MAX - MIN);}return;
}void GRA::MinimumDimensionless(vector<double>& index_)
{double MAX = IndexMax(index_);double MIN = IndexMin(index_);for (int i = 0; i < index_.size(); i++){index_[i] = (MAX - index_[i]) / (MAX - MIN);}return;
}void GRA::PushIndex(vector<double> index_)
{indexSequence.push_back(index_);
}vector<vector<double>> GRA::TransPose(vector<vector<double>> index_)
{vector<vector<double>> result;for (int j = 0; j < index_[0].size(); j++){vector<double> tmp;for (int i = 0; i < index_.size(); i++){tmp.push_back(index_[i][j]);}result.push_back(tmp);}return result;
}void GRA::GreyRelationCompute()
{vector<vector<double>> Index = TransPose(indexSequence);//indexSequence 4x7,index 7x4vector<double> tmp_1, tmp_2;double memberReslution_1, memberReslution_2;for (int i = 0; i < Index.size(); i++){double member_1 = PolarityMin(Index[i]);double member_2 = PolarityMax(Index[i]);tmp_1.push_back(member_1);tmp_2.push_back(member_2);}memberReslution_1 = IndexMin(tmp_1);memberReslution_2 = IndexMax(tmp_2);for (int i = 0; i < Index.size(); i++){vector<double> re;/*re.push_back(i);*/for (int j = 0; j < Index[i].size(); j++){re.push_back((memberReslution_1 + row * memberReslution_2) / (fabs(targetSequence[j] - Index[i][j]) + (row * memberReslution_2)));}relationMatrix.push_back(re);}double tmp = 0;for (int i = 0; i < relationMatrix.size(); i++){for (int j = 0; j < relationMatrix[i].size(); j++){tmp += weight[j] * relationMatrix[i][j];}tmp = tmp / weight.size();relation.push_back(tmp);tmp = 0;}
}vector<double> GRA::GetGreyRelation()
{return relation;
}
vector<vector<double>> GRA::GetRelationMatrix()
{return relationMatrix;
}

(3)测试文件:

#include <iostream>
#include <vector>
#include "GRA.h"
#include <map>using namespace std;void main()
{vector<double> index_1, index_2, index_3, index_4, index_5, index_6, index_7;//样本数index_1.push_back(0);index_1.push_back(1);index_1.push_back(0.173);index_1.push_back(0.168);index_2.push_back(0);index_2.push_back(1);index_2.push_back(0.212);index_2.push_back(0.022);index_3.push_back(0);index_3.push_back(1);index_3.push_back(0.248);index_3.push_back(0.083);index_4.push_back(0);index_4.push_back(1);index_4.push_back(0.222);index_4.push_back(0.118);index_5.push_back(0);index_5.push_back(1);index_5.push_back(0.199);index_5.push_back(0.051);index_6.push_back(0);index_6.push_back(1);index_6.push_back(0.188);index_6.push_back(0.06);index_7.push_back(0);index_7.push_back(1);index_7.push_back(0.204);index_7.push_back(0.035);vector<vector<double>> index;for (int i = 0; i < index_1.size(); i++){vector<double> tmp;tmp.push_back(index_1[i]);tmp.push_back(index_2[i]);tmp.push_back(index_3[i]);tmp.push_back(index_4[i]);tmp.push_back(index_5[i]);tmp.push_back(index_6[i]);tmp.push_back(index_7[i]);index.push_back(tmp);}cout << index.size() << ", " << index[0].size() << endl;GRA A;vector<double> target;target.push_back(1);target.push_back(1);target.push_back(1);target.push_back(1);A.SetTargetSequence(target);A.ForwardProcessing(index[0], 0);A.MinimumDimensionless(index[2]);A.MinimumDimensionless(index[3]);vector<double> weight(4, 1);A.SetWeight(weight);A.SetIndexSequence(index);A.GreyRelationCompute();vector<vector<double>> relation = A.GetRelationMatrix();for (int i = 0; i < relation.size(); i++){for (int j = 0; j < relation[i].size(); j++){cout << relation[i][j] << ",\t";}cout << endl;}vector<double> path = A.GetGreyRelation();for (int i = 0; i < path.size(); i++){cout << path[i] << ",\t";}cout << endl;system("pause");return;
}

灰色关联分析法(GRA)-C++实现相关推荐

  1. 数学建模常用算法—灰色关联分析法(GRA)

    解决问题 灰色关联分析的基本思想是根据序列曲线几何形状的相似程度来判断其联系是否紧密.曲线越接近,相应序列之间的关联度就越大,反之就越小. 一般的抽象系统,如社会系统.经济系统.农业系统.生态系统.教 ...

  2. python 灰色关联分析法(GRA)求权重

    我遇到的问题: 假设现在有p个指标,g个参评单位.已经告诉你这g个参评单位在p个指标上的得分分别为多少,那么如何确定这p个指标的权重应该为多少? 原理 1.构成矩阵如下: 2.首先对矩阵做行均值化处理 ...

  3. 数学建模:评价性模型学习——灰色关联分析法(GRA模型)

    目录 前言 一.灰色关联分析 1.什么是灰色关联分析? 2.流程介绍 二.综合评价 1.数据无量纲化处理 2.确定参考序列 3.确定权重 4.计算灰色关联系数 5.计算灰色加权关联度 6.代码 总结 ...

  4. 灰色关联度分析法(GRA)_python

    灰色系统理论及其应用系列博文: 一.灰色关联度分析法(GRA)_python 二.灰色预测模型GM(1,1) 三.灰色预测模型GM(1,n) 四.灰色预测算法改进1-背景值Z 五.灰色预测改进2-三角 ...

  5. R语言灰色关联分析法

    R语言灰色关联分析法 输入数据 数据的标准化/归一化 求灰色系数 求差序列和最大值最小值 求关联系数 计算关联度并排序 所有代码 灰色关联度分析(Grey Relation Analysis,GRA) ...

  6. 灰色关联分析法详解及python实践

    1. 关于灰色关联分析 1.1. 什么是灰色关联分析 灰色关联分析是指对一个系统发展变化态势的定量描述和比较的方法,其基本思想是通过确定参考数据列和若干个比较数据列的几何形状相似程度来判断其联系是否紧 ...

  7. 灰色关联分析(GRA)

    文章目录 灰色关联 实现过程 灰色关联 对于两个系统之间的因素,其随时间或不同对象而变化的关联性大小的量度,称为关联度.在系统发展过程中,若两个因素变化的趋势具有一致性,即同步变化程度较高,即可谓二者 ...

  8. 数学建模常用模型04:灰色关联分析法

    数学建模常用模型04:灰色关联分析法 灰色关联分析法 本文所用的资料参考来源:美赛资料网:美赛资料网 与灰色预测模型一样,比赛不能优先使用,灰色关联往往可以与层次分析结合使用.层次分析用在确定权重上面 ...

  9. 灰色关联分析法——Excel实操

    把信息完全明确的系统称为白色系统,把信息完全不明确的系统称为黑色系统,信息部分明确.部分不明确的系统称为灰色系统.当事物之间.因素之间.相互关系比较复杂,样本个数n较少时,采用灰色关联分析法. 灰色关 ...

最新文章

  1. 使用自定义UISlider控制View亮度
  2. RESTful设计原则和样例(开发前后台接口)
  3. python中plotly.express中线条图,Plotly在Python中表达的意外行
  4. n/2^n的前n项和,Sn=∑n/2^n
  5. 少儿编程100讲轻松学python(二)-python cv2模块怎么安装
  6. ubuntu下安装wine1.8和阿里旺旺
  7. 面试篇——mysql
  8. 「 LaTex 」写论文,natbib宏的参考文献引用格式详解
  9. 二维码制作软件生成二维码时的参数设置
  10. 【数学】欧拉恒等式:史上最完美的数学公式,没有之一!
  11. 【OCR】中文街景数据集、场景文本定位识别新网络:End2End-PSL
  12. 2022年4月20日Python课堂考试复盘及课堂笔记之程序控制结构
  13. 为什么要分库分表?一个业务场景来理顺它!
  14. 设计模式 | 建造者模式及典型应用
  15. python列表比较方法_python列表常用方法
  16. LYTRO图像文件数据包
  17. CodeBlocks使用小技巧
  18. 删除无法删除的文件/文件夹
  19. Django开发数据可视化大屏-JS绘制大屏动态背景-(视图模板制作)
  20. 能否下载到好用的CAD室内设计图纸资源?

热门文章

  1. 如何制作9.png图片
  2. 2021上海软件和信息技术服务业百强榜单出炉:七牛云再登榜单
  3. c++ vs2015 播放音乐_索尼爱立信W系列回顾:看当年音乐手机大佬如何讨好年轻人耳朵?...
  4. 010-电脑软件安装手册-20190418
  5. 3dmax如何删除单个着色器清空素材
  6. idea悄悄记录一下pojie
  7. 使用R语言包clusterProfiler做KEGG富集分析时出现的错误及解决方法
  8. 超级计算机summit存储容量,天河3号超级计算机 我国正在开发超级计算机 将比”天河一号”快200倍...
  9. 小心!疯狂科技“秒变”疯狂骗局
  10. jsp中文件上床的enctype=multipart/form-data用法