幂法求矩阵A按模最大的特征值及其特征向量
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数值分析
幂法求矩阵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 0
⎩
⎨⎧0
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
0 α)(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||1n i i =<λλ
),,,2(0)(lim 1n i k i k ==∞→λλ111
lim x v k k
k
αλ=∞
→。
11x
α
幂法- C语言程序
#include
#include
void LOOP(float a[20][20],float u[20],int); //矩阵最高阶数是20,可以更改最高阶数float MAX(float u[20],int);
void main(void)
{
float a[20][20],u[20],x[20],y,z;
int i,j,n;
printf("请输入方阵阶数:\n");
scanf("%d",&n);
printf("请按行输入各矩阵元素值:");
for(i=0;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
{
scanf("%f",&a[i][j]);
}
}
printf("请输入初次迭代向量:");
for(i=0;i<=n-1;i++)
{
scanf("%f",&u[i]);
}
y=MAX(u,n);
do
{
z=y;
LOOP(a,u,n);
y=MAX(u,n);
for(i=0;i<=n-1;i++)
{
x[i]=u[i]/y;
u[i]=x[i];
}
}
while(fabs(z-y)>=0.0000005);
printf("矩阵特征值λ=%f\n",y);
printf("矩阵特征向量x:\n");
for(i=0;i<=n-1;i++)
{
printf("%10f\n",x[i]);
}
}
void LOOP(float a[20][20],float u[20],int n) {
float S,U[20];
int i,j;
for(i=0;i<=n-1;i++)
{
U[i]=u[i];
}
for(i=0;i<=n-1;i++)