数学建模 用幂法 和法 根法求特征值特征向量
幂法求特征值和特征向量

幂法求特征值和特征向量
幂法是一种用于求解特征值和特征向量的迭代算法。
它可以应用于任何具有特征值和特征向量的方阵,并且在实际应用中被广泛使用。
首先,我们需要了解什么是特征值和特征向量。
对于一个n阶方阵A,如果存在一个非零向量x,使得Ax = λx,其中λ是一个实数,那么λ称为A的特征值,x称为对应于特征值λ的特征向量。
幂法的基本思想是通过迭代过程得到一个向量序列,使得每一次迭代后的向量越来越接近于所需的特征向量。
具体步骤如下:
1. 选择一个非零向量b作为初始向量。
2. 迭代计算b的下一个近似向量b' = Ab,即将初始向量乘以
矩阵A。
3. 归一化向量b',即将b'除以其模长,得到新的向量b。
4. 重复步骤2和步骤3,直到向量b的变化趋于稳定。
在每次迭代过程中,向量b的模长会越来越接近于最大的特征值。
此外,向量b也收敛到与最大特征值对应的特征向量。
需要注意的是,幂法只能找到矩阵A的最大特征值和对应的特征向量。
如果需要找到其他特征值和特征向量,可以通过将矩阵A进行位移变换,使得所需的特征值成为矩阵A的最大特征值。
幂法的收敛速度取决于矩阵A的特征值的大小差异。
如果特征值之间的差异很大,那么幂法将很快收敛。
然而,如果特征值之间的差异很小,那么幂法的收敛速度将较慢。
总之,幂法是一种简单而有效的方法,用于求解矩阵的特征值和
特征向量。
它在很多实际问题中都得到了广泛的应用,例如在机器学习、信号处理和物理学等领域。
matlab幂法求特征值与特征向量 -回复

matlab幂法求特征值与特征向量-回复Matlab幂法求特征值与特征向量Matlab是一种常用的数学软件,它提供了一系列强大的数值计算工具和函数,旨在简化数学建模和计算的过程。
其中,求解特征值与特征向量是矩阵分析与线性代数中的重要问题之一。
在此,我们将介绍如何使用Matlab中的幂法来求解矩阵的特征值与特征向量。
特征值与特征向量是矩阵分析的基本概念。
给定一个矩阵A,如果存在一个非零向量x,使得Ax=λx,其中λ是一个实数,则称λ为A的特征值,x 为相应于特征值λ的特征向量。
在Matlab中,计算矩阵的特征值与特征向量可以使用`eig`函数。
这个函数能够计算矩阵所有特征值的值,其中特征值按照降序排列。
对于复杂特征值,这个函数会返回具有相应特征向量的V矩阵。
然而,幂法是一种迭代方法,可用于估计矩阵A的最大特征值λ和相应的特征向量x。
幂法的基本思想是利用矩阵的特征值分解性质中最大特征值的绝对值大于其他特征值的绝对值,从而将问题简化为求解最大特征值及其特征向量。
下面,我们将以以下步骤详细介绍如何使用Matlab中的幂法求解矩阵的特征值与特征向量:步骤1:定义初始向量x0首先定义一个非零的初始向量x0。
该向量可以是随机生成的,或者是具有合理初始值的向量。
步骤2:计算矩阵的迭代利用初始向量x0和矩阵A,计算下一个迭代向量x1。
具体而言,使用x0得到x1通过以下公式计算:x1 = A * x0步骤3:归一化迭代向量计算归一化的迭代向量x1。
这可以通过除以向量中的最大元素来完成。
归一化向量可以确保以后的计算产生可靠结果。
x1 = x1 / max(x1)步骤4:计算特征值估计计算特征值的估计值λ。
这可以通过计算x1的无穷范数与x0的无穷范数之比来实现:λ= norm(x1,Inf) / norm(x0,Inf)步骤5:收敛判断判断计算得到的特征值估计是否收敛。
这可以通过设定一个容差值来实现,在误差满足一定条件时停止迭代计算。
数值方法课程设计幂法反幂法计算矩阵特征值和特征向量-附Matlab程序

