数值分析大作业幂法反幂法特征值

数值分析大作业幂法反幂法特征值
数值分析大作业幂法反幂法特征值

《数值分析B 》大作业一

一. 算法设计方案:

先把带状线性矩阵A[501][501]转存为一个矩阵c[5][501].

1.1 λ1和λ501计算

1、判断λλ1501≠

首先使用幂法迭代求出矩阵的按模最大的特征值

0λ:若00>λ,则其必为max λ;于是可知max 501λλ=,接下来使用幂法迭代求出矩阵I A m ax λ-的按模最大的特征值:由矩阵理论可知I A max λ-的特征值按从小到大排列应为max 1λλ-、m ax 2λλ-、……、0。因此I A m ax λ-的按模最大的特征值应为m ax 1λλ-。又因为501max λλ=的值已求得,由此可求出1λ。

1.2

s λ的计算 s λ为矩阵A 按模最小的特征值,可以通过反幂法求得。

1.3 ik

λ的计算 ik λ可以对矩阵A 进行ik λ平移后,再用反幂法求出按模最小的特征值

λmin ,ik λ=

ik λ+λmin 。 1()||2n cond A λ

λ=,其中1λ和n λ分别是矩阵A 的模最大和最小特征值。 1.4det()A 的计算

矩阵A 的行列式可先对矩阵A 进行LU 分解后,det()A 等于U 所有对角线上元素的乘积。

二. 源程序

#include

#include

#include

#include

#include

#include

/*****************全局变量、函数声明*************/

#define N 501

#define EPSI 1.0e-12

#define r 2

#define s 2

double c[5][N]; /*A非零元素的压缩存储矩阵*/

double fuzhi(); /*对A赋值函数*/

void LUDet(); /*利用LU分解求解矩阵A的行列式*/

int int_max2(int a,int b); /*求两个数字中最大值的*/

int int_min2(int a,int b); /*求两个数字中最小值的*/

int int_max3(int a,int b,int c);/*求三个数字中最大值的*/

double mifa(); /*幂法计算矩阵A按模最大的特征值*/ double fmifa(); /*反幂法求矩阵A按模最大的特征值*/

//*主程序*//

void main()

