幂法求矩阵最大特征值Word格式文档下载.docx
- 文档编号:7462900
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:14
- 大小:126.24KB
幂法求矩阵最大特征值Word格式文档下载.docx
《幂法求矩阵最大特征值Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《幂法求矩阵最大特征值Word格式文档下载.docx(14页珍藏版)》请在冰点文库上搜索。
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<
n;
i++){
y[i]=0;
for(intj=0;
j<
j++){
y[i]+=A[i][j]*x[j];
}
}
}
3.2第二部分:
特征向量的极大值
首先将形参double型一维矩阵x中的元素通过for循环取到最大值,并将最大值赋予max。
其执行程序如下:
publicdoubleslove(double[]x,intn){
doublemax=0;
n-1;
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;
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(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){
//求最大值(将形参double型数组x中通过for循环取到最大值)
//规范化函数
publicvoidguifanhua(double[]x,intn){
doubletemp=slove(x,n);
x[i]/=temp;
//幂法函数(在dowhile中调用matrixx方法,及solve方法,并打印最大特征值与特征向量)
publicvoidmifa(double[][]A,double[]u,doublea,doubleb,intn){
publicvoidprintfcount(intcount,double[]u,intn){
System.out.println(count);
System.out.println(u[i]);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 幂法求 矩阵 最大 特征值