矩阵的特征值与特征向量的计算摘要物理,力学,工程技术中的很多问题在数学上都归结于求矩阵特征值的问题,例如振动问题(桥梁的振动,机械的振动,电磁振动等)、物理学中某些临界值的确定问题以及理论物理中的一些问题。
矩阵特征值的计算在矩阵计算中是一个很重要的部分,本文使用幂法和反幂法分别求矩阵的按模最大,按模最小特征向量及对应的特征值。
幂法是一种计算矩阵主特征值的一种迭代法,它最大的优点是方法简单,对于稀疏矩阵比较合适,但有时收敛速度很慢。
其基本思想是任取一个非零的初始向量。
由所求矩阵构造一向量序列。
再通过所构造的向量序列求出特征值和特征向量。
反幂法用来计算矩阵按模最小特征向量及其特征值,及计算对应于一个给定近似特征值的特征向量。
本文中主要使用反幂法计算一个矩阵的按模最小特征向量及其对应的特征值。
计算矩阵按模最小特征向量的基本思想是将其转化为求逆矩阵的按模最大特征向量。
然后通过这个按模最大的特征向量反推出原矩阵的按模最小特征向量。
关键词:矩阵;特征值;特征向量;冥法;反冥法THE CALCULATIONS OF EIGENVALUE AND EIGENVECTOR OF MATRIXABSTRACTPhysics, mechanics, engineering technology in a lot of problems in mathematics are attributed to matrix eigenvalue problem, such as vibration (vibration of the bridge, mechanical vibration, electromagnetic vibration, etc.) in physics, some critical values determine problems and theoretical physics in some of the problems. Matrix eigenvalue calculation is a very important part in matrix computation. In this paper, we use the power method and inverse power method to calculate the maximum of the matrix, according to the minimum characteristic vector and the corresponding characteristic value.Power method is an iterative method to calculate the eigenvalues of a matrix. It has the advantage that the method is simple and suitable for sparse matrices, but sometimes the convergence rate is very slow. The basic idea is to take a non - zero initial vector. Construct a vector sequence from the matrix of the matrix. Then the eigenvalues and eigenvectors are obtained by using the constructed vector sequence.The inverse power method is used to calculate the minimum feature vectors and their eigenvalues of the matrix, and to calculate the eigenvalues of the matrix. In this paper, we use the inverse power method to calculate the minimum eigenvalue of a matrix and its corresponding eigenvalues. The basic idea of calculating the minimum characteristic vector of a matrix is to transform it to the maximum characteristic vector of the modulus of the inverse matrix. Then, according to the model, the minimum feature vector of the original matrix is introduced.Key words: Matrix;Eigenvalue;Eigenvector;Iteration methods;目录1 引言 (1)2 相关定理。
数学建模作业及答案

