幂法求矩阵最大特征值.docx

上传人:b****8 文档编号:10769091 上传时间:2023-02-22 格式:DOCX 页数:14 大小:126.24KB
下载 相关 举报
幂法求矩阵最大特征值.docx_第1页
第1页 / 共14页
幂法求矩阵最大特征值.docx_第2页
第2页 / 共14页
幂法求矩阵最大特征值.docx_第3页
第3页 / 共14页
幂法求矩阵最大特征值.docx_第4页
第4页 / 共14页
幂法求矩阵最大特征值.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

幂法求矩阵最大特征值.docx

《幂法求矩阵最大特征值.docx》由会员分享,可在线阅读,更多相关《幂法求矩阵最大特征值.docx(14页珍藏版)》请在冰豆网上搜索。

幂法求矩阵最大特征值.docx

幂法求矩阵最大特征值

幂法求矩阵最大特征值

摘要

在物理、力学和工程技术中的很多问题在数学上都归结为求矩阵特征值的问题,而在某些工程、物理问题中,通常只需要求出矩阵的最大的特征值(即主特征值)和相应的特征向量,对于解这种特征值问题,运用幂法则可以有效的解决这个问题。

幂法是一种计算实矩阵A的最大特征值的一种迭代法,它最大的优点是方法简单。

对于稀疏矩阵较合适,但有时收敛速度很慢。

用java来编写算法。

这个程序主要分成了三个大部分:

第一部分为将矩阵转化为线性方程组;第二部分为求特征向量的极大值;第三部分为求幂法函数块。

其基本流程为幂法函数块通过调用将矩阵转化为线性方程组的方法,再经过一系列的验证和迭代得到结果。

关键词:

幂法;矩阵最大特征值;java;迭代

POWERMETHODTOCALCULATETHEMAXIMUMEIGENVALUEMATRIX

ABSTRACT

Inphysics,mechanicsandengineeringtechnologyofalotofproblemsinmathboildowntomatrixeigenvalueproblem,andinsomeengineering,physicalproblems,usuallyonlythelargesteigenvalueofthematrix(i.e.,themaincharacteristicsofthevalue)andthecorrespondingeigenvectors,theeigenvalueproblemforsolution,usingthepowerlawcaneffectivelysolvetheproblem.

PowermethodisAkindofcomputingthelargesteigenvalueofrealmatrixAofaniterativemethod,itsbiggestadvantageissimple.Forsparsematrixisright,butsometimesveryslowconvergencespeed.

UsingJavatowritealgorithms.Thisprogramismainlydividedintothreemost:

thefirstpartformatrixcanbeconvertedtolinearequations;Thesecondpartistheeigenvectorofthemaximum;Thethirdpartistheexponentiationmethodoffunctionblock.Itsbasicprocessasapowerlawfunctionblockbycallingthemethodofmatrixcanbeconvertedtolinearequations,thenafteraseriesofvalidationanditerationtogettheresults.

Keywords:

Powermethod;Matrixeigenvalue;Java;Theiteration

1幂法…………………..…………………………...............…….………………………….1

1.1幂法基本思想……………..…….…………….………………………………………1

1.2规范化………………....…………………….....…………………………………2

2概要设计………………….………………..…...…….............................3

2.1设计背景………………..…………………………………………………………..3

2.2运行流程………....................….....................………………………………………3

2.3运行环境…………..................................………….………………………..3

3程序详细设计………….......................….....…….………………..………....4

3.1第一部分:

矩阵转化为线性方程组……..………………………………………..4

3.2第二部分:

特征向量的极大值...…………………….....…...…………………….4

3.3第三部分:

求幂法函数块............….....…………...…......…………………………5

4运行过程及结果……………………....................................…………………….…........6

4.1运行过程.........................................................………………………………………..6

4.2运行结果………….......……………...................……………...……………………...6

4.3结果分析………..............................................………………….…………………….6

5心得体会……………………………………..…………………………………………...7

参考文献……………………………………….....………………………………….……..8

附录:

源程序…………………………………….…………………………….…………….....9

 

1幂法

设An有n个线性相关的特征向量v1,v2,…,vn,对应的特征值1,2,…,n,满足

|1|>|2|≥…≥|n|

1.1基本思想

因为{v1,v2,…,vn}为Cn的一组基,所以任给x(0)≠0,

