幂法和反幂法的matlab实现.doc_第1页
幂法和反幂法的matlab实现.doc_第2页
幂法和反幂法的matlab实现.doc_第3页
幂法和反幂法的matlab实现.doc_第4页
幂法和反幂法的matlab实现.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精品文档幂法求矩阵主特征值及对应特征向量摘要矩阵特征值的数值算法,在科学和工程技术中很多问题在数学上都归结为矩阵的特征值问题,所以说研究利用数学软件解决求特征值的问题是非常必要的。实际问题中,有时需要的并不是所有的特征根,而是最大最小的实特征根。称模最大的特征根为主特征值。幂法是一种计算矩阵主特征值(矩阵按模最大的特征值)及对应特征向量的迭代方法,它最大的优点是方法简单,特别适用于大型稀疏矩阵, 但有时收敛速度很慢。用java来编写算法。这个程序主要分成了四个大部分:第一部分为将矩阵转化为线性方程组;第二部分为求特征向量的极大值;第三部分为求幂法函数块;第四部分为页面设计及事件处理。其基本流程为幂法函数块通过调用将矩阵转化为线性方程组的方法,再经过一系列的验证和迭代得到结果。 关键字:主特征值;特征向量;线性方程组;幂法函数块POWER METHOD FOR FINDING THE EIGENVALUES AND CORRESPONDING EIGENVECTORS OF THE MATRIXABSTRACTNumerical algorithm for the eigenvalue of matrix, in science and engineering technology, a lot of problems in mathematics are attributed matrix characteristic value problem, so that studies using mathematical software to solve the eigenvalue problem is very necessary. In practical problems, sometimes need not all eigenvalues, but the maximum and minimum eigenvalue of real. The characteristic value of the largest eigenvalue of the modulus maximum.Power method is a calculation of main features of the matrix values (matrix according to the characteristics of the largest value) and the corresponding eigenvector of iterative method. It is the biggest advantage is simple method, especially for large sparse matrix, but sometimes the convergence speed is very slow.Using java to write algorithms. This program is divided into three parts: the first part is the matrix is transformed into linear equations; the second part for the sake of feature vector of the maximum; the third part is the exponentiation function block. The fourth part is the page design and event processing .The basic process is a power law function block by calling the matrix is transformed into linear equations method, after a series of validation and iteration results.Power method for finding the eigenvalues and corresponding eigenvectors of the matrixKey words: Main eigenvalue; characteristic vector; linear equations; power function block、目 录1幂法.1 1.1 幂法的基本理论和推导.11.2幂法算法的迭代向量规范化.22 概要设计.3 2.1设计背景. .3 2.2 运行流程.32.3运行环境.33 程序详细设计.4 3.1矩阵转化为线性方程组. .4 3.2特征向量的极大值.4 3.3求幂法函数块. 3.4界面设计与事件处理.4 运行过程及结果.6 4.1 运行过程. .6 4.2 运行结果.6 4.3 结果分析.65 结论.7参考文献.8附录.561 幂法设实矩阵有一个完备的特征向量组,其特征值为,相应的特征向量为。已知A的主特征值是实根,且满足条件。1.1幂法的基本理论和推导1幂法的基本思想是任取一个非零的初始向量,由矩阵构造一向量序列称为迭代向量。由假设,可表示为(设) (1-1)于是 (1-2)其中。由假设,故,从而。这说明序列越来越接近的对应于的特征向量,或者说当充分大时,即迭代向量为的特征值的近似向量。下面再考虑主特征值的计算,用表示的第个分量,则,故。也就是说两相邻的迭代向量分量的比值收敛到主特征值。通过以上推论可以得出结论,设有个线性无关的特征向量(即非亏损的),主特征值满足,则对任何非零初始向量,构造的向量序列收敛到主特征向量;收敛到主特征值。(定理一)幂法只能对非亏损矩阵求实的主特征值,且常用于实对称矩阵。1.2幂法算法的迭代向量规范化23应用幂法计算的主特征值及对应的特征向量时,如果(或),迭代向量的各个不等于零的分量将随而趋向于无穷(或趋向于零),这样在计算机实现时就可能“溢出”。为了克服这个缺点,就需要将迭代向量加以规范化。设有一向量,将其规范化得到向量,其中表示向量的绝对值最大的分量,即如果有,则,且为所有绝对值最大的分量中的最小下标。任取一初始向量,构造向量序列:由(3.1)式有, (2-1)同理,可得到 (2-2)结论:设有个线性无关的特征向量,主特征值满足,则对任意非零初始向量,按下述方法构造的向量序列,:则有;(2-3)。(2-4)2 概要设计2.1 设计背景用java程序来实现幂法求矩阵最大特征值及对应特征向量。2.2 运行流程本程序分为了几大部分,通过方法间的相互调用,达到求解目的:首先matrixx方法的作用是将矩阵A与向量X相乘,结果存储在Y中,即将方程组呈现出来,slove方法求出各未知数的最大值,程序的主体方法mifa通过do while 循环中调用matrixx方法实现幂法函数。同时建立页面,达到在页面中输入初向量和矩阵,程序读入这些数据并运行出结果。2.3 运行环境MicrosoftWindows XP ProfessionalMyEclipse 8.63 程序详细设计45首先在桌面里新建文件夹,并运行程序MyEclipse 8.6;令一维矩阵u = 1,1,1; 双精度浮点型初值为 a = 1.0,b = 2.0;整型变量方程组的阶数 n=3;双精度浮点型方程组系数矩阵为 A = 3,-4,3,-4,6,3,3,3,1;3.1矩阵转化为线性方程组将二维矩阵A,一维矩阵x,y以及阶数n作为它的形参,通过for循环将Ax相乘得到的结果存储在Y中。其执行程序如下:public void matrixx(double A,double x,double y,int n)for(inti=0;in;i+)yi = 0;for(int j=0;jn;j+)yi += Aij*xj;3.2特征向量的极大值首先将形参double型一维矩阵x中的元素通过for循环取到最大值,并将最大值赋予max。其执行程序如下:public double slove(double x,int n)double max = 0;for(inti=0;ixi+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,doublea,doubleb,int 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(inti =0;ia|Math.abs(c1-c)b);System.out.println(最大特征值为:+c);System.out.println(特征向量为:);for(inti=0;in;i+)System.out.println(ui+);3.4界面设计和事件处理6通过调用以下的一系列的类,达到输入矩阵与向量,点击运算得出主特征值与特征向量java.awt.EventQueue;是一个与平台无关的类,它将来自于底层同位体类和受信任的应用程序类的事件列入队列。java.awt.event.ActionEvent;当特定于组件的动作(比如被按下)发生时,由组件(比如Button)生成此高级别事件。java.awt.event.ActionListener; 用于接收操作事件的侦听器接口。对处理操作事件感兴趣的类可以实现此接口,而使用该类创建的对象可使用组件的addActionListener方法向该组件注册。java.util.Arrays;包含一个静态的工厂,允许数组被视为列表javax.swing.JFrame; 与其他所有 JFC/Swing 顶层容器一样,JFrame 包含一个 JRootPane 作为其惟一的子容器javax.swing.JPanel; 里面有一个面板组件,就是由该类提供的,你可以new些对象,创建一个面板,则在界面中就可以有具体的显示javax.swing.border.EmptyBorder;设置组件边框javax.swing.JLabel; 可以通过设置垂直和水平对齐方式,指定标签显示区中标签内容在何处对齐javax.swing.JTextField; api里面得一个文本主键,要掉用它就要import实现接口javax.swing.JButton; push 按钮的实现java.awt.BorderLayout; 这是一个布置容器的边框布局,它可以对容器组件进行安排,并调整其大小,使其符合下列五个区域:北、南、东、西、中。4 运行过程及结果4.1 运行过程通过J+ 6.0,用for循环将Ax相乘得到的结果存储在Y中,将形参double型数组x中通过for循环取到最大值,在do while 中调用matrixx方法,及solve方法,并打印最大特征值与特征向量。4.2 运行结果经多次调试程序,不再报错,结果如下图:4.3 结果分析分析结果:由于误差的存在使得每一次迭代都将误差进一步的扩大,可能会偏离计算方向。在计算结果可能会出现误差,这很正常,重要的是掌握这种迭代思想。并且为了进一步研究不同的初值对结果的影响,也做了实验,发现在不同初值下求出的结果也各不相同,所以为了得到更精确的结果,在实验前一定要选取最合适的初值即初向量。5结论通过实验我们可以看到,幂法程序可以用来计算矩阵绝对值最大的特征值及相应的特征向量。幂法的缺点是开始的时候并不知道矩阵是否有单一的主特征值,也不知道如何选择以保证它关于矩阵特征向量的表达中包含一个与主特征值相关的非零特征向量。在这次课程设计中,我学习到了许多知识,其中包括之前学过的迭代思想,在矩阵中得到充分利用,包括do while循环语句的使用,不同类的定义等等解决特征值和特征向量的方法还有很多,由于时间关系没有研究很多。在论文写作过程中,我发现了自己很多缺点,经常因为粗心大意在代码中打错一个符号,检查很久才检查出来,同时对java语言编写也不够熟练,很多东西都要重新到书上去找,由于经验的匮乏,难免有许多考虑不周的地方。在以后的时间里,我会继续学习java有关知识,改进自己的缺点,争取解决更多的问题。参考文献1 李庆杨, 王能超, 易大义. 数值分析(第4版)M. 北京: 清华大学出版社, 2006.2 侯风波,汪永高,求n阶实方阵A的全部模最大的特征值及其相应特征向量的幂法J,工科数学,2000,16(2A).3 廖鸿志,幂法求特征值的若干问题J,云南大学学报,1988,10(4A).4 张德丰. MATLAB数值分析与仿真案例M. 北京:清华大学出版社, 2011.5 金一庆,陈越. 数值方法M. 北京:机械工业出版社,2003.6 JavaTMPlatformStandardEd./doc/java/awt/event/ActionEvent.html附 录页面设计与事件处理:package wewr;import java.awt.EventQueue;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Arrays;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.border.EmptyBorder;import javax.swing.JLabel;import javax.swing.JTextField;import javax.swing.JButton;import java.awt.BorderLayout;public class MyBoundary extends JFrame private JPanel contentPane;private JButton btnNewButton;private double u=0,0,0;private double A=0,0,0,0,0,0,0,0,0;private String u1;private String A1;private String A2=,;private JTextField textField;private JTextField textField_1;/* * Launch the application. */public static void main(String args) EventQueue.invokeLater(new Runnable() public void run() try MyBoundary frame = new MyBoundary();frame.setVisible(true); catch (Exception e) e.printStackTrace(););/* * Create the frame. */public MyBoundary() setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100, 100, 453, 316);contentPane = new JPanel();contentPane.setBorder(new EmptyBorder(5, 5, 5, 5);setContentPane(contentPane);contentPane.setLayout(null);JLabel lblNewLabel = new JLabel(u5411u91CF);lblNewLabel.setBounds(35, 26, 86, 24);contentPane.add(lblNewLabel);JLabel lblNewLabel_1 = new JLabel(u77E9u9635);lblNewLabel_1.setBounds(35, 73, 86, 24);contentPane.add(lblNewLabel_1);textField = new JTextField();textField.setBounds(131, 28, 214, 22);contentPane.add(textField);textField.setColumns(10);textField_1 = new JTextField();textField_1.setBounds(131, 75, 219, 22);contentPane.add(textField_1);textField_1.setColumns(10);btnNewButton = new JButton(u7ED3u679C);btnNewButton.setBounds(140, 160, 93, 23);btnNewButton.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent e) u1=textField.getText().split(,);for (int i = 0; i 3; i+) ui=Integer.parseInt(u1i);A1=textField_1.getText().split(s);for (int i = 0; i 3; i+) System.out.println(Arrays.deepToString(A1);A2i=A1i.split(,);for (int j = 0; j 3; j+) Aij=Integer.parseInt(A2ij.trim() ;new MifaSolve(u,A););contentPane.add(btnNewButton);主特征值与特征向量计算:package wewr;public class MifaSolve static double a = 1.0;static double b = 2.0;static int n=3;public MifaSolve(double u,double A)mifa(A,u,a,b,n);public MifaSolve()public static void main(String args)MifaSolve mifaSolve = new MifaSolve();double u = 1,1,1;double A = 3,-4,3,-4,6,3,3,3,1;mifaSolve.mifa(A,u,a,b,n);/将矩阵A与向量X相乘,结果存储在Y中(用for循环将Ax相乘得到的结果存储在Y中)public void matrixx(double A,double x,double y,int n)for(int i=0;in;i+)yi = 0;for(int j=0;jn;j+)yi += Aij*xj;/获得迭代序列/求最大值(将形参double型数组x中通过for循环取到最大值,也就是书上的最大特征值的模)public double slove(double x,int n)double max = 0;for(int i=0;ixi+1?xi:xi+1;return max;/规范化函数public void guifanhua(double x,int n)double temp = slove(x,n);for(int i=0;in;i+)xi/=tem

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论