数学建模作业姓名:叶勃学号:班级:024121一:层次分析法1、 分别用和法、根法、特征根法编程求判断矩阵1261/2141/61/41A ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦11/2433217551/41/711/21/31/31/52111/31/5311A ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦的特征根和特征向量(1)冪法求该矩阵的特征根和特征向量 程序为:#include<iostream> #include<math.h> using namespace std;#define n 3 //三阶矩阵#define N 20 #define err 0.0001 //幂法求特征值特征向量 void main(){cout<<"**********幂法求矩阵最大特征值及特征向量***********"<<endl; int i,j,k;double A[n][n],X[n],u,y[n],max;cout<<"请输入矩阵:\n"; for(i=0;i<n;i++) for(j=0;j<n;j++)cin>>A[i][j]; //输入矩阵 cout<<"请输入初始向量:\n"; for(i=0;i<n;i++)cin>>X[i]; //输入初始向量 k=1; u=0;while(1){ max=X[0]; for(i=0;i<n;i++) {if(max<X[i]) max=X[i]; //选择最大值 }for(i=0;i<n;i++)y[i]=X[i]/max; for(i=0;i<n;i++)X[i]=0;for(j=0;j<n;j++)X[i]+=A[i][j]*y[j]; //矩阵相乘}if(fabs(max-u)<err){cout<<"A的特征值是 :"<<endl; cout<<max<<endl; cout<<"A的特征向量为:"<<endl; for(i=0;i<n;i++) cout<<X[i]/(X[0]+X[1]+X[2])<<" ";cout<<endl;break;}else{if(k<N) {k=k+1;u=max;} else {cout<<"运行错误\n";break;}}} }程序结果为:(2)和法求矩阵最大特征值及特征向量程序为:#include<stdio.h>#include<iostream>#include<math.h> using namespace std;#define n 3 //三阶矩阵#define N 20void main(){int i,j,k;double A[n][n],w[n],M[n],u[n],W[n][n],max;cout<<"********和法求矩阵的特征根及特征向量*******"<<endl;cout<<"请输入矩阵:\n";for(i=0;i<n;i++)for(j=0;j<n;j++)cin>>A[i][j]; //输入矩阵 //计算每一列的元素和M[0]=0;M[1]=0;M[2]=0;for(i=0;i<n;i++)for(j=0;j<n;j++){M[i]+=A[j][i];}//将每一列向量归一化for(i=0;i<n;i++)for(j=0;j<n;j++){W[j][i]=A[j][i]/M[i];}//输出按列归一化之后的矩阵Wcout<<"按列归一化后的矩阵为:"<<endl;for(i=0;i<n;i++)for(j=0;j<n;j++){cout<<W[i][j]<<" ";if(j==2)cout<<endl;} //求特征向量w[0]=0;w[1]=0;w[2]=0;for(i=0;i<n;i++)for(j=0;j<n;j++){w[i]+=W[i][j];}cout<<"特征向量为:"<<endl; for(i=0;i<n;i++){u[i]=w[i]/(w[0]+w[1]+w[2]);cout<<u[i]<<" "<<endl;}//求最大特征值max=0;for(i=0;i<n;i++){w[i] = 0;for(j=0;j<n;j++){w[i] += A[i][j]*u[j];}}for(i = 0;i < n;i++){max += w[i]/u[i];}cout<<"最大特征根为:"<<endl;cout<<max/n<<endl; }运行结果为:(3)根法求矩阵最大特征值及特征向量:程序为:#include<stdio.h>#include<iostream>#include<math.h>using namespace std;#define n 3 //三阶矩阵#define N 20void main(){int i,j;double A[n][n],w[n],M[n],u[n],W[n][n],max;cout<<"********根法求矩阵的特征根及特征向量*******"<<endl; cout<<"请输入矩阵:\n";for(i=0;i<n;i++)for(j=0;j<n;j++)cin>>A[i][j]; //输入矩阵//计算每一列的元素和M[0]=0;M[1]=0;M[2]=0;for(i=0;i<n;i++)for(j=0;j<n;j++){M[i]+=A[j][i];}//将每一列向量归一化for(i=0;i<n;i++)for(j=0;j<n;j++){W[j][i]=A[j][i]/M[i];}//输出按列归一化之后的矩阵Wcout<<"按列归一化后的矩阵为:"<<endl;for(i=0;i<n;i++)for(j=0;j<n;j++){cout<<W[i][j]<<" ";if(j==2)cout<<endl;}//求特征向量//w[0]=A[0][0];w[1]=A[0][1];w[2]=A[0][2];w[0]=1;w[1]=1;w[2]=1;for(i=0;i<n;i++){for(j=0;j<n;j++){w[i]=w[i]*W[i][j];}w[i]=pow(w[i], 1.0/3);}cout<<"特征向量为:"<<endl;for(i=0;i<n;i++){u[i]=w[i]/(w[0]+w[1]+w[2]);cout<<u[i]<<" "<<endl;}//求最大特征值max=0;for(i=0;i<n;i++){w[i] = 0;for(j=0;j<n;j++){w[i] += A[i][j]*u[j];}}for(i = 0;i < n;i++){max += w[i]/u[i];}cout<<"最大特征值为:"<<endl; cout<<max/n;}运行结果为:2、编程验证n阶随机性一致性指标RI:运行结果:3、考虑景色、费用、居住、饮食、旅途五项准则,从桂林、黄山、北戴河三个旅游景点选择最佳的旅游地。
特征值和特征向量计算的数值方法

