数学建模作业及答案 下载本文

数学建模作业

姓名:叶勃 学号: 班级: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 #include using namespace std;

#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

#include using namespace std; #define n 3 //三阶矩阵 #define N 20

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]; }

cout<<\最大特征根为:\ cout<