{int i;

/*利用幂法计算矩阵A的最大特征值和最小特征值*/

double a1,a2;

fuzhi();

a1=mifa();

if (a1<0)

cout<<"矩阵A最小的特征值lambda1:"<

else if(a1>=0)

cout<<"矩阵A最大的特征值lambda501:"<

cout<

setprecision(12)<

for(i=0;i

for(i=0;i

c[2][i]=c[2][i]-a1;

a2=mifa()+a1;

if (a2<0)

cout<<"矩阵A最小的特征值lambda1:"<

else if(a2>=0)

cout<<"矩阵A最大的特征值lambda501:"<

cout<

setprecision(12)<

/*利用反幂法计算矩阵A的按模最小特征值*/

double a3;

fuzhi();

a3=fmifa();

cout<<"矩阵A按模最小的特征值lambdas:"<

cout<

setprecision(12)<

/*计算最接近特征值*/

fuzhi();

double u[39]={0};

cout<<"与数uk最接近的特征值:"<

for(i=0;i<39;i++)

{

u[i]=a1+(i+1)*(a2-a1)/40;

c[2][i]=c[2][i]-u[i];

u[i]=fmifa()+u[i];

cout<<"lambda"<<

"[ik]"<<"("<

cout<

}

/*计算矩阵A的条件数,取2范数*/

double cond_A;

if(a1>0)

cond_A=fabs(a1/a3);

else if(a1<0)

cond_A=fabs(a2/a3);

cout<<"矩阵A的条件数:"<

cout<

setprecision(12)<

/*利用LU分解计算矩阵A的行列式*/

double det=1.0;

fuzhi();

LUDet(); //对矩阵A作LU分解

for(i=0;i

det*=c[2][i];

cout<<"矩阵A的行列式值:"<

cout<

}

int int_max2(int a,int b)

{

return(a>b?a:b); /*求两个数字中最大值的子程序*/ }

int int_min2(int a,int b)

{

return(a

}

int int_max3(int a,int b,int c)

{ int t;

if(a>b)

t=a; /*求三个数字中最大值的子程序*/ else t=b;

if(t

return(t);

}

/*幂法求最大特征值*/

double mifa()

{

double u[N],unitu[N];

double sum,lengthu,beta,temp;

int i,j;

beta=0.0;

for(i=0;i

u[i]=0.5; /*迭代初始向量*/

do

{

temp=beta;

sum=0;

for(i=0;i

sum=sum+u[i]*u[i];

lengthu=sqrt(sum);

for(i=0;i

unitu[i]=u[i]/lengthu;

for(i=1;i<=N;i++)

{

sum=0;

for(j=int_max2(i-2,1);j<=int_min2(i+2,N);j++)

sum=sum+c[i-j+2][j-1]*unitu[j-1];

u[i-1]=sum;

}

sum=0;

for(i=0;i

sum=sum+unitu[i]*u[i];

beta=sum;

}while(fabs(beta-temp)>=EPSI);

return(beta);

}

/*反幂法求最小特征值*/

double fmifa()

{

double u[N],unitu[N],unitu_u[N];

double sum,lengthu,beta,temp;

int i,j;

beta=0.0;

for(i=0;i

u[i]=0.5; /*迭代初始向量*/ do

{

fuzhi();

temp=beta;

sum=0;

for(i=0;i

sum=sum+u[i]*u[i];

lengthu=sqrt(sum);

for(i=0;i

{

unitu[i]=u[i]/lengthu;

unitu_u[i]=unitu[i];

}

LUDet();

for(i=2;i<=N;i++)

{

sum=0;

for(j=int_max2(i-2,1);j<=i-1;j++)

sum+=c[i-j+2][j-1]*unitu_u[j-1];

unitu_u[i-1]-=sum;

}

u[N-1]=unitu_u[N-1]/c[2][N-1];

for(i=N-1;i>=1;i--)

{

sum=0;

for(j=i+1;j<=int_min2(i+2,N);j++)

sum+=c[i-j+2][j-1]*u[j-1];

u[i-1]=(unitu_u[i-1]-sum)/c[2][i-1];

}

sum=0;

for(i=0;i

sum=sum+unitu[i]*u[i];

beta=sum;

}while(fabs(beta-temp)>=EPSI);

beta=1/beta;

return(beta);

}

double fuzhi()

{

int i,j;

for(i=0;i<5;i++)

for(j=0;j

{

if(i==0||i==4)

{

c[i][j]=-0.064;

}

else if (i==1||i==3)

{

c[i][j]=0.16;

}

else if(i==2)

{

c[i][j]=(1.64-0.024*(j+1))*sin(0.2*(j+1))

-0.64*exp(0.1/(j+1));

}

}

return(c[i][j]);

}

/*LU三角分解*/

void LUDet()

{

double sum;

int k,i,j;

for(k=1;k<=N;k++)

{ for(j=k;j<=int_min2(k+s,N);j++)

{

sum=0;

for(i=int_max3(1,k-r,j-s);i<=k-1;i++)

sum+=c[k-i+s][i-1]*c[i-j+s][j-1];

c[k-j+s][j-1]-=sum;

}

for(j=k+1;j<=int_min2(k+r,N);j++)

{

sum=0;

for(i=int_max3(1,j-r,k-s);i<=k-1;i++)

sum+=c[j-i+s][i-1]*c[i-k+s][k-1];

c[j-k+s][k-1]=(c[j-k+s][k-1]-sum)/c[s][k-1];

}

}

}

三.程序结果:

四.分析初始向量选择对计算结果的影响

矩阵的初始向量选择,对结果的影响很大,选择不同的初始向量可能会得到不同阶的特征值。以幂法为例(反幂法原理相同),常见的初始向量选择有两种:

1、u[i]=1;(i=1,2,3...n)

2、u=0,u[i]=1(i为1-n任意整数)

若选择第1种初始向量,得到的λ1为:

若选择第2种初始向量,得到的λ1为:(i=0时)

幂法,反幂法求解矩阵最大最小特征值及其对应的特征向量

数值计算解矩阵的按模最大最小特征值及对应的特征向量 —一 .幂法 1. 幕法简介: 当矩阵A 满足一定条件时,在工程中可用幕法计算其主特征值 (按模最大) 及其特征向量。矩阵A 需要满足的条件为: ⑴I 1 I I 2|n |- 0, i 为A 的特征值 (2)存在n 个线性无关的特征向量,设为 X i ,X 2,…,X n 1.1计算过程: n 对任意向量x (0),有x (0)八:-M —不全为0,则有 i 4 X (k 岀)=Ax (k)= = A k 岀乂。) n n A k 1 aq a 扌1 5 i =1 i =1 ■k 1 2 可见,当 1 — 1 越小时,收敛越快;且当k 充分大时,有 ? "1 2算法实现 ⑶.计算x Ay,… max(x); ⑷若| ?一十:;,输出-,y,否则,转(5) (5)若N ,置k 「k 1^ -,转3,否则输出失败信息,停机. 3 matlab 程序代码 (冲1 %叫 x (k 1) [x (k) k 二 u x (k) > (k+1) 1,对应的特征向量即是 x (1).输入矩阵A ,初始向量X ,误差限 最大迭代次数N (k) 0; y (k) max(abs(x (k ))

k=1; z=0; y=x0./max(abs(x0)); x=A*y; % z相当于■ %规范化初始向量%迭代格式 b=max(x); % b相当于: if abs(z-b)eps && k> y]=lpower (A, xO, eps, X)

北航数值分析大作业第一题幂法与反幂法

《数值分析》计算实习题目 第一题: 1. 算法设计方案 (1)1λ,501λ和s λ的值。 1)首先通过幂法求出按模最大的特征值λt1,然后根据λt1进行原点平移求出另一特征值λt2,比较两值大小,数值小的为所求最小特征值λ1,数值大的为是所求最大特征值λ501。 2)使用反幂法求λs ,其中需要解线性方程组。因为A 为带状线性方程组,此处采用LU 分解法解带状方程组。 (2)与140k λλμλ-5011=+k 最接近的特征值λik 。 通过带有原点平移的反幂法求出与数k μ最接近的特征值 λik 。 (3)2cond(A)和det A 。 1)1=n λλ2cond(A),其中1λ和n λ分别是按模最大和最小特征值。 2)利用步骤(1)中分解矩阵A 得出的LU 矩阵,L 为单位下三角阵,U 为上三角阵,其中U 矩阵的主对角线元素之积即为det A 。 由于A 的元素零元素较多,为节省储存量,将A 的元素存为6×501的数组中,程序中采用get_an_element()函数来从小数组中取出A 中的元素。 2.全部源程序 #include #include void init_a();//初始化A double get_an_element(int,int);//取A 中的元素函数 double powermethod(double);//原点平移的幂法 double inversepowermethod(double);//原点平移的反幂法 int presolve(double);//三角LU 分解 int solve(double [],double []);//解方程组 int max(int,int); int min(int,int); double (*u)[502]=new double[502][502];//上三角U 数组 double (*l)[502]=new double[502][502];//单位下三角L 数组 double a[6][502];//矩阵A int main() { int i,k; double lambdat1,lambdat2,lambda1,lambda501,lambdas,mu[40],det;

实验6反幂法求矩阵按模最小特征值

西华数学与计算机学院上机实践报告 课程名称:计算方法A 年级:2010级 上机实践成绩: 指导教师:严常龙 姓名:李国强 上机实践名称:反幂法求矩阵按模最小特征值 学号:362011********* 上机实践日期:2013.12.18 上机实践编号:6 上机实践时间:14:00 一、目的 1.通过本实验加深对反幂法的构造过程的理解; 2.能对反幂法提出正确的算法描述编程实现,得到计算结果。 二、内容与设计思想 自选方阵,用反幂法求解其按模最小特征值。 可使用实例: ????? ??---=90688465441356133A 三、使用环境 操作系统:Win 8 软件平台:Visual C++ 6.0 四、核心代码及调试过程 #include #include #define MAX_N 20 //矩阵最大维数 #define MAXREPT 100 #define epsilon 0.00001 //求解精度 int main() { int n; int i,j,k; double xmax,oxmax; static double a[MAX_N][MAX_N]; static double l[MAX_N][MAX_N],u[MAX_N][MAX_N]; static double x[MAX_N],nx[MAX_N]; printf("\n 请输入矩阵阶数n:"); //输入矩阵维数 scanf("%d",&n); if(n>MAX_N)

{ printf("the input n is larger than MAX_N,please redefine the MAX_N.\n"); return 1; } if(n<=0) { printf("please input a number between 1 and %d.\n",MAX_N); return 1; } //输入A矩阵 printf("请输入矩阵的值a[i][j] i,j=0...%d;\n",n-1); for(i=0;ixmax) xmax=fabs(nx[j]); for(j=0;j

实验8 反幂法

《数值分析》实验8 一.实验名称:反幂法 二、实验目的: (1) 掌握求矩阵按模最小特征值及其对应的特征向量的规范化反幂法; (2) 掌握原点移位法。 三、实验要求 (1) 按照题目要求完成实验内容 (2) 写出相应的实验原理与C 语言程序 (3) 给出实验结果,结果分析 (4) 写出相应的实验报告 四、实验题目: 用反幂法求以下矩阵的指定特征值及其特征向量(迭代终止误差为1e-3): 41411014110?? ? ? ??? 接近2的特征值及其特征向量. 程序: #include #include int main(){ int n = 3, i, k, j, max_k = 1000; double y[max_k][n], x[max_k][n], max_x[max_k], z[n], u[n][n], l[n][n], t, err = 1e-5, norm_dx = 1,tt=12;//norm_dx:dx 的一范数,tt:为了求接近tt 的特征值, for (i = 0; i < n; i++) for (j = 0; j < n; j++){ u[i][j] = 0; (j == i) ? (l[i][j] = 1) : (l[i][j] = 0); } double a[][3] = { 4, 1, 4, 1, 10, 1, 4, 1, 10 }; for (i = 0; i < n; i++) { a[i][i]-=tt; x[0][i] = 1; } for (i = 0; i < n; i++){ for (k = i; k < n; k++){ t = 0; for (j = 0; j < i; j++) t += l[i][j] * u[j][k];

幂法求矩阵主特征值

!程序说明:幂法求矩阵主特征值 !日期:2010年11月30日 PROGRAM Matrix_EigenValue PARAMETER(N=3) REAL ARR(N,N) CALL INPUT(ARR,N) CALL MATEV(ARR,N) END PROGRAM SUBROUTINE INPUT(ARR,N) REAL ARR(N,N) OPEN(1,FILE='MAT.TXT') READ(1,*)((ARR(I,J),J=1,N),I=1,N) END SUBROUTINE SUBROUTINE MATEV(ARR,N) PARAMETER(EPS=1E-7) REAL :: ARR(N,N),X(N),X1(N),MAX=0 INTEGER :: K=0,P=0 X=RESHAPE((/1,1,1/),(/3/)) WRITE(1,*) ' 迭代次数 U(规范化向量) & & MAX(V)(主特征值)' DO WHILE(P/=N) WRITE(1,'(I6,A,F12.6,A,F12.6)') K,' (',X,' )',MAX P=0 MAX=0 DO I=1,N X1(I)=0 DO J=1,N X1(I)=X1(I)+ARR(I,J)*X(J) !迭代过程 ENDDO ENDDO DO I=1,N IF(ABS(X1(I))>ABS(MAX)) MAX=X1(I) !选取主特征值 ENDDO DO I=1,N IF(ABS(X(I)-X1(I)/MAX)

ENDDO K=K+1 ENDDO END SUBROUTINE 输出结果: 1 1 0.5 1 1 0.25 0.5 0.25 2 迭代次数 U(规范化向量) MAX(V)(主特征值) 0 ( 1.000000 1.000000 1.000000 ) 0.000000 1 ( 0.909091 0.81818 2 1.000000 ) 2.750000 2 ( 0.837607 0.743590 1.000000 ) 2.659091 3 ( 0.799016 0.703035 1.000000 ) 2.604701 4 ( 0.77741 5 0.680338 1.000000 ) 2.575267 5 ( 0.765108 0.66740 6 1.000000 ) 2.558792 6 ( 0.758025 0.659963 1.000000 ) 2.549406 7 ( 0.753925 0.655655 1.000000 ) 2.544003 8 ( 0.751544 0.653153 1.000000 ) 2.540876 9 ( 0.750158 0.651697 1.000000 ) 2.539060 10 ( 0.749351 0.650848 1.000000 ) 2.538003 11 ( 0.748880 0.650354 1.000000 ) 2.537387 12 ( 0.748606 0.650065 1.000000 ) 2.537028 13 ( 0.748445 0.649897 1.000000 ) 2.536819 14 ( 0.748352 0.649799 1.000000 ) 2.536697 15 ( 0.748298 0.649741 1.000000 ) 2.536626 16 ( 0.748266 0.649708 1.000000 ) 2.536584 17 ( 0.748247 0.649688 1.000000 ) 2.536560 18 ( 0.748236 0.649677 1.000000 ) 2.536546 19 ( 0.748230 0.649670 1.000000 ) 2.536537 20 ( 0.748226 0.649667 1.000000 ) 2.536533 21 ( 0.748224 0.649664 1.000000 ) 2.536530 22 ( 0.748223 0.649663 1.000000 ) 2.536528 23 ( 0.748222 0.649662 1.000000 ) 2.536527 24 ( 0.748222 0.649662 1.000000 ) 2.536527 25 ( 0.748222 0.649662 1.000000 ) 2.536526 26 ( 0.748221 0.649661 1.000000 ) 2.536526

数值分析之幂法及反幂法C语言程序实例

数值分析之幂法及反幂法C 语言程序实例 1、算法设计方案: ①求1λ、501λ和s λ的值: s λ:s λ表示矩阵的按模最小特征值,为求得s λ直接对待求矩阵A 应用反幂法即可。 1λ、501λ:已知矩阵A 的特征值满足关系 1n λλ<< ,要求1λ、及501λ时,可 按如下方法求解: a . 对矩阵A 用幂法,求得按模最大的特征值1m λ。 b . 按平移量1m λ对矩阵A 进行原点平移得矩阵1m B A I λ=+,对矩阵B 用反幂法 求得B 的按模最小特征值2m λ。 c . 321m m m λλλ=- 则:113min(,)m m λλλ=,13max(,)n m m λλλ=即为所求。 ②求和A 的与数5011 140 k k λλμλ-=+最接近的特征值 ik λ(k=0,1,…39): 求矩阵A 的特征值中与k μ最接近的特征值的大小,采用原点平移的方法: 先求矩阵 B=A-k μI 对应的按模最小特征值k β,则k β+k μ即为矩阵A 与k μ最接近的特征值。 重复以上过程39次即可求得ik λ(k=0,1,…39)的值。 ③求A 的(谱范数)条件数2cond()A 和行列式det A : 在(1)中用反幂法求矩阵A 的按模最小特征值时,要用到Doolittle 分解方法,在Doolittle 分解完成后得到的两个矩阵分别为L 和U ,则A 的行列式可由U 阵求出,即:det(A)=det(U)。 求得det(A)不为0,因此A 为非奇异的实对称矩阵,则: max 2()s cond A λλ= ,max λ和s λ分别为模最大特征值与模最小特征值。

幂法求矩阵A按模最大的特征值及其特征向量

数值分析 幂法求矩阵A按模最大的特征值及其 特征向量

幂法的主要思想 设 n n ij R a A ?∈=)( ,其特征值为i λ ,对应特征向量为),,,1(n i x i =即 i i i x Ax λ= ),,1(n i =,且 x 1,······,x n 线性无关。求矩阵A 的主特征值及对应的特征向量。 幂法的基本思想: 任取一个非零初始向量 v 0 ∈R n 且v 0≠0, 由矩阵A 的乘幂构造一向量序列: 称{ v k }为迭代向量, A 特征值中 λ1为强占优,即▕ λ1▕>▏λ2 ▏>······>▏λn ▏, {x 1,x 2,······,x n }线性无关,即{x 1,x 2,······,x n }为R n 中的一 个基,于是对任意的初始向量v 0 ∈R n 且 v 0≠0有展开式。 (v 0 用{x i } 的线性组合表示) (且设01≠α) 则 当k =2,3,… 时,v k = A v k-1 = A k v ? ?? 1Av v =0 212v A Av v ==01 1 v A Av v k k k ++==) ,,1,0(n k =∑==n i i i x v 1 α)(221101n n x x x A v A v ααα+++==n n x A x A x A ααα+++=2211n n n x x x λαλαλα+++=222111) (111 +≡x k αλk ε

其中 由假设▕ λ1▕>▏λ2 ▏>······>▏λn ▏,得 ,从而 即,0lim =∞→k k ε且收敛速度由比值||12λλ=r 确定。 所以有 说明,当k 充分大时,有1 11 x v k k αλ≈,或 k k v 1λ 越来越接近特征 向量 规范化幂法的算法 ①输入矩阵 A 、初始向量v (0),误差 eps ,实用中一般取 v (0)=(1,1,···,1)T ; ②k ←1; ③计算 v (k) ←Au (k-1); ④m k ←max{ v (k) },m k-1 ←{ v (k-1) }; ⑤u (k) ←v (k)/ m k ; ⑥如果▕ m k - m k-1▕<eps ,则显示特征值λ1←和对应的特征 向量x (1),终止; ⑦k=k+1,转③。 n k n n k k x x )()(1 2122λλαλλαε++=),,2(1||1 n i i =<λλ ),,,2(0)(lim 1n i k i k ==∞→λλ111 lim x v k k k αλ=∞ →。 11x α

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

数学建模作业 计算机学院信计1102班姜圣涛 (1)幂法求矩阵最大特征值及特征向量: 程序为: #include #include using namespace std; #define n 3 //三阶矩阵 #define N 20 #define err 0.0001 //幂法求特征值特征向量 void main(){ cout<<"**********幂法求矩阵最大特征值及特征向量***********"<>A[i][j]; //输入矩阵 cout<<"请输入初始向量:\n"; for(i=0;i>X[i]; //输入初始向量 k=1; u=0;

while(1){ max=X[0]; for(i=0;i

数值分析幂法c语言实现

1.实验目的: 1熟练掌握C 语言程序设计,编程求解问题。 2.运用幂法求解住特征值和特征向量。 2.实验内容: 例题: 用幂法求 A= ??????????0.225.05.025.00.10.15.00.10.1 的特征值和特征向量。 完整代码以及截图如下: #include "stdio.h" #include "math.h" #define M 3 void main() { float fan(),max(),e1,e2,r1,r2; void au(),ex(),print_x(),std(); static float a[M][M]={{1.0,1.0,0.5},{1.0,1.0,0.25},{0.5,0.25,2.0}}; static float u0[M],u1[M],maxn0,maxn1; int i;

printf("*********************************\n"); printf("****** 幂法*********\n"); printf("******求特征值与特征向量*********\n"); printf("*********************************\n\n"); printf("input precision e1,e2:"); scanf("%f,%f",&e1,&e2); printf("\ninput u(%d):",M); for (i=0;ie1 || r2>e2) { printf("%4d",i++); print_x(u0); printf("\n"); ex(u0,u1); } else break; } while (1); } void au(a,u0,u1) float a[][M],u0[],u1[]; { int i,j; for (i=0;i

幂法反幂法求解矩阵大小特征值及其对应的特征向量

幂法反幂法求解矩阵大小特征值及其对应的特征向量

————————————————————————————————作者:————————————————————————————————日期:

数值计算解矩阵的按模最大最小特征值及对应的特征向量 一.幂法 1. 幂法简介: 当矩阵A 满足一定条件时,在工程中可用幂法计算其主特征值(按模最大)及其特征向量。矩阵A 需要满足的条件为: (1) 的特征值为A i n λλλλ,0||...||||21 ≥≥≥> (2) 存在n 个线性无关的特征向量,设为n x x x ,...,,21 1.1计算过程: i n i i i u x x αα,1 ) 0()0(∑==,有对任意向量不全为0,则有 1 11111221 12111 1 1 11 1 011)()(...u u a u a u λu λαu αA x A Ax x k n n k n k k n i i k i i n i i i k )(k (k))(k αλλλλλα++++=+=+++≈? ? ????+++======∑∑ 可见,当||1 2 λλ越小时,收敛越快;且当k 充分大时,有1)11 11)11111λαλαλ=??????==+++(k )(k k (k k )(k x x u x u x ,对应的特征向量即是)(k x 1+。 2 算法实现 . ,, 3,,1 , ).5() 5(,,,,||).4();max(,).3() (max(;0,1).2(,).1()() () (停机否则输出失败信息转置若转否则输出若计算最大迭代次数,误差限,初始向量输入矩阵βλβεβλβλε←+←<<-←←= ←←k k N k y x Ay x x abs x y k N x A k k k 3 matlab 程序代码

数值分析幂法与反幂法-matlab程序

数值分析幂法与反幂法 matlab程序 随机产生一对称矩阵,对不同的原点位移和初值(至少取3个)分别使用幂法求计算矩阵的主特征值及主特征向量,用反幂法求计算矩阵的按模最小特征值及特征向量。 要求 1)比较不同的原点位移和初值说明收敛性 2)给出迭代结果,生成DOC文件。 3)程序清单,生成M文件。 解答: >> A=rand(5) %随机产生5*5矩阵求随机矩阵 A = 0.7094 0.1626 0.5853 0.6991 0.1493 0.7547 0.1190 0.2238 0.8909 0.2575 0.2760 0.4984 0.7513 0.9593 0.8407 0.6797 0.9597 0.2551 0.5472 0.2543 0.6551 0.3404 0.5060 0.1386 0.8143 >> B=A+A' %A矩阵和A的转置相加,得到随机对称矩阵B B = 1.4187 0.9173 0.8613 1.3788 0.8044 0.9173 0.2380 0.7222 1.8506 0.5979 0.8613 0.7222 1.5025 1.2144 1.3467 1.3788 1.8506 1.2144 1.0944 0.3929 0.8044 0.5979 1.3467 0.3929 1.6286

B=?? ????? ???? ?? ???6286.13929.03467.15979.08044 .03929.00944 .12144.18506 .13788.13467.12144.15025.17222.08613.05979.08506.17222.02380.09173.08044.03788.18613 .09173 .04187.1 编写幂法、反幂法程序: function [m,u,index,k]=pow(A,u,ep,it_max) % 求矩阵最大特征值的幂法,其中 % A 为矩阵; % ep 为精度要求,缺省为1e-5; % it_max 为最大迭代次数,缺省为100; % m 为绝对值最大的特征值; % u 为对应最大特征值的特征向量; % index ,当index=1时,迭代成功,当index=0时,迭代失败 if nargin<4 it_max=100; end if nargin<3 ep=1e-5; end n=length(A); index=0; k=0; m1=0; m0=0.01; % 修改移位参数,原点移位法加速收敛,为0时,即为幂法 I=eye(n) T=A-m0*I while k<=it_max v=T*u; [vmax,i]=max(abs(v)); m=v(i); u=v/m; if abs(m-m1)

北航数值分析1-Jacobi法计算矩阵特征值

准备工作 ?算法设计 矩阵特征值的求法有幂法、Jacobi法、QR法等,其中幂法可求得矩阵按模最大的特征值(反幂法可求得按模最小特征值),Jacobi法则可以求得对称阵的所有特征值。 分析一:由题目中所给条件λ1≤λ2≤…≤λn,可得出λ1、λn按模并不一定严格小于或大于其他特征值,且即使按模严格小于或大于其他特征值,也极有可能出现|λs|<λ1|<|λn |或|λs|<λn|<|λ1 |的情况,导致按幂法和反幂法无法求解λ1或λn二者中的一者; 分析二:题目要求求解与数μk =λ1+k(λn-λ1)/40最接近的特征值λik(k=1,2,3…39),这个问题其实可以转换为求A-μk 按模最小的特征值的问题,但因为在第一个问题中无法确定能肯定的求得λ1和λn,所以第二个问题暂先搁浅; 分析三:cond(A) 2 = ||A|| * ||A-1|| =|λ|max * |λ|min,这可以用幂法和反幂法求得,det(A) =λ1 *λ2 * … *λn,这需要求得矩阵A的所有特征值。 由以上分析可知,用幂法和反幂法无法完成所有问题的求解,而用Jacobi法求得矩阵所有特征值后可以求解题目中所给的各个问题。所以该题可以用Jacobi法求解。 ?模块设计 由 ?数据结构设计 由于矩阵是对称阵,上下带宽均为2,所以可以考虑用二维数组压缩存储矩阵上半带或下半带。但由于Jacobi法在迭代过程中会破坏矩阵的形态,所以原来为零的元素可能会变为非零,这就导致原来的二维数组无法存储迭代后的矩阵。基于此的考虑,决定采用一维数组存储整个下三角阵,以此保证迭代的正确进行。 完整代码如下(编译环境windows10 + visual studio2010):

幂法求矩阵最大特征值

幂法求矩阵最大特征值 摘要 在物理、力学和工程技术中的很多问题在数学上都归结为求矩阵特征值的问题,而在某些工程、物理问题中,通常只需要求出矩阵的最大的特征值(即主特征值)和相应的特征向量,对于解这种特征值问题,运用幂法则可以有效的解决这个问题。 幂法是一种计算实矩阵A的最大特征值的一种迭代法,它最大的优点是方法简单。对于稀疏矩阵较合适,但有时收敛速度很慢。 用java来编写算法。这个程序主要分成了三个大部分:第一部分为将矩阵转化为线性方程组;第二部分为求特征向量的极大值;第三部分为求幂法函数块。其基本流程为幂法函数块通过调用将矩阵转化为线性方程组的方法,再经过一系列的验证和迭代得到结果。 关键词:幂法;矩阵最大特征值;j ava;迭代

POWER METHOD TO CALCULATE THE MAXIMUM EIGENV ALUE MATRIX ABSTRACT In physics, mechanics and engineering technology of a lot of problems in math boil down to matrix eigenvalue problem, and in some engineering, physical problems, usually only the largest eigenvalue of the matrix (i.e., the main characteristics of the value) and the corresponding eigenvectors, the eigenvalue problem for solution, using the power law can effectively solve the problem. Power method is A kind of computing the largest eigenvalue of real matrix A of an iterative method, its biggest advantage is simple.For sparse matrix is right, but sometimes very slow convergence speed. Using Java to write algorithms.This program is mainly divided into three most: the first part for matrix can be converted to linear equations;The second part is the eigenvector of the maximum;The third part is the exponentiation method of function block.Its basic process as a power law function block by calling the method of matrix can be converted to linear equations, then after a series of validation and iteration to get the results. Key words: Power method; Matrix eigenvalue; Java; The iteration

数值方法课程设计幂法反幂法计算矩阵特征值和特征向量附Matlab程序

数值方法课程设计幂法反幂法计算矩阵特征值和特征向量附Matlab程序

矩阵的特征值与特征向量的计算 摘要 物理,力学,工程技术中的很多问题在数学上都归结于求矩阵特征值的问题,例如振动问题(桥梁的振动,机械的振动,电磁振动等)、物理学中某些临界值的确定问题以及理论物理中的一些问题。矩阵特征值的计算在矩阵计算中是一个很重要的部分,本文使用幂法和反幂法分别求矩阵的按模最大,按模最小特征向量及对应的特征值。 幂法是一种计算矩阵主特征值的一种迭代法,它最大的优点是方法简单,对于稀疏矩阵比较合适,但有时收敛速度很慢。其基本思想是任取一个非零的初始向量。由所求矩阵构造一向量序列。再经过所构造的向量序列求出特征值和特征向量。 反幂法用来计算矩阵按模最小特征向量及其特征值,及计算对应于一个给定近似特征值的特征向量。本文中主要使用反幂法计算一个矩阵的按模最小特征向量及其对应的特征值。计算矩阵按模最小特征向量的基本思想是将其转化为求逆矩阵的按模最大特征向量。然后经过这个按模最大的特征向量反推出原矩阵的按模最小特征向量。

关键词:矩阵;特征值;特征向量;冥法;反冥法 THE CALCULATIONS OF EIGENVALUE AND EIGENVECTOR OF MATRIX ABSTRACT Physics, 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

数值分析试验幂法与反幂法matlab

一、问题的描述及算法设计 (一)问题的描述 我所要做的课题是:对称矩阵的条件数的求解设计 1、求矩阵A 的二条件数 问题 A=?? ?? ? ?????----210121012 2、设计内容: 1)采用幂法求出A 的 错误!未找到引用源。. 2)采用反幂法求出A 的错误!未找到引用源。. 3)计算A 的条件数 ⅡA Ⅱ2* ⅡA -1Ⅱ2=cond2(A )=错误!未找到引用源。/错误!未找到引用源。.(精度要求为10-6) 3、设计要求 1)求出ⅡA Ⅱ2。 2)并进行一定的理论分析。 (二)算法设计 1、幂法算法 (1)取初始向量u )0((例如取u )0(=(1,1,…1)T ),置精度要求ε,置k=1. (2)计算 v )(k =Au )1(-k ,m k =max(v )(k ), u )(k = v )(k / m k (3)若| m k = m 1-k |<ε,则停止计算(m k 作为绝对值最大特征值1λ,u )(k 作为相应的特征向量)否则置k=k+1,转(2) 2、反幂法算法 (1)取初始向量u )0((例如取u )0(=(1,1,…1)T ),置精度要求ε,置k=1. (2)对A 作LU 分解,即A=LU (3)解线性方程组 Ly )(k =u )1(-k ,Uv )(k =y )(k (4)计算 m k =max(v )(k ), u )(k = v )(k / m k (5)若|m k =m 1-k |<ε,则停止计算(1/m k 作为绝对值最小特征值n λ,u )(k 作

为相应的特征向量);否则置k=k+1,转(3).

二、算法的流程图(一)幂法算法的流程图

数值方法课程设计报告幂法反幂法计算矩阵特征值和特征向量-附Matlab程序

矩阵的特征值与特征向量的计算 摘要 物理,力学,工程技术中的很多问题在数学上都归结于求矩阵特征值的问题,例如振动问题(桥梁的振动,机械的振动,电磁振动等)、物理学中某些临界值的确定问题以及理论物理中的一些问题。矩阵特征值的计算在矩阵计算中是一个很重要的部分,本文使用幂法和反幂法分别求矩阵的按模最大,按模最小特征向量及对应的特征值。 幂法是一种计算矩阵主特征值的一种迭代法,它最大的优点是方法简单,对于稀疏矩阵比较合适,但有时收敛速度很慢。其基本思想是任取一个非零的初始向量。由所求矩阵构造一向量序列。再通过所构造的向量序列求出特征值和特征向量。 反幂法用来计算矩阵按模最小特征向量及其特征值,及计算对应于一个给定近似特征值的特征向量。本文中主要使用反幂法计算一个矩阵的按模最小特征向量及其对应的特征值。计算矩阵按模最小特征向量的基本思想是将其转化为求逆矩阵的按模最大特征向量。然后通过这个按模最大的特征向量反推出原矩阵的按模最小特征向量。 关键词:矩阵;特征值;特征向量;冥法;反冥法

THE CALCULATIONS OF EIGENVALUE AND EIGENVECTOR OF MATRIX ABSTRACT Physics, 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 putation. 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

关于幂法与反幂法的研究

东北大学秦皇岛分校 数值计算课程设计报告 幂法及反幂法 学院数学与统计学院 专业信息与计算科学 学号****** 姓名*** 指导教师*** *** 成绩 教师评语: 指导教师签字: 2014年07月07日

1 绪论 1.1 课题的背景 矩阵特征值的数值算法,在科学和工程技术中很多问题在数学上都归结为矩阵的特征值问题。例如,结构的振动波形和频率可分别由适当矩阵的特征向量和特征值来决定,结构的稳定性由特征值决定;又如机械和机件的振动问题,无线电工及光学系统第电磁振荡问题和物理学中各种临界值都牵涉到特征值计算。所以说研究利用数学软件解决求特征值的问题是非常必要的。 求矩阵特征值的一种方法是从原始矩阵出发,求出其特征多项式及其根,即得到矩阵的特征值。但高次多项式求根问题尚有困难,而且重根的计算精度较低。另外,原始矩阵求特征多项式系数的过程,对舍入误差非常敏感,对最终结果影响很大。所以,从数值计算的观点来看,这种求矩阵特征值的方法不够好。 实际问题中,有时需要的并不是所有的特征根,而是最大最小的实特征根。称模最大的特征根为主特征值。解决特征值计算的算法有很多种,古老的雅可比方法、兰乔斯方法以及较为常用的幂法、QR方法。QR方法是一种变换法,可求全部的特征值;幂法和反幂法是迭代法,只求模最大与模最小的特征值及特征向量。下面主要来研究一下幂法、反幂法,利用MATLAB解决矩阵特征值问题。 幂法是一种计算矩阵主特征值(矩阵按模最大的特征值)及对应特征向量的迭代方法,特别适用于大型稀疏矩阵。反幂法是计算海森伯格阵或三对角阵的对应一个给定近似特征值的特征向量的有效方法之一。 1.2 概念的认识 对于n阶矩阵A,若存在数λ和n维向量x满足:x =,则称λ为矩阵A的特征值, Axλ x为相应的特征向量。 病态矩阵:求解方程组时对数据的小扰动很敏感的矩阵。例如希尔伯特矩阵就是一类著名的病态矩阵。本次课题不对病态矩阵做深入研究。 非亏损矩阵:矩阵存在n个线性无关的特征向量,即有一个完全的特征向量组。 2 MATLAB特征值计算工具简介 查阅MATLAB HELP可以知道,利用eig函数可以快速求解矩阵的特征值和特征向量。可利用该函数对以下所做的幂法及反幂法程序进行检验。

相关文档
最新文档