特征值和特征向量计算的数值方法在数学和计算机科学领域中,特征值和特征向量是非常重要的概念。
特征值和特征向量的计算有许多不同的数值方法,本文将介绍其中一些常见的数值方法,并分析它们的优劣和适用范围。
一、特征值和特征向量的定义在矩阵理论中,给定一个n×n的矩阵A,如果存在一个非零向量v和一个标量λ,使得Av=λv,那么称v为矩阵A的特征向量,λ为矩阵A的特征值。
特征值和特征向量的计算可以帮助我们理解矩阵的性质以及解决一些实际问题。
二、幂法幂法是计算特征值和特征向量的常用数值方法之一。
幂法的基本思想是通过多次迭代,逐渐逼近矩阵的特征值和特征向量。
具体操作如下:1. 初始化一个非零向量b0;2. 进行迭代计算:bi+1 = A * bi / ||A * bi||;3. 取出近似特征向量的最后一列:v = bn;4. 进行迭代计算特征值:λ = (Av)T * v / (vT * v)。
幂法的主要优点是简单易懂,且只需要进行矩阵向量乘法和内积计算。
然而,幂法仅能求取具有最大特征值的特征向量,而且对于存在多个特征值相等的情况并不适用。
三、反幂法反幂法是幂法的一种改进方法,用于求取矩阵A的最小特征值和对应的特征向量。
反幂法的基本步骤如下:1. 初始化一个非零向量b0;2. 进行迭代计算:bi+1 = (A - μI)^-1 * bi / ||(A - μI)^-1 * bi||;3. 取出近似特征向量的最后一列:v = bn;4. 进行迭代计算特征值:λ = (Av)T * v / (vT * v)。
反幂法的改进之处在于引入了矩阵的逆运算,通过使用矩阵A减去一个合适的常数μ乘以单位矩阵来实现。
反幂法适用于矩阵A的特征值接近于μ的情况。
四、QR方法QR方法也是一种常用的特征值计算方法,它适用于求解所有特征值以及对应的特征向量。
QR方法的基本思想是将一个矩阵分解为正交矩阵Q和上三角矩阵R的乘积,然后迭代地将矩阵A转化为更接近上三角形的形式。
特征值与特征向量矩阵特征值与特征向量的求解方法

特征值与特征向量矩阵特征值与特征向量的求解方法特征值和特征向量是线性代数中重要的概念,广泛应用于许多领域,如物理学、工程学和计算机科学等。
在本文中,我们将探讨特征值和特征向量的定义、求解方法及其在实际问题中的应用。
一、特征值与特征向量的定义特征值是一个矩阵所具有的与矩阵的线性变换性质有关的一个数值,特征向量是对应于特征值的非零向量。
对于一个n阶矩阵A,如果存在一个非零向量x和一个数λ,使得满足Ax=λx,那么λ就是矩阵A的一个特征值,x是对应于特征值λ的特征向量。
二、求解特征值与特征向量的方法有几种方法可以求解特征值和特征向量,其中比较常用的是特征多项式法和迭代法。
1. 特征多项式法特征多项式法是通过求解特征方程的根来得到特征值。
对于一个n阶矩阵A,其特征多项式定义为det(A-λI)=0,其中I是n阶单位矩阵,det表示行列式运算。
将特征多项式置为零,可以得到n个特征值λ1,λ2,...,λn。
将每个特征值代入原矩阵A-λI,解线性方程组(A-λI)x=0,就可以得到对应的特征向量。
2. 迭代法迭代法是通过不断迭代矩阵的特征向量逼近实际的特征向量。
常用的迭代方法包括幂法、反幂法和Rayleigh商迭代法。
幂法是通过不断迭代向量Ax的归一化来逼近特征向量,其基本原理是向量Ax趋近于特征向量。
反幂法是幂法的反向操作,通过求解(A-λI)y=x逼近特征向量y。
Rayleigh商迭代法是通过求解Rayleigh商的最大值来逼近特征向量,其中Rayleigh商定义为R(x)=x^T Ax/(x^T x),迭代公式为x(k+1)=(A-λ(k)I)^(-1)x(k),其中λ(k)为Rayleigh商的最大值。
三、特征值与特征向量的应用特征值与特征向量在实际问题中有广泛的应用。
其中,特征值可以用于判断矩阵是否可逆,当且仅当矩阵的所有特征值均不为零时,矩阵可逆。
特征向量可用于描述矩阵的稳定性和振动状态,如在结构工程中可以通过求解特征值和特征向量来分析物体的固有频率和振动模态。
求特征值和特征向量