——线性表示

所以有

若a1≠0,则因

知,当k充分大时A(k)x(0)≈1ka1v1=cv1属1的特征向量,另一方面,记max(x)=xi,其中|xi|=||x||∞,则当k充分大时,

若a1=0,则因舍入误差的影响,会有某次迭代向量在v1方向上的分量不为0,迭代下去可求得1及对应特征向量的近似值。

1.2规范化

在实际计算中,若|1|>1则|1ka1|→∞,若|1|<1则|1ka1|→0都将停机。

须采用“规范化”的方法

,k=0,1,2,…

定理3.2-1任给初始向量

有,

证明:

注:

的特征值不满足条件(3.2.1),幂法收敛性的分析较复杂,但若1=2=…=r且|1|>|r+1|≥…≥|n|则定理结论仍成立。

此时不同初始向量的迭代向量序列一般趋向于1的不同特征向量。

 

2概要设计

2.1设计背景

用java程序来实现幂法求矩阵最大特征值。

2.2运行流程

本程序分为了几大部分,通过方法间的相互调用,达到求解目的:

首先matrixx方法的作用是将矩阵A与向量X相乘,结果存储在Y中,即将方程组呈现出来,slove方法求出各未知数的最大值,程序的主体方法mifa通过dowhile循环中调用matrixx方法实现幂法函数。

2.3运行环境

Windows72009

JDK6.0

 

3程序详细设计

首先在桌面里新建文件夹,并运行程序J++6.0;令一维矩阵u={3,4,5};双精度浮点型初值为a=1.0,b=2.0;整型变量方程组的阶数n=3;双精度浮点型方程组系数矩阵为A={{7,3,-2},{3,4,1},{-2,-1,3}};

3.1第一部分:

矩阵转化为线性方程组

将二维矩阵A,一维矩阵x,y以及阶数n作为它的形参,通过for循环将Ax相乘得到的结果存储在Y中。

其执行程序如下:

publicvoidmatrixx(double[][]A,double[]x,double[]y,intn){

for(inti=0;i

y[i]=0;

for(intj=0;j

y[i]+=A[i][j]*x[j];

}

}

}

3.2第二部分:

特征向量的极大值

首先将形参double型一维矩阵x中的元素通过for循环取到最大值,并将最大值赋予max。

其执行程序如下:

publicdoubleslove(double[]x,intn){

doublemax=0;

for(inti=0;i

max=x[i]>x[i+1]?

x[i]:

x[i+1];

}

returnmax;

}

 

3.3第三部分:

求幂法函数块

这个方法有五个形参,二维矩阵A,一维矩阵u,双精度浮点型初值a,b矩阵的阶数n。

该方法的主体部分在dowhile中,通过循环迭代matrixx方法和solve方法,解出矩阵的特征值并且比较出最大特征值。

通过for循环列出关于该矩阵的线性方程组的所有特征向量。

其执行程序如下:

publicvoidmifa(double[][]A,double[]u,doublea,doubleb,intn){

doublec=0.0;

doublec1=0.0;

intcount=0;

double[]temp={0,0,0};

do{

double[]u1=u;

matrixx(A,u1,u,n);

c=slove(u,n);

c1=c;

guifanhua(u,n);

printfcount(count,u,n);

count++;

for(inti=0;i

temp[i]=Math.abs(u[i]-u1[i]);

}

}while(slove(temp,n)>a||Math.abs(c1-c)>b);

System.out.println("最大特征值为:

"+c);

System.out.println("特征向量为:

");

for(inti=0;i

System.out.println(u[i]+"");

}

}

 

4运行过程及结果

4.1运行过程

通过J++6.0,用for循环将Ax相乘得到的结果存储在Y中,将形参double型数组x中通过for循环取到最大值,在dowhile中调用matrixx方法,及solve方法,并打印最大特征值与特征向量。

4.2运行结果

经多次调试程序,不再报错,结果如下图:

4.3结果分析

该程序运行结果无误,其最大特征值为35.0,是实际运算结果。

 

5心得体会

由于这次课程设计题目是由老师选的,一开始我认为非常难,不知道从哪里下手。

并且题目内容还是这学期学的数值分析上的内容。

内容也一知半解,但是最后在同学的帮助下我还是完成了这次课程设计,通过这次课程设计收获很多,在该实验中,我学会了为具体操作选择最合适的循环语句及for、while、do..while语句的相互转换使用。

最重要的是,明白了JAVA程序中,定义方法中的局部变量时一定要赋初始值,否则编译不能通过会报错;但类中的成员变量则不一定需要。

同时通过这次课程设计让我意识到自己的java的基础还是很薄弱,有很多基本的知识都一知半解,不会合理利用学过的东西,在设计的过程中不时地翻阅资料,有时花费一天时间就只能完成一个功能。

程序代码完成之后,要进行运行调试,刚开始由于没有调试经验和方法效率很低,同时发现了许多错误,最后同学的帮助下,终于顺利完成了,自己也从中学到了不少东西。

更重要的是,在测试过程中的往往发现自己粗心大意犯了很多不必要的错误,通过这次课题,也使我认识到了认真在学习中的重要。

以后我要更认真努力的学习java。

 

参考文献

[1]李庆扬王能超以大义《数值分析》华中科技大学出版社第四版

[2]李兴华《Java从入门到精通》人民邮电出版社2010-4-1版

[3]臧萌编著《Java入门1·2·3》清华大学出版社2010-5-1版

[4]朱福喜.《Java语言程序设计》(第二版).科学出版社

[5]李辉《打通经脉Java基础入门编程详解》中国铁道出版社2010-11-01版

[6]陈国君等.《Java程序设计基础》(第二版).清华大学出版社

[7]Deitel.《Java大学基础教程》(第六版).电子工业出版社

[8]MaryCampione.《Java语言导学》(第四版).机械工业出版社

[9]Y.DanielLiang.《Java语言程序设计基础篇》(第六版).机械工业出版社

[10]KathySierra.《HeadFirstJava》(第二版).东南大学出版社

[11]喻桃阳《Java快速入门与商用项目培训》清华大学出版社2011-03-01版

[12]温沿书《Java入门与实战教程》人民邮电出版社2010-03-01版

[13]李钟尉《Java范例完全自学手册》 人民邮电出版社 2009-10-1

[14]印旻编著,《Java语言与面向对象程序设计》,清华大学出版社

[15]耿详义编著,《Java2程序设计实用教程》,清华大学出版社

[16]辛运帏《Java程序设计》(第二版)清华大学出版社

 

源程序

publicclassMifaSolve{

publicstaticvoidmain(String[]args){

//TODOAuto-generatedmethodstub

MifaSolvemifaSolve=newMifaSolve();

double[]u={3,4,5};

doublea=1.0;

doubleb=2.0;

intn=3;

double[][]A={{7,3,-2},{3,4,1},{-2,-1,3}};

mifaSolve.mifa(A,u,a,b,n);

}

//将矩阵A与向量X相乘,结果存储在Y中(用for循环将Ax相乘得到的结果存储在Y中)

publicvoidmatrixx(double[][]A,double[]x,double[]y,intn){

for(inti=0;i

y[i]=0;

for(intj=0;j

y[i]+=A[i][j]*x[j];

}

}

}

//求最大值(将形参double型数组x中通过for循环取到最大值)

publicdoubleslove(double[]x,intn){

doublemax=0;

for(inti=0;i

max=x[i]>x[i+1]?

x[i]:

x[i+1];

}

returnmax;

}

//规范化函数

publicvoidguifanhua(double[]x,intn){

doubletemp=slove(x,n);

for(inti=0;i

x[i]/=temp;

}

}

//幂法函数(在dowhile中调用matrixx方法,及solve方法,并打印最大特征值与特征向量)

publicvoidmifa(double[][]A,double[]u,doublea,doubleb,intn){

doublec=0.0;

doublec1=0.0;

intcount=0;

double[]temp={0,0,0};

do{

double[]u1=u;

matrixx(A,u1,u,n);

c=slove(u,n);

c1=c;

guifanhua(u,n);

printfcount(count,u,n);

count++;

for(inti=0;i

temp[i]=Math.abs(u[i]-u1[i]);

}

}while(slove(temp,n)>a||Math.abs(c1-c)>b);

System.out.println("最大特征值为:

"+c);

System.out.println("特征向量为:

");

for(inti=0;i

System.out.println(u[i]+"");

}

}

publicvoidprintfcount(intcount,double[]u,intn){

System.out.println(count);

for(inti=0;i

System.out.println(u[i]);

}

}

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1