数学建模作业
姓名:叶勃 学号: 班级:024121
一:层次分析法
1、 分别用和法、根法、特征根法编程求判断矩阵
?126???A??1/214?
?1/61/41????1??2A??1/4??1/3?1/3?1/211/71/51/547123351/211??5?1/3?
?1?1??3的特征根和特征向量
(1)冪法求该矩阵的特征根和特征向量 程序为:
#include
#define n 3 //三阶矩阵
#define N 20 #define err 0.0001 //幂法求特征值特征向量 void main(){
cout<<\幂法求矩阵最大特征值及特征向量***********\ int i,j,k;
double A[n][n],X[n],u,y[n],max;
cout<<\请输入矩阵:\\n\for(i=0;i cin>>A[i][j]; //输入矩阵 cout<<\请输入初始向量:\\n\ for(i=0;i cin>>X[i]; //输入初始向量 k=1; u=0; while(1){ max=X[0]; for(i=0;i if(max for(i=0;i y[i]=X[i]/max; for(i=0;i { X[i]=0; for(j=0;j X[i]+=A[i][j]*y[j]; //矩阵相乘 } if(fabs(max-u) cout<<\的特征值是 :\ cout<<\的特征向量为:\ cout< else { if(k cout<<\运行错误\\n\ break; } } } } 程序结果为: (2)和法求矩阵最大特征值及特征向量 程序为: #include #include void main(){ int i,j,k; double A[n][n],w[n],M[n],u[n],W[n][n],max; cout<<\和法求矩阵的特征根及特征向量*******\cout<<\请输入矩阵:\\n\ for(i=0;i cin>>A[i][j]; //输入矩阵 //计算每一列的元素和 M[0]=0;M[1]=0;M[2]=0; for(i=0;i M[i]+=A[j][i]; } //将每一列向量归一化 for(i=0;i W[j][i]=A[j][i]/M[i]; } //输出按列归一化之后的矩阵W cout<<\按列归一化后的矩阵为:\ for(i=0;i cout< } //求特征向量 w[0]=0;w[1]=0;w[2]=0; for(i=0;i w[i]+=W[i][j]; } cout<<\特征向量为:\for(i=0;i u[i]=w[i]/(w[0]+w[1]+w[2]); cout< //求最大特征值 max=0; for(i=0;i w[i] = 0; for(j=0;j w[i] += A[i][j]*u[j]; } } for(i = 0;i < n;i++) { max += w[i]/u[i]; }