求特征值和特征向量求特征值和特征向量是线性代数中的重要概念和操作。
在很多数学和工程问题中,需要通过求解特征值和特征向量来解决一系列相关的问题。
本文将详细介绍特征值和特征向量的定义、性质以及求解方法。
首先,我们来定义特征值和特征向量。
设A是一个n阶方阵。
如果存在一个非零向量x,使得Ax等于x的常数倍,即Ax=λx,其中λ是一个常数,那么我们称λ为矩阵A的一个特征值,x称为对应于特征值λ的特征向量。
特别地,如果λ是A的特征值,那么满足(A-λI)x=0的非零向量x称为属于特征值λ的零空间。
特征值和特征向量是矩阵A的一个固有性质,对于不同的特征值,对应的特征向量也是不同的。
接下来,我们来讨论特征值和特征向量的性质。
首先,特征值和特征向量一般是成对出现的,即对于矩阵A的一个特征值λ,一定存在对应的特征向量x。
特征向量的长度不影响其特征性质,即如果x 是特征向量,那么kx也是特征向量,其中k是一个非零常数。
特征值和特征向量具有重要的几何意义,特征向量决定了矩阵A的变换方向,特征值表示特定方向上的伸缩比例。
然后,我们来介绍求解特征值和特征向量的方法。
求解特征值和特征向量的常用方法有直接解特征方程和迭代法。
对于一个n阶矩阵A,要求解其特征值和特征向量,可以通过解特征方程det(A-λI)=0来得到特征值λ的值,其中I是n阶单位矩阵。
通过特征值,我们可以求出对应的特征向量。
特征向量的求解可以通过向量空间的方法,即解方程组(A-λI)x=0。
在实际计算中,我们可以利用数值计算软件来求解特征值和特征向量。
另外,对于特征值和特征向量的求解也可以通过迭代法来实现。
迭代法是一种基于数值计算的方法,通过迭代计算逼近矩阵的特征值和特征向量。
常见的迭代法有幂法、反幂法和QR方法。
幂法是一种基于逼近特征值和特征向量的迭代过程,通过不断迭代计算可以得到特征值和特征向量的逼近值。
反幂法和幂法类似,只是在每次迭代中求解矩阵的逆。
QR方法是一种通过矩阵的QR分解来求解特征值和特征向量的方法。
数学建模实验答案离散模型

