数学建模 用幂法 和法 根法求特征值特征向量
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数学建模作业
计算机学院信计1102班姜圣涛
(1)幂法求矩阵最大特征值及特征向量:
程序为:
#include
#include
using namespace std;
#define n 3 //三阶矩阵
#define N 20
#define err 0.0001
//幂法求特征值特征向量
void main(){
cout<<"**********幂法求矩阵最大特征值及特征向量***********"< double A[n][n],X[n],u,y[n],max; cout<<"请输入矩阵:\n"; for(i=0;i for(j=0;j 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<<"A的特征值是 :"< cout< cout<<"A的特征向量为:"< for(i=0;i cout< cout< break; } else { if(k else { 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<<"********和法求矩阵的特征根及特征向量*******"< for(i=0;i for(j=0;j cin>>A[i][j]; //输入矩阵 //计算每一列的元素和 M[0]=0;M[1]=0;M[2]=0; for(i=0;i for(j=0;j { M[i]+=A[j][i]; } //将每一列向量归一化 for(i=0;i for(j=0;j { W[j][i]=A[j][i]/M[i]; } //输出按列归一化之后的矩阵W cout<<"按列归一化后的矩阵为:"< for(i=0;i for(j=0;j { cout< if(j==2) cout< } //求特征向量 w[0]=0;w[1]=0;w[2]=0; for(i=0;i for(j=0;j { 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< } 运行结果为: (3)根法求矩阵最大特征值及特征向量: 程序为: #include #include #include using namespace std; #define n 3 //三阶矩阵 #define N 20 void main(){ int i,j; double A[n][n],w[n],M[n],u[n],W[n][n],max; cout<<"********根法求矩阵的特征根及特征向量*******"< for(i=0;i for(j=0;j