层次分析法c语言代码
时间: 2024-06-03 21:05:28 浏览: 100
层次分析法(AHP)是一种决策分析方法,它通过对多个方案进行层次化分解和比较,最终得出每个方案的权重和排名。下面是一个简单的层次分析法的C语言代码示例:
```
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX_N 10
double a[MAX_N][MAX_N]; // 层次结构矩阵
double w[MAX_N]; // 特征向量
double lambda; // 最大特征值
int n; // 层次结构矩阵的维数
// 计算特征向量
void calc_w() {
double sum;
int i, j;
for (i = 0; i < n; i++) {
sum = 0;
for (j = 0; j < n; j++) {
sum += a[i][j];
}
w[i] = sum;
}
for (i = 0; i < n; i++) {
w[i] /= n;
}
}
// 计算最大特征值
void calc_lambda() {
double sum = 0;
int i;
for (i = 0; i < n; i++) {
sum += w[i];
}
lambda = sum / n;
}
// 计算一致性指标
double calc_ci() {
double ci, ri;
int i;
switch (n) {
case 1: ri = 0.00; break;
case 2: ri = 0.00; break;
case 3: ri = 0.58; break;
case 4: ri = 0.90; break;
case 5: ri = 1.12; break;
case 6: ri = 1.24; break;
case 7: ri = 1.32; break;
case 8: ri = 1.41; break;
case 9: ri = 1.45; break;
case 10: ri = 1.49; break;
default: exit(1); break;
}
ci = (lambda - n) / (n - 1);
return ci / ri;
}
int main() {
int i, j;
double ci;
printf("请输入层次结构矩阵的维数:");
scanf("%d", &n);
printf("请输入层次结构矩阵:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
scanf("%lf", &a[i][j]);
}
}
calc_w();
calc_lambda();
ci = calc_ci();
if (ci <= 0.1) {
printf("一致性检验通过!\n");
printf("特征向量为:\n");
for (i = 0; i < n; i++) {
printf("%.4f ", w[i]);
}
printf("\n");
printf("最大特征值为:%.4f\n", lambda);
printf("权重为:\n");
for (i = 0; i < n; i++) {
printf("%.4f ", w[i] / lambda);
}
printf("\n");
} else {
printf("一致性检验未通过,请重新输入层次结构矩阵!\n");
}
return 0;
}
```
这个代码实现了层次分析法的主要算法流程,包括输入层次结构矩阵、计算特征向量和最大特征值、进行一致性检验等操作。同时,代码还提供了权重计算和结果输出的功能。当然,这只是一个简单的示例代码,实际应用中还需要根据具体问题进行适当的修改和扩展。
阅读全文