📄 exercise_7.cpp
字号:
/*
幂法求矩阵的特征值和特征向量
1. 初始化矩阵,向量,误差
2. 置u=0。
3. 求xr=>λ
4. 计算
Y=X/λ,X=AY
5. 若|λ-u|<ε,输出λ,X,停机;
*/
#include<iostream>
#include<cmath>
using namespace std;
const int n=3;
const int m=4;
int main()
{
int i,j;
double Xr,err=0.00001,u,T=0;
double A[n][n]={{5,-4,1},{-4,6,-4},{1,-4,7}},
B[m][m]={{25,-41,10,-6},{-41,68,-17,10},{10,-17,5,-3},{-6,10,-3,2}};
double X[n]={1,1,1},Y[n];
double U[m]={1,1,1,1},V[m];
do
{
u=T;
for(i=0;i<n-1;i++)
{
Xr=X[0];
if(X[i+1]>X[i])Xr=X[i+1];
else continue;
}
T=Xr;
for(i=0;i<n;i++)Y[i]=X[i]/T;
for(i=0;i<n;i++)X[i]=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
X[i]+=A[i][j]*Y[j];
}
while(fabs(T-u)>err);
cout<<"矩阵A最大特征值T:"<<endl;
cout<<T<<endl;
cout<<"对应的特征向量为:"<<endl;
for(i=0;i<n;i++)
cout<<X[i]<<endl;
cout<<endl;
do
{
u=T;
for(i=0;i<m-1;i++)
{
Xr=U[0];
if(U[i+1]>U[i])Xr=U[i+1];
else continue;
}
T=Xr;
for(i=0;i<m;i++)V[i]=U[i]/T;
for(i=0;i<m;i++)U[i]=0;
for(i=0;i<m;i++)
for(j=0;j<m;j++)
U[i]+=B[i][j]*V[j];
}
while(fabs(T-u)>err);
cout<<"矩阵B最大特征值T:"<<endl;
cout<<T<<endl;
cout<<"对应的特征向量为:"<<endl;
for(i=0;i<m;i++)
cout<<U[i]<<endl;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -