层次分析法矩阵权重和,根,特征值法,c语言计算
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{0.333333333,0.5,1,1
}
};
/*printf("请输入介数\n");2
scanf("%d",&N);
printf("请输入上对角线元素(不包括主对角线)形如: 22 34 45 56 34 \n");
for( i=0;i<N;i++)
for( j=0;j<N;j++)
{
if(i<Fra Baidu bibliotek)
pro[i]=pro[i]/N;
}
for (i=0;i<N;i++)
printf("%4.4f \n ",pro[i]);
}
void mu(int N,double a[13][13])
{
double m[13]={0}, temp=0.0,nn;
int i,j,k;
nn=double(N);
for (i=0;i<N;i++)
{
y=tran(N,x,fin,temp);
}*/
y=tran(N,x,fin,temp);
printf("\n最大特征值为:%4.4f",x);
switch(N)
{
case 3: w=(x-3)/2/0.52;break;
case 4: w=(x-4)/3/0.89;break;
case 5: w=(x-5)/4/1.12;break;
m[i]=1;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
m[i]=m[i]*a[i][j];
m[i]=pow(m[i],1/nn);
}
for(k=0;k<N;k++)
{
temp=temp+m[k];
}
for(i=0;i<N;i++)
{
m[i]=m[i]/temp;
printf("%4.4f \n ",m[i]);
case 6: w=(x-6)/5/1.26;break;
case 7: w=(x-7)/62/1.36;break;
case 8: w=(x-8)/7/1.41;break;
case 9: w=(x-9)/8/1.46;break;
case 10: w=(x-10)/9/1.49;break;
case 11: w=(x-11)/10/1.52;break;
//k=n-1;
k=N-1;
for(i=0;i<N;i++)
{
lin=temp[i][i];
for(j=i;j<N;j++)
{
temp[i][j]=temp[i][j]/lin;
}
}
for(i=0;i<N;i++)
{
q=p+i;
*q=temp[i][N-1];
}
return sum;/*将值返回*/
case 12: w=(x-12)/11/1.54;break;
case 13: w=(x-13)/12/1.56;break;
}
printf("\nCI/RI=%0.2f",w);
if (w<0.1)
{
printf("\n一致性检验通过。");
printf("\n特征值法的方法:\n");
h=0;
scanf("%fl",&a[i][j]);
else if(i==j)
a[i][j]=1;
else if(i>j)
a[i][j]=1/a[j][i];
}
for(i=0;i<N;i++)
for(j=0;j<N;j++)
{
printf("%4.4fl ",a[i][j]);
if(j==N-1)
printf("\n");
for(j=0;j<N;j++)
temp[i][j]=a[i][j];
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(i==j)
temp[i][j]-=x;
for (j=0;j<N-1;j++)
{
for (i=j+1;i<N;i++)
{
flag=0;
c=temp[i][j]/temp[j][j];
}
}
double tran( int N,double x, double *p,double a[13][13] )
{
int i,j,n,k,flag,r;
double lin, c,b,temp[13][13],*q,sum=1;
static int u=0;
r=1;
for(i=0;i<N;i++)
int i,j,k;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
sum[i]=sum[i]+a[j][i];
}
for(k=0;k<N;k++)
{
a[k][i]=a[k][i]/sum[i];
}
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
pro[i]=a[i][j]+pro[i];
min=fabs(fin[0]);
for(n=0;n<N;n++)
{
if(fabs(fin[n])>min)
min=fabs(fin[n]);//h=h+fabs(fin[n]);
}
for(n=0;n<N;n++)
{
h=fabs(fin[n])/min+h;
}
for(n=0;n<N;n++)
{
printf("%4.4f \n ",fabs(fin[n])/min/h);
//矩阵权重2010.cpp :定义控制台应用程序的入口点。
#include "stdafx.h" //vs2010以上版本有此项
#include"stdio.h"
#include"math.h"
void sum(int N,double a[13][13])
{
double sum[13]={0},pro[13]={0};
if(temp[j][j]==0)
{
for (k=j;k<N;k++)
{
if(temp[k][j]!=0)
{
flag=1;
for(n=j;n<N;n++)
{
temp[i][n]=temp[k][n];
}
r=-r;
}
}
if(flag==0)
{
break;
}
}
for(n=j;n<N;n++)
{
b=temp[j][n];
}*/
n=tz(N,a);
if(n==1)
{
printf("\n根的方法:\n");
mu(N,a);
printf("\n和的方法:\n");
sum(N,a);
}
printf("\n按回车键结束");
s=getchar();
for(i=0;i<1e100;i++);
}
x=100;
do
{
x0=x;
m=x+s;
y=tran(N,x,fin,temp);
k=(tran(N,m,fin,temp)-y)/s;
x=x0-y/k;
n++;
}while(fabs(x-x0)>1e-10);
//x=x0;y=tran(x,fin,temp);
/*for(;fabs(y-0)>0.1;x=x-0.0001)
}
int tz(int N,double a[13][13])
{
double min,h,w,s,x,x0,k,y,m,temp[13][13],fin[13]={0};
int n=0,i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
temp[i][j]=a[i][j];
s=0.000000000001;
temp[i][n]=temp[i][n]-c*b;
}
}
}
u++;
for(n=0;n<N;n++)
{
sum=sum*temp[n][n];
}
sum=r*sum;
printf("\rtimes %d %4.4f",u,sum);
//for(n=N-1;fabs(temp[n][n])<0.0001;n--)
}
return 1;
}
else
{
printf("\n一致性检验不通过\n");
return 0;
}
}
void main()
{
int i,n,N=4;//N为方阵介数a为方阵;
chars;
double a[13][13]={
{1,2,3,3},
{0.5,1,2,2},
{0.333333333,0.5,1,1},
}
};
/*printf("请输入介数\n");2
scanf("%d",&N);
printf("请输入上对角线元素(不包括主对角线)形如: 22 34 45 56 34 \n");
for( i=0;i<N;i++)
for( j=0;j<N;j++)
{
if(i<Fra Baidu bibliotek)
pro[i]=pro[i]/N;
}
for (i=0;i<N;i++)
printf("%4.4f \n ",pro[i]);
}
void mu(int N,double a[13][13])
{
double m[13]={0}, temp=0.0,nn;
int i,j,k;
nn=double(N);
for (i=0;i<N;i++)
{
y=tran(N,x,fin,temp);
}*/
y=tran(N,x,fin,temp);
printf("\n最大特征值为:%4.4f",x);
switch(N)
{
case 3: w=(x-3)/2/0.52;break;
case 4: w=(x-4)/3/0.89;break;
case 5: w=(x-5)/4/1.12;break;
m[i]=1;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
m[i]=m[i]*a[i][j];
m[i]=pow(m[i],1/nn);
}
for(k=0;k<N;k++)
{
temp=temp+m[k];
}
for(i=0;i<N;i++)
{
m[i]=m[i]/temp;
printf("%4.4f \n ",m[i]);
case 6: w=(x-6)/5/1.26;break;
case 7: w=(x-7)/62/1.36;break;
case 8: w=(x-8)/7/1.41;break;
case 9: w=(x-9)/8/1.46;break;
case 10: w=(x-10)/9/1.49;break;
case 11: w=(x-11)/10/1.52;break;
//k=n-1;
k=N-1;
for(i=0;i<N;i++)
{
lin=temp[i][i];
for(j=i;j<N;j++)
{
temp[i][j]=temp[i][j]/lin;
}
}
for(i=0;i<N;i++)
{
q=p+i;
*q=temp[i][N-1];
}
return sum;/*将值返回*/
case 12: w=(x-12)/11/1.54;break;
case 13: w=(x-13)/12/1.56;break;
}
printf("\nCI/RI=%0.2f",w);
if (w<0.1)
{
printf("\n一致性检验通过。");
printf("\n特征值法的方法:\n");
h=0;
scanf("%fl",&a[i][j]);
else if(i==j)
a[i][j]=1;
else if(i>j)
a[i][j]=1/a[j][i];
}
for(i=0;i<N;i++)
for(j=0;j<N;j++)
{
printf("%4.4fl ",a[i][j]);
if(j==N-1)
printf("\n");
for(j=0;j<N;j++)
temp[i][j]=a[i][j];
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(i==j)
temp[i][j]-=x;
for (j=0;j<N-1;j++)
{
for (i=j+1;i<N;i++)
{
flag=0;
c=temp[i][j]/temp[j][j];
}
}
double tran( int N,double x, double *p,double a[13][13] )
{
int i,j,n,k,flag,r;
double lin, c,b,temp[13][13],*q,sum=1;
static int u=0;
r=1;
for(i=0;i<N;i++)
int i,j,k;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
sum[i]=sum[i]+a[j][i];
}
for(k=0;k<N;k++)
{
a[k][i]=a[k][i]/sum[i];
}
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
pro[i]=a[i][j]+pro[i];
min=fabs(fin[0]);
for(n=0;n<N;n++)
{
if(fabs(fin[n])>min)
min=fabs(fin[n]);//h=h+fabs(fin[n]);
}
for(n=0;n<N;n++)
{
h=fabs(fin[n])/min+h;
}
for(n=0;n<N;n++)
{
printf("%4.4f \n ",fabs(fin[n])/min/h);
//矩阵权重2010.cpp :定义控制台应用程序的入口点。
#include "stdafx.h" //vs2010以上版本有此项
#include"stdio.h"
#include"math.h"
void sum(int N,double a[13][13])
{
double sum[13]={0},pro[13]={0};
if(temp[j][j]==0)
{
for (k=j;k<N;k++)
{
if(temp[k][j]!=0)
{
flag=1;
for(n=j;n<N;n++)
{
temp[i][n]=temp[k][n];
}
r=-r;
}
}
if(flag==0)
{
break;
}
}
for(n=j;n<N;n++)
{
b=temp[j][n];
}*/
n=tz(N,a);
if(n==1)
{
printf("\n根的方法:\n");
mu(N,a);
printf("\n和的方法:\n");
sum(N,a);
}
printf("\n按回车键结束");
s=getchar();
for(i=0;i<1e100;i++);
}
x=100;
do
{
x0=x;
m=x+s;
y=tran(N,x,fin,temp);
k=(tran(N,m,fin,temp)-y)/s;
x=x0-y/k;
n++;
}while(fabs(x-x0)>1e-10);
//x=x0;y=tran(x,fin,temp);
/*for(;fabs(y-0)>0.1;x=x-0.0001)
}
int tz(int N,double a[13][13])
{
double min,h,w,s,x,x0,k,y,m,temp[13][13],fin[13]={0};
int n=0,i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
temp[i][j]=a[i][j];
s=0.000000000001;
temp[i][n]=temp[i][n]-c*b;
}
}
}
u++;
for(n=0;n<N;n++)
{
sum=sum*temp[n][n];
}
sum=r*sum;
printf("\rtimes %d %4.4f",u,sum);
//for(n=N-1;fabs(temp[n][n])<0.0001;n--)
}
return 1;
}
else
{
printf("\n一致性检验不通过\n");
return 0;
}
}
void main()
{
int i,n,N=4;//N为方阵介数a为方阵;
chars;
double a[13][13]={
{1,2,3,3},
{0.5,1,2,2},
{0.333333333,0.5,1,1},