实验09离散模型(2学时)(第8章离散模型)1. 层次分析模型(验证,编程)正互反阵最大特征根和特征向量的实用算法p263~264已知正互反阵注:[263]定理2 n阶正互反阵A的最大特征根≥n。
★(1) 用MATLAB函数求A的最大特征根和特征向量。
A为n×n正互反矩阵,算法步骤如下:a. 任取n 维非负归一化初始列向量(分量之和为1)(0)w ;b. 计算(1)(),0,1,2,k k wAw k +==%L ; c. (1)k w +%归一化,即令(1)(1)(1)1k k n k ii ww w+++==∑%%; d. 对于预先给定的精度ε,当(1)()||(1,2,,)k k i i w w i n ε+-<=L 时,(1)k w +即为所求的特征向量;否则返回到步骤b ;e. 计算最大特征根(1)()11k n i k i i w n w λ+==∑%。
注:☆(2) 用幂法函数求A 的最大特征根和特征向量。
A 为n×n 正互反矩阵,算法步骤如下:a. 将A 的每一列向量归一化得∑==n i ijij ij a a w 1~;b. 对ijw ~按行求和得∑==nj ij i w w 1~~; c. 将i w ~归一化T n n i i i i w w w w ww w ),,,(,~~211Λ==∑=即为近似特征向量;d. 计算∑==n i ii w Aw n 1)(1λ,作为最大特征根的近似值。
☆(3) 用和法函数求A 的最大特征根和特征向量。
根法(见[264])A 为n×n 正互反矩阵,算法步骤如下:a. 将A 的每一列向量归一化得∑==n i ijij ij a a w 1~; b. 对ijw ~按行求积并开n 次方得∏==n j nij i w w 11)~(~; c. 将i w ~归一化T n n i ii i w w w w w w w ),,,(,~~211Λ==∑=即为近似特征向量;d. 计算∑==n i ii w Aw n 1)(1λ,作为最大特征根的近似值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数学建模作业
计算机学院信计1102班姜圣涛
(1)幂法求矩阵最大特征值及特征向量:
程序为:
#include<iostream>
#include<math.h>
using namespace std;
#define n 3 //三阶矩阵
#define N 20
#define err 0.0001
//幂法求特征值特征向量
void main(){
cout<<"**********幂法求矩阵最大特征值及特征向量***********"<<endl; int i,j,k;
double A[n][n],X[n],u,y[n],max;
cout<<"请输入矩阵:\n";
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>A[i][j]; //输入矩阵
cout<<"请输入初始向量:\n";
for(i=0;i<n;i++)
cin>>X[i]; //输入初始向量
k=1;
u=0;
while(1){
max=X[0];
for(i=0;i<n;i++)
{
if(max<X[i]) max=X[i]; //选择最大值 }
for(i=0;i<n;i++)
y[i]=X[i]/max;
for(i=0;i<n;i++)
{
X[i]=0;
for(j=0;j<n;j++)
X[i]+=A[i][j]*y[j]; //矩阵相乘}
if(fabs(max-u)<err)
{
cout<<"A的特征值是 :"<<endl;
cout<<max<<endl;
cout<<"A的特征向量为:"<<endl;
for(i=0;i<n;i++)
cout<<X[i]/(X[0]+X[1]+X[2])<<" ";
cout<<endl;
break;
}
else
{
if(k<N) {k=k+1;u=max;}
else {
cout<<"运行错误\n";
break;
}
}
}
}
程序结果为:
(2)和法求矩阵最大特征值及特征向量
程序为:
#include<stdio.h>
#include<iostream>
#include<math.h>
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<<"********和法求矩阵的特征根及特征向量*******"<<endl; cout<<"请输入矩阵:\n";
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>A[i][j]; //输入矩阵
//计算每一列的元素和
M[0]=0;M[1]=0;M[2]=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
M[i]+=A[j][i];
}
//将每一列向量归一化
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
W[j][i]=A[j][i]/M[i];
}
//输出按列归一化之后的矩阵W
cout<<"按列归一化后的矩阵为:"<<endl;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
cout<<W[i][j]<<" ";
if(j==2)
cout<<endl;
}
//求特征向量
w[0]=0;w[1]=0;w[2]=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
w[i]+=W[i][j];
}
cout<<"特征向量为:"<<endl;
for(i=0;i<n;i++)
{
u[i]=w[i]/(w[0]+w[1]+w[2]); cout<<u[i]<<" "<<endl;
}
//求最大特征值
max=0;
for(i=0;i<n;i++)
{
w[i] = 0;
for(j=0;j<n;j++)
{
w[i] += A[i][j]*u[j];
}
}
for(i = 0;i < n;i++)
{
max += w[i]/u[i];
}
cout<<"最大特征根为:"<<endl;
cout<<max/n<<endl;
}
运行结果为:
(3)根法求矩阵最大特征值及特征向量:
程序为:
#include<stdio.h>
#include<iostream>
#include<math.h>
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<<"********根法求矩阵的特征根及特征向量*******"<<endl; cout<<"请输入矩阵:\n";
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>A[i][j]; //输入矩阵
//计算每一列的元素和
M[0]=0;M[1]=0;M[2]=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
M[i]+=A[j][i];
}
//将每一列向量归一化
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
W[j][i]=A[j][i]/M[i];
}
//输出按列归一化之后的矩阵W
cout<<"按列归一化后的矩阵为:"<<endl;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
cout<<W[i][j]<<" ";
if(j==2)
cout<<endl;
}
//求特征向量
//w[0]=A[0][0];w[1]=A[0][1];w[2]=A[0][2]; w[0]=1;w[1]=1;w[2]=1;
for(i=0;i<n;i++) {
for(j=0;j<n;j++)
{
w[i]=w[i]*W[i][j];
}
w[i]=pow(w[i], 1.0/3);
}
cout<<"特征向量为:"<<endl;
for(i=0;i<n;i++)
{
u[i]=w[i]/(w[0]+w[1]+w[2]); cout<<u[i]<<" "<<endl;
}
//求最大特征值
max=0;
for(i=0;i<n;i++)
{
w[i] = 0;
for(j=0;j<n;j++)
{
w[i] += A[i][j]*u[j];
}
}
for(i = 0;i < n;i++)
{
max += w[i]/u[i];
}
cout<<"最大特征值为:"<<endl; cout<<max/n;
}
运行结果为:。