1、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 bloc
2、k 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目 录 1 幂法.1 1.1 幂法基本思想.11.2规范化.22 概要设计.3 2.1 设计背景. .3 2.2 运行流程 .32.3运行环境.33 程序详细设计 .4 3.1 第一部分:矩阵转
3、化为线性方程组. .4 3.2 第二部分:特征向量的极大值.4 3.3 第三部分:求幂法函数块.54 运行过程及结果 .6 4.1 运行过程. .6 4.2 运行结果.6 4.3 结果分析.65 心得体会 .7参考文献.8附录:源程序.92 1 幂法设An有n个线性相关的特征向量v1,v2,vn,对应的特征值l1,l2,ln,满足|l1| |l2| |ln|1.1 基本思想因为v1,v2,vn为Cn的一组基,所以任给x(0) 0, 线性表示所以有 若a1 0,则因知,当k充分大时 A(k)x(0) l1ka1v1 = cv1 属l1的特征向量,另一方面,记max(x) = xi,其中|xi|
4、= |x|,则当k充分大时,若a1 = 0,则因舍入误差的影响,会有某次迭代向量在v1方向上的分量不为0,迭代下去可求得l1及对应特征向量的近似值。1.2 规范化在实际计算中,若|l1| 1则|l1ka1| ,若|l1| |l r +1| |ln|则定理结论仍成立。此时不同初始向量的迭代向量序列一般趋向于l1的不同特征向量。2 概要设计2.1 设计背景用java程序来实现幂法求矩阵最大特征值。2.2 运行流程本程序分为了几大部分,通过方法间的相互调用,达到求解目的:首先matrixx方法的作用是将矩阵A与向量X相乘,结果存储在Y中,即将方程组呈现出来,slove方法求出各未知数的最大值,程序的
5、主体方法mifa通过do while 循环中调用matrixx方法实现幂法函数。2.3 运行环境 Windows 7 2009 JDK 6.03 程序详细设计首先在桌面里新建文件夹,并运行程序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中。 其执行程序如下:public void matrixx(dou
6、ble A,double x,double y,int n)for(int i=0;in;i+)yi = 0;for(int j=0;jxi+1?xi:xi+1;return max;3.3 第三部分:求幂法函数块这个方法有五个形参,二维矩阵A,一维矩阵u,双精度浮点型初值a,b矩阵的阶数n。该方法的主体部分在do while中,通过循环迭代matrixx方法和solve方法,解出矩阵的特征值并且比较出最大特征值。通过for循环列出关于该矩阵的线性方程组的所有特征向量。其执行程序如下:public void mifa(double A,double u,double a,double b,in
7、t n)double c = 0.0;double c1 = 0.0;int count = 0;double temp=0,0,0;dodouble u1 = u;matrixx(A,u1,u,n);c = slove(u,n);c1 = c;guifanhua(u,n);printfcount(count,u,n);count+;for(int i =0;tempi = Math.abs(ui-u1i);while(slove(temp,n)a|Math.abs(c1-c)b);System.out.println(最大特征值为:+c);特征向量为:);System.out.println
8、(ui+4 运行过程及结果4.1 运行过程通过J+ 6.0,用for循环将Ax相乘得到的结果存储在Y中,将形参double型数组x中通过for循环取到最大值,在do while 中调用matrixx方法,及solve方法,并打印最大特征值与特征向量。4.2 运行结果经多次调试程序,不再报错,结果如下图:4.3 结果分析该程序运行结果无误,其最大特征值为35.0,是实际运算结果。5 心得体会由于这次课程设计题目是由老师选的,一开始我认为非常难,不知道从哪里下手。并且题目内容还是这学期学的数值分析上的内容。内容也一知半解,但是最后在同学的帮助下我还是完成了这次课程设计,通过这次课程设计收获很多,在
9、该实验中,我学会了为具体操作选择最合适的循环语句及for、while、do.while语句的相互转换使用。最重要的是,明白了JAVA程序中,定义方法中的局部变量时一定要赋初始值,否则编译不能通过会报错;但类中的成员变量则不一定需要。同时通过这次课程设计让我意识到自己的java的基础还是很薄弱,有很多基本的知识都一知半解,不会合理利用学过的东西,在设计的过程中不时地翻阅资料,有时花费一天时间就只能完成一个功能。程序代码完成之后,要进行运行调试,刚开始由于没有调试经验和方法效率很低,同时发现了许多错误,最后同学的帮助下,终于顺利完成了,自己也从中学到了不少东西。更重要的是,在测试过程中的往往发现自
10、己粗心大意犯了很多不必要的错误,通过这次课题,也使我认识到了认真在学习中的重要。以后我要更认真努力的学习java。参考文献1 李庆扬 王能超 以大义数值分析华中科技大学出版社 第四版2 李兴华 Java从入门到精通 人民邮电出版社 2010-4-1版3 臧萌 编著 Java入门123清华大学出版社2010-5-1版4 朱福喜.Java语言程序设计(第二版).科学出版社5 李辉 打通经脉 Java 基础入门编程详解中国铁道出版社2010-11-01版6 陈国君等.Java程序设计基础(第二版).清华大学出版社7 Deitel.Java大学基础教程(第六版).电子工业出版社 8 MaryCampi
11、one.Java语言导学(第四版).机械工业出版社9 Y.Daniel Liang.Java语言程序设计基础篇(第六版).机械工业出版社10 Kathy Sierra.Head First Java(第二版).东南大学出版社11 喻桃阳 Java快速入门与商用项目培训清华大学出版社2011-03-01版12 温沿书 Java入门与实战教程人民邮电出版社2010-03-01版13 李钟尉 Java范例完全自学手册人民邮电出版社2009-10-114 印旻编著,Java语言与面向对象程序设计,清华大学出版社15 耿详义编著,Java2程序设计实用教程,清华大学出版社16 辛运帏 Java程序设计(
12、第二版) 清华大学出版社源程序public class MifaSolve public static void main(String args) / TODO Auto-generated method stubMifaSolve mifaSolve = new MifaSolve();double u = 3,4,5;double a = 1.0;double b = 2.0;int n=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中
13、)public void matrixx(double A,double x,double y,int n)/求最大值(将形参double型数组x中通过for循环取到最大值)/规范化函数public void guifanhua(double x,int n)double temp = slove(x,n);xi/=temp;/幂法函数(在do while 中调用matrixx方法,及solve方法,并打印最大特征值与特征向量)public void mifa(double A,double u,double a,double b,int n)public void printfcount(int count,double u,int n)System.out.println(count);System.out.println(ui);第 10 页 共 11 页