数值分析幂法与反幂法 matlab程序

合集下载

幂法和反幂法求矩阵特征值课程

幂法和反幂法求矩阵特征值课程
u= 0.8576 0.6934 0.5623 1.0000
index = 0
k= 1001
修改 M0=0 m= 2.6820
u=
0.8577 0.6937 0.5624 1.0000
index = 1
k=
7
总结以上,幂法如下:
U [1 1 1 1] [1 2 3 4] [3 5 6 7]
m0 0.0001 0.001
大型稀疏矩阵。反幂法是计算海森伯格阵或三角阵的对应一个给定近似特
征值的特征向量的有效方ຫໍສະໝຸດ 之一。二.算法设计及流程图
1、幂法算法
(1)取初始向量 u (0) (例如取 u (0) =(1,1,…1) T ),置精度要求 ,置 k=1.
(2)计算
v (k ) =Au (k 1) ,m =max(v (k ) ), u (k ) = v (k ) / m
index 1 0 1 1 1 1 1 0 1
k 49 1001 10 9 7 9 7 1001 7
反幂法结果显示:在 m0 为 0 时
M0=0.001 U=[1 1 1 1]
M0=0.1 u=[1 1 1 1]
M0=0 u=[1 3 5 7]
M0=0.1 u=[1 3 5 7]
M0=0.5 u=[1 3 5 7]
的第一式改为求解线性方程组
A v (k ) = u (k 1)
(3)
但由于在反幂法中,每一步迭代都需求解线性方程组(3)式,迭代做了大量的
重复计算,为了节省工作量,可事先把矩阵 A 作 LU 分解,即 A=LU
所以线性方程组(3)改为
Ly (k ) =u (k 1) ,Uv (k ) =y (k)
四、算法程序设计代码

数值方法课程设计幂法反幂法计算矩阵特征值和特征向量-附Matlab程序

数值方法课程设计幂法反幂法计算矩阵特征值和特征向量-附Matlab程序

矩阵的特征值与特征向量的计算摘要物理,力学,工程技术中的很多问题在数学上都归结于求矩阵特征值的问题,例如振动问题(桥梁的振动,机械的振动,电磁振动等)、物理学中某些临界值的确定问题以及理论物理中的一些问题。

矩阵特征值的计算在矩阵计算中是一个很重要的部分,本文使用幂法和反幂法分别求矩阵的按模最大,按模最小特征向量及对应的特征值。

幂法是一种计算矩阵主特征值的一种迭代法,它最大的优点是方法简单,对于稀疏矩阵比较合适,但有时收敛速度很慢。

其基本思想是任取一个非零的初始向量。

由所求矩阵构造一向量序列。

再通过所构造的向量序列求出特征值和特征向量。

反幂法用来计算矩阵按模最小特征向量及其特征值,及计算对应于一个给定近似特征值的特征向量。

本文中主要使用反幂法计算一个矩阵的按模最小特征向量及其对应的特征值。

计算矩阵按模最小特征向量的基本思想是将其转化为求逆矩阵的按模最大特征向量。

然后通过这个按模最大的特征向量反推出原矩阵的按模最小特征向量。

关键词:矩阵;特征值;特征向量;冥法;反冥法THE CALCULATIONS OF EIGENVALUE AND EIGENVECTOR OF MATRIXABSTRACTPhysics, mechanics, engineering technology in a lot of problems in mathematics are attributed to matrix eigenvalue problem, such as vibration (vibration of the bridge, mechanical vibration, electromagnetic vibration, etc.) in physics, some critical values determine problems and theoretical physics in some of the problems. Matrix eigenvalue calculation is a very important part in matrix computation. In this paper, we use the power method and inverse power method to calculate the maximum of the matrix, according to the minimum characteristic vector and the corresponding characteristic value.Power method is an iterative method to calculate the eigenvalues of a matrix. It has the advantage that the method is simple and suitable for sparse matrices, but sometimes the convergence rate is very slow. The basic idea is to take a non - zero initial vector. Construct a vector sequence from the matrix of the matrix. Then the eigenvalues and eigenvectors are obtained by using the constructed vector sequence.The inverse power method is used to calculate the minimum feature vectors and their eigenvalues of the matrix, and to calculate the eigenvalues of the matrix. In this paper, we use the inverse power method to calculate the minimum eigenvalue of a matrix and its corresponding eigenvalues. The basic idea of calculating the minimum characteristic vector of a matrix is to transform it to the maximum characteristic vector of the modulus of the inverse matrix. Then, according to the model, the minimum feature vector of the original matrix is introduced.Key words: Matrix;Eigenvalue;Eigenvector;Iteration methods;目录1 引言 (1)2 相关定理。

数值分析-MATLAB相关算法

数值分析-MATLAB相关算法

数值分析-MATLAB算法刘亚1、四阶龙格库塔法:function yout=xin(bianliang)%定义输入输出clear allx0=0;xn=1;y0=1;h=0.1;%设置初始值、区间和步长[y,x]=lgkt4j(x0,xn,y0,h);%四阶龙格库塔法n=length(x);fprintf(' i x(i) y(i)\n');%输出格式for i=1:nfprintf('%2d %3.3f %4.4f\n',i,x(i),y(i)); endfunction [y,x]=lgkt4j(x0,xn,y0,h)x=x0:h:xn;%设置区间n=length(x);y1=x;y1(1)=y0;for i=1:nK1=f(x(i),y1(i));K2=f(x(i)+h/2,y1(i)+h/2*K1);K3=f(x(i)+h/2,y1(i)+h/2*K2);K4=f(x(i)+h,y1(i)+h*K3);y1(i+1)=y1(i)+h/6*(K1+2*K2+2*K3+K4);endy=y1;function Dy=f(x,y)Dy=y-2*x/y;C语言程序#include<math.h>main(){float x=0,y0=1,h=0.2,y1,k1,k2,k3,k4;k1=y0-2*x/y0;k2=y0+h/2*k1-(2*x+h)/(y0+h/2*k1);k3=y0+h/2*k2-(2*x+h)/(y0+h/2*k2);k4=y0+h*k3-(2*x+2*h)/(y0+h*k3);y1=y0+h/6*(k1+2*k2+2*k3+k4);do{printf("%5.4f\n",y1);x=x+h;y0=y1;k1=y0-2*x/y0;k2=y0+h/2*k1-(2*x+h)/(y0+h/2*k1);k3=y0+h/2*k2-(2*x+h)/(y0+h/2*k2);k4=y0+h*k3-(2*x+2*h)/(y0+h*k3);y1=y0+h/6*(k1+2*k2+2*k3+k4);}while(x<1);}2、幂法求特征值function [m x biaozhi]=mifa(A,jingdu,cishu)%幂法求矩阵最大特征值,其中%m为绝对值最大的特征值,x为对应最大特征值的特征向量%biaozhi表明迭代是否成功if nargin<3cishu=100;endif nargin<2jingdu=1e-5;endn=length(A);x=ones(n,1);biaozhi='迭代失败!';k=0;m1=0;while k<=cishuv=A*x;[vmax,k]=max(abs(v));m=v(k);x=v/m;if abs(m-m1)<jingdubiaozhi='迭代成功!';break;endm1=m;k=k+1;end3、拉格朗日插值function [c,l]=lglr(x,y)%x为n个节点的横坐标组成的向量,y为纵坐标组成的向量%c为插值函数的系数组成的向量%输出为差值多项式的系数w=length(x);n=w-1;l=zeros(w,w);for k=1:n+1v=1;for j=1:n+1if k~=jv=conv(v,poly(x(j)))/(x(k)-x(j));endendl(k,:)=v;endc=y*l;举例4、改进欧拉法function yout=gaijinoula(f,x0,y0,xn,n)%定义输入输出x=zeros(1,n+1);y=zeros(1,n+1);x(1)=x0;y(1)=y0;h=(xn-x0)/n;for i=1:nx(i+1)=x(i)+h;z0=y(i)+h*feval(f,x(i),y(i));y(i+1)=y(i)+(feval(f,x(i),y(i))+feval(f,x(i+1),z0))*h/2; endshuchu=[x',y']fprintf(' x(i) y(i)')function Dy=f(x,y)Dy=x+y;5、最小二乘M文件:function c=zxrc(x,y,m)%x 是数据点横坐标,y 数据点纵坐标%m 要构造的多项式的系数,c 是多项式由高到低的系数所组成的向量 n=length(x);b=zeros(1:m+1);f=zeros(n,m+1);for k=1:m+1f(:,k)=x'.^(k-1);enda=f'*f;b=f'*y';c=a\b;c=flipud(c);-2-1.5-1-0.500.51 1.52---6、矩阵相关的算法(1).求矩阵的行列式function d=hanglieshi(a)%求任意输入矩阵的行列式clear all;a=input('输入矩阵a=');d=1;n=size(a); %方阵的行(或者列)数for k=1:n-1e=a(k,k); %设矩阵的主元for i=k:n %求出矩阵的全主元for j=k:nif abs(a(i,j))>ee=a(i,j);p=i;q=j;else c=0;endendendfor j=k:n %行交换t=a(k,j);a(k,j)=a(p,j);a(p,j)=t;endif p~=k %判断行列式是否换号d=d*(-1);else d=d;endfor i=k:n %列交换t=a(i,k);a(i,k)=a(i,q);a(i,q)=t;endif q~=k %判断行列式是否换号d=d*(-1);else d=d;endif a(k,k)~=0for i=k+1:n %消元r=a(i,k)/a(k,k);for j=k+1:na(i,j)=a(i,j)-r*a(k,j);endendelse d=d;endendfor i=1:n%求行列式d=d*a(i,i);enddisp('矩阵a的行列式为:')d(2)矩阵的换行function c=huanhang(a)%实现矩阵换行clear all;a=input('输入矩阵a=');[m,n]=size(a);for j=1:nt=a(1,j);a(1,j)=a(2,j);a(2,j)=t;endc=a;disp('换行后矩阵a变为:')c(3)列主元消元法解方程function d=jiefang(a)%列主元消元法解方程clear all;a=input('输入矩阵a=');[row,column]=size(a);for i=1:column%每一列的列标m(i)=i;s(i)=0;x(i)=0;endfor k=1:row-1%最后一行不用比较e=a(k,k);p=k;q=k;for i=k:rowfor j=k:column-1if abs(a(i,j))>abs(e)e=a(i,j);p=i;q=j;else c=0;endendendt=m(k); %换列标记m(k)=m(q);m(q)=t;for i=1:row %列交换t=a(i,k);a(i,k)=a(i,q);a(i,q)=t;endfor j=k:column %行变换t=a(k,j);a(k,j)=a(p,j);a(p,j)=t;endif a(k,k)==0 %消元disp('非唯一解')else for i=k+1:rowr=a(i,k)/a(k,k);for j=k:columna(i,j)=a(i,j)-r*a(k,j);endendendendif a(row,row)==0disp('非唯一解')elses(row)=a(row,column)/a(row,row);s(row)q=m(row);x(q)=s(row);for i=row-1:1for j=i+1:rows(i)=s(i)+a(i,j)*x(i);ends(i)=[a(i,column)-s(i)]/a(i,i);q=m(i);x(q)=s(i);endendfor i=1:rowx(i)endend(4)两矩阵相乘function d=chengfa(A,B)% 实现两个矩阵相乘clear all;A=input('输入矩阵A=');B=input('输入矩阵B=')[m n]=size(A);[nb p]=size(B);C=zeros(m,p);if n~=nbdisp('不满足矩阵相乘条件') else for i=1:mfor j=1:pd=0;for k=1:nd=d+A(i,k)*B(k,j);endC(i,j)=d;endenddisp('矩阵AB结果为:')CEnd(5)矩阵元素最大值及下标function d=xunzhuyuan(a)%求一个矩阵的最大元素及其下标clear all;a=input('输入矩阵a=');e=a(1,1); %设e=a(1,1)为最大元素p=1;q=1;[m,n]=size(a);for i=1:mfor j=1:nif abs(a(i,j))>ee=a(i,j);p=i;q=j;else c=0;endendenddisp('最大元素为:')d=a(p,q)disp('最大元素所在的行为:')pdisp('最大元素所在的列为:')qend(6)矩阵元素最大值及下标function d=zuidazhi(A)%求矩阵的最大元素及其下标clear all;A=input('输入矩阵A=');B=A'; %转置[a,r]=max(A); %求出矩阵A每一列的最大值和每列最大值所在的行数[maxV,column]=max(a); %最大元素及其所在的列[b,c]=max(B);[maxV1,row]=max(b);%最大元素及其所在的行disp('矩阵A的最大元素为:')maxVdisp('矩阵A最大元素所在的列为:')columndisp('矩阵A最大元素所在的行为:')row。

数值分析 -第7讲_幂法和反幂法

数值分析 -第7讲_幂法和反幂法
数值分析
则存在酉矩阵U使 定理9( Schur定理) 设A ∈ R n×n, r11 r12 L r1n r22 L r2n ∆ = R, U T AU = O rnn 其中rii (i = 1,2,L, n)为A的特征值.
定理10(实Schur分解) 设A ∈ R n×n, 则存在正交矩阵Q使 R11 R12 L R1m R22 L R2m , QT AQ = O Rmm 其中当Rii (i = 1,2,L, m)为一阶时Rii是A的实特征值,当Rii为 二阶时Rii的两个特征值是A的两个共轭复特征值.
xn xn
α1 x1 α1 x1
数值分析
不同范数选取下的特征值的计算
1. 取范数为2-范数时 取范数为2
T T yk −1uk = yk −1 Ayk −1 ⇒
α1 x1T α1 x1 A = λ1 α1 x1 2 α1 x1 2
对应的迭代公式
∀ u0 ∈ R n T η k −1 = uk −1uk −1 yk −1 = uk −1 η k −1 uk = Ayk −1 T β k = yk −1uk ( k = 1, 2,...)
数值分析
实际使用的迭代公式为: 实际使用的迭代公式为:
uk −1 yk −1 = u k −1 u = Ay k −1 k
于是可得
Auk −1 A2uk −2 A k u0 uk = = = L = k −1 uk −1 Auk −2 A u0
uk Ak u0 yk = = k uk A u0
数值分析
定义3 定义3 设A = (aij ) n×n , 令 n ( )i = ∑ | aij | (2) Di = {z | | z − aii |≤ ri , z ∈ C }, (i = 1,L, n) 1 r , j≠i 称Di为复平面上以aii为圆心以ri为半径的Gerschgorin圆盘.

数值分析幂法和反幂法

数值分析幂法和反幂法
则按 A 1 的特征值绝对值的大小排序,有
| 1 |>| 1 |≥…≥| 1 |
n
n 1
1
对 A 1 实行幂法,就可得 A 1 的绝对值最大的特征值 1/ n 和相应的特征向量, 即 A 的绝对值最小的特征值和相应的特征向量。
由于用 A 1 代替 A 作幂法计算,因此该方法称为反幂法,反幂法的迭代格

( I-A)x=0
(3)

的解,就可得到相应的特征向量。
上述方法对于 n 很小时是可以的。但当 n 稍大时,计算工作量将以惊
人的速度增大,并且由于计算带有误差,方程(2)未必是精确的特征方程,
自然就不必说求解方程(2)与(3)的困难了。幂法是一种计算矩阵主特
征值(矩阵按模最大的特征值)及对应特征向量的迭代方法,特别是用于
按式(1)计算出 m k 和 u (k ) 满足
lim
k
m
k
=
1
,
lim u (k ) = x1
k
max(x1 )
(二)反幂法算法的理论依据及推导
反幂法是用来计算绝对值最小的特征值忽然相应的特征向量的方法。是对 幂法的修改,可以给出更快的收敛性。
1、反幂法的迭代格式与收敛性质
设 A 是非奇异矩阵,则零不是特征值,并设特征值为 | 1 |≥| 2 |≥…≥| n1 |>| n |
幂法流程图:
开始
输入 A;[m,u,index] =pow(A,1e-6)
k=0;m1= v=A*u
[vmax,i]=max(abs(v))
m1=m;k=k+1
m=v(i);u=v/m
abs(m-m1)< 1e-6
index=1;break; 输出:m,u,index

matlab 幂次方

matlab 幂次方

MATLAB 幂次方引言幂次方是数学中常见的运算方式之一,它表示一个数的指数次方。

在MATLAB中,我们可以使用内置函数或运算符来进行幂次方的计算。

本文将详细介绍MATLAB中幂次方的使用方法和相关注意事项。

幂次方的基本概念幂次方是指一个数的指数次方,即将一个数自乘多次。

例如,2的3次方可以表示为2^3,结果为8。

幂次方运算可以应用于整数、小数和复数等不同类型的数值。

MATLAB中的幂次方运算符在MATLAB中,我们可以使用运算符“^”来进行幂次方运算。

例如,计算2的3次方可以使用以下代码:result = 2^3;disp(result);运行结果为:8MATLAB中的幂次方函数除了使用幂次方运算符外,MATLAB还提供了内置函数来进行幂次方计算。

其中最常用的函数是power和^。

这两个函数的使用方法相同,都可以用于计算幂次方。

例如,计算2的3次方可以使用以下代码:result = power(2, 3);disp(result);运行结果为:8幂次方的应用幂次方在数学和工程领域中有着广泛的应用。

下面介绍几个常见的应用场景:1. 概率计算在概率统计中,幂次方可以用于计算事件发生的概率。

例如,假设一个硬币正面朝上的概率为0.5,那么连续抛掷10次硬币正面朝上的概率可以通过计算0.5的10次方来得到。

2. 信号处理在信号处理中,幂次方可以用于对信号进行幅度调整或增强。

例如,可以将音频信号的幂次方提高来增加音量。

3. 图像处理在图像处理中,幂次方可以用于对图像进行灰度变换。

通过将图像的像素值进行幂次方运算,可以改变图像的对比度和亮度。

4. 控制系统在控制系统中,幂次方可以用于模拟非线性系统。

通过引入幂次方运算,可以增加系统的非线性特性,提高系统的控制性能。

幂次方的注意事项在使用幂次方运算时,需要注意以下几点:1. 整数幂次方和小数幂次方在MATLAB中,整数幂次方和小数幂次方的计算方式是不同的。

对于整数幂次方,可以直接使用运算符“^”进行计算;对于小数幂次方,应使用幂次方函数power 进行计算。

幂法 数值分析

幂法 数值分析
用反幂法计算出矩阵 Bk 的模最小的特征值。 Bk = A -μ k I
(其中,k = 1,2,…,39)。 6. 求出 A 的条件数 cond(A)2 以及 A 的行列式
detA,其中: cond(A)2 = |λ m|/|λ s|; detA = det(LU) = detU。
二、全部源程序:
//1.主程序 #include "stdafx.h" #include "iostream.h" #include "iomanip.h" #include "head.h" #include "math.h"
为:"<<u_min<<endl; cout<<endl;
//求出 A 最大的特征值
//创建初始向量 u0 for ( i = 0; i < n; ++i) u0[i] = 5; u0[0] = 1.0;
//生成矩阵 A 的非零元素 arr_ger( a_U, a_D, a_L, s, r, n, fabs(u_max));
int i, j; //生成上带宽矩阵 a_U 的非 0 元素 for ( i = 0; i < s; ++i ) {
a_U[i] = new double [n-1-i]; } for ( j = 0; j < n-1; ++j ) {
a_U[0][j] = 0.16; } for ( j = 0; j < n-2; ++j ) {
//将带状矩阵 A 压缩为矩阵 C arr_compress( c, a_D, a_U, a_L, s, r, n);

幂法和反幂法的matlab实现

幂法和反幂法的matlab实现

幂法和反幂法的matlab实现幂法求矩阵主特征值及对应特征向量摘要矩阵特征值的数值算法,在科学和工程技术中很多问题在数学上都归结为矩阵的特征值问题,所以说研究利用数学软件解决求特征值的问题是非常必要的。

实际问题中,有时需要的并不是所有的特征根,而是最大最小的实特征根。

称模最大的特征根为主特征值。

幂法是一种计算矩阵主特征值(矩阵按模最大的特征值)及对应特征向量的迭代方法,它最大的优点是方法简单,特别适用于大型稀疏矩阵,但有时收敛速度很慢。

用java来编写算法。

这个程序主要分成了四个大部分:第一部分为将矩阵转化为线性方程组;第二部分为求特征向量的极大值;第三部分为求幂法函数块;第四部分为页面设计及事件处理。

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

关键字:主特征值;特征向量;线性方程组;幂法函数块POWER METHOD FOR FINDING THE EIGENVALUES AND CORRESPONDING EIGENVECTORS OF THEMATRIXABSTRACTNumerical algorithm for the eigenvalue of matrix, in science and engineering technology, alot 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 isthe exponentiation function block. The fourth part is the page design and eventprocessing .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幂法的基本理论和推导 (1)1.2幂法算法的迭代向量规范化 (2)2概要设计........................................................ (3)2.1设计背景 (3)2.2运行流程........................................... . (3)2.3运行环境........................................... (3)3程序详细设计 (4)3.1矩阵转化为线性方程组……..………………………………………. .43.2特征向量的极大值 (4)3.3求幂法函数块............….....…………...…......…………………………3.4界面设计与事件处理..........................................................................4运行过程及结果................................................ (6)4.1 运行过程....................................... ..................………………………………………. .64.2 运行结果................................................ .. (6)4.3 结果分析.......................................... (6)5结论 (7)参考文献 (8)附录 (56)1 幂法设实矩阵nn ij a A ⨯=)(有一个完备的特征向量组,其特征值为nλλλ ,,21,相应的特征向量为nx x x ,,21。

幂法及其MATLAB程序

幂法及其MATLAB程序

5.2 幂法及其MATLAB 程序5.2.2 幂法的MATLAB 程序用幂法计算矩阵A 的主特征值和对应的特征向量的MATLAB 主程序function [k,lambda,Vk,Wc]=mifa(A,V0,jd,max1)lambda=0;k=1;Wc =1; ,jd=jd*0.1;state=1; V=V0;while ((k<=max1)&(state==1))Vk=A*V; [m j]=max(abs(Vk)); mk=m;tzw=abs(lambda-mk); Vk=(1/mk)*Vk;Txw=norm(V-Vk); Wc=max(Txw,tzw); V=Vk;lambda=mk;state=0;if (Wc>jd)state=1;endk=k+1;Wc=Wc;endif (Wc<=jd)disp('请注意:迭代次数k,主特征值的近似值lambda,主特征向量的近似向量Vk,相邻两次迭代的误差Wc 如下:')elsedisp('请注意:迭代次数k 已经达到最大迭代次数max1,主特征值的迭代值lambda,主特征向量的迭代向量Vk,相邻两次迭代的误差Wc 如下:') endVk=V;k=k-1;Wc;例 5.2.2 用幂法计算下列矩阵的主特征值和对应的特征向量的近似向量,精度510-=ε.并把(1)和(2)输出的结果与例5.1.1中的结果进行比较.(1)⎪⎪⎭⎫ ⎝⎛-=4211A ; (2)⎪⎪⎪⎭⎫ ⎝⎛=633312321B ;(3)⎪⎪⎪⎭⎫ ⎝⎛--=1124111221C ;(4)⎪⎪⎪⎭⎫ ⎝⎛---=20101350144D . 解 (1)输入MATLAB 程序>>A=[1 -1;2 4]; V0=[1,1]';[k,lambda,Vk,Wc]=mifa(A,V0,0.00001,100),[V,D] = eig (A), Dzd=max(diag(D)), wuD= abs(Dzd- lambda), wuV=V(:,2)./Vk,运行后屏幕显示结果请注意:迭代次数k,主特征值的近似值lambda,主特征向量的近似向量Vk,相邻两次迭代的误差Wc 如下:k = lambda = Wc =33 3.00000173836804 8.691862856124999e-007Vk = V = wuV =-0.49999942054432 -0.70710678118655 0.44721359549996 -0.894428227562941.00000000000000 0.70710678118655 -0.89442719099992 -0.89442719099992Dzd = wuD =3 1.738368038406435e-006由输出结果可看出,迭代33次,相邻两次迭代的误差W c ≈8.69 19e-007,矩阵A 的主特征值的近似值lambda ≈3.000 00和对应的特征向量的近似向量V k ≈(-0.500 00,1.00000T ), lambda 与例5.1.1中A 的最大特征值32=λ近似相等,绝对误差约为1.738 37e-006,V k 与特征向量X =T22k T )1,21(- )0(2≠k 的第1个分量的绝对误差约等于0,第2个分量的绝对值相同.由wuV 可以看出,2λ的特征向量V (:,2) 与V k 的对应分量的比值近似相等.因此,用程序mifa.m 计算的结果达到预先给定的精度510-=ε.(2) 输入MATLAB 程序>>B=[1 2 3;2 1 3;3 3 6]; V0=[1,1,1]';[k,lambda,Vk,Wc]=mifa(B,V0,0.00001,100), [V,D] = eig (B), Dzd=max(diag(D)), wuD= abs(Dzd- lambda), wuV=V(:,3)./Vk,运行后屏幕显示结果请注意:迭代次数k,主特征值的近似值lambda,主特征向量的近似向量Vk,相邻两次迭代的误差Wc 如下:k = lambda = Wc = Dzd = wuD =3 9 0 9 0Vk = wuV =0.50000000000000 0.816496580927730.50000000000000 0.816496580927731.00000000000000 0.81649658092773V =0.70710678118655 0.57735026918963 0.40824829046386-0.70710678118655 0.57735026918963 0.408248290463860 -0.57735026918963 0.81649658092773(3) 输入MATLAB 程序>> C=[1 2 2;1 -1 1;4 -12 1];V0=[1,1,1]';[k,lambda,Vk,Wc]=mifa(C,V0,0.00001,100), [V,D] = eig (C), Dzd=max(diag(D)), wuD=abs(Dzd-lambda),Vzd=V(:,1),wuV=V(:,1)./Vk,运行后屏幕显示请注意:迭代次数k 已经达到最大迭代次数max1,主特征值的迭代值lambda,主特征向量的迭代向量Vk,相邻两次迭代的误差Wc 如下:k = lambda = Wc =100 0.09090909090910 2.37758124193119Dzd = wuD =1.00000000000001 0.90909090909091Vk= Vzd = wuV =0.99999999999993 0.90453403373329 0.904534033733350.99999999999995 0.30151134457776 0.301511344577781.00000000000000 -0.30151134457776 -0.30151134457776由输出结果可见,迭代次数k 已经达到最大迭代次数max 1=100,并且lambda 的相邻两次迭代的误差Wc ≈2.377 58>2,由wuV 可以看出,lambda 的特征向量V k 与真值Dzd 的特征向量V zd 对应分量的比值相差较大,所以迭代序列发散.实际上,实数矩阵C 的特征值的近似值为i ,i ,010*********.000321=-==λλλ ,并且对应的特征向量的近似向量分别为X T1=1k (0.90453403373329,0.30151134457776,-0.30151134457776)T ,X =T 22k (-0.72547625011001,-0.21764287503300-0.07254762501100i, 0.58038100008801-0.29019050004400i )T ,X =T33k ( -0.72547625011001, -0.21764287503300 + 0.07254762501100i,0.58038100008801 + 0.29019050004400i)T0,0(21≠≠k k , 03≠k 是常数).(4)输入MATLAB 程序>> D=[-4 14 0;-5 13 0;-1 0 2]; V0=[1,1,1]';[k,lambda,Vk,Wc]=mifa(D,V0,0.00001,100), [V,Dt] =eig (D), Dtzd=max(diag(Dt)), wuDt=abs(Dtzd-lambda),Vzd=V(:,2),wuV=V(:,2)./Vk,运行后屏幕显示结果请注意:迭代次数k,主特征值的近似值lambda,主特征向量的近似向量Vk,相邻两次迭代的误差Wc如下:k = lambda = Wc =19 6.00000653949528 6.539523793591684e-006Dtzd = wuDt =6.00000000000000 6.539495284840768e-006Vk = Vzd = wuV =0.79740048053564 0.79740048053564 0.797400480535640.71428594783886 0.56957177181117 0.79740021980618-0.24999918247180 -0.19935012013391 0.797403088133705.3 反幂法和位移反幂法及其MATLAB程序5.3.3 原点位移反幂法的MATLAB程序(一)原点位移反幂法的MATLAB主程序1用原点位移反幂法计算矩阵A的特征值和对应的特征向量的MATLAB主程序1 function [k,lambdan,Vk,Wc]=ydwyfmf(A,V0,jlamb,jd,max1)[n,n]=size(A); A1=A-jlamb*eye(n); jd= jd*0.1;RA1=det(A1);if RA1==0disp('请注意:因为A-aE的n阶行列式hl等于零,所以A-aE不能进行LU分解.')returnendlambda=0;if RA1~=0for p=1:nh(p)=det(A1(1:p, 1:p));endhl=h(1:n);for i=1:nif h(1,i)==0disp('请注意:因为A-aE的r阶主子式等于零,所以A-aE不能进行LU分解.')returnendendif h(1,i)~=0disp('请注意:因为A-aE的各阶主子式都不等于零,所以A-aE 能进行LU分解.')k=1;Wc =1;state=1; Vk=V0;while((k<=max1)&(state==1))[L U]=lu(A1); Yk=L\Vk;Vk=U\Yk; [mj]=max(abs(Vk));mk=m;Vk1=Vk/mk; Yk1=L\Vk1;Vk1=U\Yk1;[m j]=max(abs(Vk1));mk1=m;Vk2=(1/mk1)*Vk1;tzw1=abs((mk-mk1)/mk1);tzw2=abs(mk1-mk);Txw1=norm(Vk)-norm(Vk1);Txw2=(norm(Vk)-norm(Vk1))/norm(Vk1);Txw=min(Txw1,Txw2); tzw=min(tzw1,tzw2);Vk=Vk2;mk=mk1; Wc=max(Txw,tzw);Vk=Vk2;mk=mk1;state=0;if(Wc>jd)state=1;endk=k+1;%Vk=Vk2,mk=mk1,endif (Wc<=jd)disp('A-aE 的秩R(A-aE)和各阶顺序主子式值hl 、迭代次数k,按模最小特征值的近似值lambda,特征向量的近似向量Vk,相邻两次迭代的误差Wc 如下:')elsedisp('A-aE 的秩R(A-aE)和各阶顺序主子式值hl 、迭代次数k 已经达到最大迭代次数max1,按模最小特征值的迭代值lambda,特征向量的迭代向量Vk,相邻两次迭代的误差Wc 如下:')endhl,RA1endend[V,D]=eig(A,'nobalance'),Vk;k=k-1;Wc;lambdan=jlamb+1/mk1;例5.3.2 用原点位移反幂法的迭代公式(5.28),根据给定的下列矩阵的特征值n λ的初始值n λ~,计算与n λ对应的特征向量n X 的近似向量,精确到0.000 1. (1)⎪⎪⎪⎭⎫ ⎝⎛----210242011,2.0~2=λ;(2)⎪⎪⎭⎫ ⎝⎛-4211,001.2~2=λ;(3)⎪⎪⎪⎭⎫ ⎝⎛--3315358215211,8.26~3=λ.解 (1)输入MATLAB 程序>> A=[1 -1 0;-2 4 -2;0 -1 2];V0=[1,1,1]';[k,lambda,Vk,Wc]=ydwyfmf(A,V0,0.2,0.0001,10000)运行后屏幕显示结果 请注意:因为A-aE 的各阶主子式都不等于零,所以A-aE 能进行LU 分解.A-aE 的秩R(A-aE)和各阶顺序主子式值hl 、迭代次数k,按模最小特征值的近似值lambda,特征向量的近似向量Vk,相邻两次迭代的误差Wc 如下:k = lambda = Wc = hl =3 0.2384 1.0213e-007 0.8000 1.0400 0.2720Vk = V = D =1.0000 -0.2424 -1.0000 -0.5707 5.1249 0 00.7616 1.0000 -0.7616 0.3633 0 0.2384 00.4323 -0.3200 -0.4323 1.0000 0 0 1.6367(2)输入MATLAB 程序>> A=[1 -1;2 4];V0=[20,1]';[k,lambda,Vk,Wc]=ydwyfmf(A,V0,2.001,0.0001,100)运行后屏幕显示结果请注意:因为A-aE 的各阶主子式都不等于零,所以A-aE 能进行LU 分解.A-aE 的秩R(A-aE)和各阶顺序主子式值hl 、迭代次数k,按模最小特征值的近似值lambda,特征向量的近似向量Vk,相邻两次迭代的误差Wc 如下:k = lambda = Wc = hl =2 2.0020 5.1528e-007 -1.0010 -0.0010Vk = V = D =1.0000 -1.0000 0.5000 2 0-1.0000 1.0000 -1.0000 0 3(3)输入MATLAB 程序>> A=[-11 2 15;2 58 3;15 3 -3];V0=[1,1,-1]';[k,lambdan,Vk,Wc]=ydwyfmf(A,V0,8.26, 0.0001,100)运行后屏幕显示结果请注意:因为A-aE 的各阶主子式都不等于零,所以A-aE 能进行LU 分解.A-aE 的秩R(A-aE)和各阶顺序主子式值hl 、迭代次数k,按模最小特征值的近似值lambda,特征向量的近似向量Vk,相邻两次迭代的误差Wc 如下:k = lambdan= Wc = hl =2 8.2640 6.9304e-008 -19.2600 -961.9924 -6.1256Vk = V = D =-0.7692 0.7928 0.6081 0.0416 -22.5249 0 00.0912 0.0030 -0.0721 0.9974 0 8.2640 0-1.0000 -0.6095 0.7906 0.0590 0 0 58.2609例 5.3.3 用原点位移反幂法的迭代公式(5.28),计算⎪⎪⎪⎭⎫ ⎝⎛-----=1026471725110A 的分别对应于特征值 1.001~11=≈λλ,.001 2~22=≈λλ, 001.4~33=≈λλ的特征向量1X ,2X ,3X 的近似向量,相邻迭代误差为0.001.将计算结果与精确特征向量比较. 解 (1)计算特征值 1.001~11=≈λλ对应的特征向量1X 的近似向量.输入MATLAB 程序>> A=[0 11 -5;-2 17 -7;-4 26 -10];V0=[1,1,1]';[k,lambda,Vk,Wc]= ydwyfmf(A,V0,1.001, 0.001,100),[V,D]=eig(A);Dzd=min(diag(D)), wuD= abs(Dzd- lambda),VD=V(:,1),wuV=V(:,1)./Vk,运行后屏幕显示结果请注意:因为A-aE 的各阶主子式都不等于零,所以A-aE 能进行L U 分解.A-aE 的秩R(A-aE)和各阶顺序主子式值hl 、迭代次数k,按模最小特征值的近似值lambda,特征向量的近似向量Vk,相邻两次迭代的误差Wc 如下:hl =-1.00100000000000 5.98500100000000 -0.00299600100000k = lambda = RA1 =5 1.00200000000000 -0.00299600100000Vk = VD = wuV =-0.50000000000000 -0.40824829046386 0.81649658092773-0.50000000000000 -0.40824829046386 0.81649658092773-1.00000000000000 -0.81649658092773 0.81649658092773Wc = Dzd = wuD =1.378794763695562e-009 1.00000000000000 0.00200000000000 从输出的结果可见,迭代5次,特征向量1X 的近似向量1~X 的相邻两次迭代的误差Wc ≈1.379 e-009,由wuV 可以看出,1~X = Vk 与VD 的对应分量的比值相等.特征值1λ的近似值lambda ≈1.002与初始值=1~λ 1.001的绝对误差为0.001,而与 1λ的绝对误差为0.002,其中 =1X T )000000000001.000 , 000000000000.500- , 000000000000.500( -, =1~X T )000000000001.000 , 000000000000.500- , 000000000000.500(-. (2)计算特征值.001 2~22=≈λλ对应特征向量2X 的近似向量.输入MATLAB 程序>> A=[0 11 -5;-2 17 -7;-4 26 -10];V0=[1,1,1]';[k,lambda,Vk,Wc]=ydwyfmf(A,V0,2.001, 0.001,100) ,[V,D]=eig(A); WD=lambda-D(2,2),VD=V(:,2),wuV=V(:,2)./Vk,运行后屏幕显示结果请注意:因为A-aE 的各阶主子式都不等于零,所以A-aE 能进行L U 分解.A-aE 的秩R(A-aE)和各阶顺序主子式值hl 、迭代次数k,按模最小特征值的近似值lambda,特征向量的近似向量Vk,相邻两次迭代的误差Wc 如下:hl =-2.00100000000000 -8.01299900000000 0.00200099900000k = Wc = lambda = WD =2 3.131363162302120e-007 2.00200000000016 0.00200000000016Vk = VD = wuV =-0.24999999999999 0.21821789023599 -0.87287156094401 -0.49999999999999 0.43643578047198 -0.87287156094398 -1.00000000000000 0.87287156094397 -0.87287156094397 从输出的结果可见,迭代2次,特征向量2X 的近似向量2~X 的相邻两次迭代的误差Wc ≈3.131e-007,2~X 与2X 的对应分量的比值近似相等.特征值2λ的近似值lambda ≈2.002与初始值=2~λ 2.001的绝对误差约为0.001,而lambda 与2λ的绝对误差约为0.002,其中 =2~X T )00000000000000.1,99999999999499.0,99999999999249.0(---, =2X T ) 000000000001.000- ,000000000000.500- ,99999999999-0.249( . (3)计算特征值 001.4~33=≈λλ对应特征向量3X 的近似向量.输入MATLAB 程序>> A=[0 11 -5;-2 17 -7;-4 26 -10];V0=[1,1,1]';[k,lambda,Vk,Wc]=ydwyfmf(A,V0,4.001, 0.001,100)[V,D]=eig(A);WD=lambda-max(diag(D)),VD=V(:,3),wuV=V(:,3)./Vk,运行后屏幕显示结果请注意:因为A-aE 的各阶主子式都不等于零,所以A-aE 能进行L U 分解.A-aE 的秩R(A-aE)和各阶顺序主子式值hl 、迭代次数k,按模最小特征值的近似值lambda,特征向量的近似向量Vk,相邻两次迭代的误差Wc 如下:hl =-4.00100000000000 -30.00899900000000 -0.00600500099999 k = lambda = Wc = WD =2 4.00199999999990 1.996084182914842e-007 0.00199999999990Vk = VD = wuV =0.40000000000001 -0.32444284226153 -0.81110710565380 0.60000000000001 -0.48666426339229 -0.81110710565381 1.00000000000000 -0.81110710565381 -0.81110710565381 从输出的结果可见,迭代2次,特征向量3X 的近似向量3~X 的相邻两次迭代的误差Wc ≈1.996e-007,3~X 与3X 的对应分量的比值近似相等.特征值3λ的近似值 4.001~4.0022=≈λ与初始值lambda 的绝对误差近似为001.0,而lambda 与3λ的绝对误差约为0.002,其中 =3X (-0.400 000 000 000 00,-0.600 000 000 000 00,-1.000 000 000 000 00T ), =3~X T )000000000001.000 ,100000000000.600 ,10000000000.400(.(二)原点位移反幂法的MATLAB 主程序2用原点位移反幂法计算矩阵A 的特征值和对应的特征向量的MATLAB 主程序2function [k,lambdan,Vk,Wc]=wfmifa1(A,V0,jlamb,jd,max1)[n,n]=size(A); jd= jd*0.1;A1=A-jlamb*eye(n);nA1=inv(A1); lambda1=0;k=1;Wc =1;state=1; U=V0;while ((k<=max1)&(state==1))Vk=A1\U; [m j]=max(abs(Vk)); mk=m; Vk=(1/mk)*Vk;Vk1=A1\Vk;[m1 j]=max(abs(Vk1)); mk1=m1,Vk1=(1/mk1)*Vk1;U=Vk1,Txw=(norm(Vk1)-norm(Vk))/norm(Vk1);tzw=abs((lambda1-mk1)/mk1);Wc=max(Txw,tzw); lambda1=mk1;state=0;if (Wc>jd)state=1;endk=k+1;endif (Wc<=jd)disp('请注意迭代次数k,特征值的近似值lambda,对应的特征向量的近似向量Vk,相邻两次迭代的误差Wc 如下:')elsedisp('请注意迭代次数k 已经达到最大迭代次数max1, 特征值的近似值lambda,对应的特征向量的近似向量Vk,相邻两次迭代的误差Wc 如下:') end[V,D] =eig(A,'nobalance'),Vk=U;k=k-1;Wc;lambdan=jlamb+1/mk;例5.3.4 用原点位移反幂法的迭代公式(5.27),计算例题5.3.3,并且将这两个例题的计算结果进行比较.再用两种原点位移反幂法的MATLAB 主程序,求979999999990.999~1=λ对应的特征向量. 解 (1)计算特征值 1.001~11=≈λλ对应特征向量1X 的近似向量.输入MATLAB 程序>> A=[0 11 -5;-2 17 -7;-4 26 -10];V0=[1,1,1]';[k,lambda,Vk,Wc]=wfmifa1(A,V0,1.001,0.001,100)运行后屏幕显示结果请注意迭代次数k,特征值的近似值lambda,对应的特征向量的近似向量Vk,相邻两次迭代的误差Wc 如下:k = lambda = Wc =5 1.00200000000138 1.376344154436924e-006Vk’ = -0.50000000000000 -0.50000000000000 -1.00000000000000同理可得,另外与两个特征值对应的特征向量.(2)再用两种原点位移反幂法的MATLAB 主程序,求979999999990.999~1=λ对应的特征向量.输入MATLAB 程序>> A=[0 11 -5;-2 17 -7;-4 26 -10];V0=[1,1,1]';[k,lambda,Vk,Wc]=ydwyfmf(A,V0,0.99999999999997,0.001,100) 运行后屏幕显示结果请注意:因为A-aE 的各阶主子式都不等于零,所以A-aE 能进行LU 分解.A-aE 的秩R(A-aE)和各阶顺序主子式值hl 、迭代次数k,按模最小特征值的近似值lambda,特征向量的近似向量Vk,相邻两次迭代的误差Wc 如下:hl =-0.99999999999997 6.00000000000045 0.00000000000010RA1 = 1.039168751049192e-013 k = 2 lambda = 1.00000000000000输入MATLAB 程序>> A=[0 11 -5;-2 17 -7;-4 26 -10];V0=[1,1,1]';[k,lambda,Vk,Wc]=wfmifa1(A,V0, 0.99999999999997,0.001,100) 运行后屏幕显示结果请注意迭代次数k,特征值的近似值lambda,对应的特征向量的近似向量Vk,相邻两次迭代的误差Wc 如下:k = 3 lambda = 1.00000000000000 Wc =5.412337245047640e-016Vk = 0.50000000000000 0.50000000000000 1.00000000000000 Wc = 4.317692037236759e-013 Vk =0.500000000000000.500000000000001.000000000000005.4 雅可比(Jacobi)方法及其MATLAB 程序5.4.3 雅可比方法的MATLAB 程序用雅可比方法计算对称矩阵A 的特征值和对应的特征向量的MATLAB 主程序function [k,Bk,V,D,Wc]=jacobite(A,jd,max1)[n,n]=size(A);Vk=eye(n);Bk=A;state=1;k=0;P0=eye(n); Aij=abs(Bk-diag(diag(Bk)));[m1 i]=max(Aij);[m2 j]=max(m1);i=i(j);while ((k<=max1)&(state==1))k=k+1,aij=abs(Bk-diag(diag(Bk)));[m1 i]=max(abs(aij));[m2 j]=max(m1);i=i(j),j,Aij=(Bk-diag(diag(Bk)));mk=m2*sign(Aij(i,j)),Wc=m2,Dk=diag(diag(Bk));Pk=P0;c=(Bk(j,j)-Bk(i,i))/(2*Bk(i,j)),t=sign(c)/(abs(c)+sqrt(1+c^2)),pii=1/( sqrt(1+t^2)), pij=t/( sqrt(1+t^2)),Pk(i,i)=pii;Pk(i,j)=pij;Pk(j,j)=pii; Pk(j,i)=-pij;Pk,B1=Pk'*Bk;B2=B1*Pk; Vk=Vk*Pk,Bk=B2,if (Wc>jd)state=1;elsereturnendPk;Vk;Bk=B2;Wc;endif (k>max1)disp('请注意迭代次数k 已经达到最大迭代次数max1,迭代次数k,对称矩阵Bk,以特征向量为列向量的矩阵V,特征值为对角元的对角矩阵D 如下:')elsedisp('请注意迭代次数k,对称矩阵Bk,以特征向量为列向量的矩阵V,特征值为对角元的对角矩阵D 如下:')endWc;k=k; V=Vk;Bk=B2;D=diag(diag(Bk));[V1,D1]=eig(A,'nobalance')例5.4.2 用雅可比方法的MATLAB 程序计算矩阵⎪⎪⎪⎪⎪⎭⎫ ⎝⎛----=12101152302756135612A 的特征值i λ和对应的特征向量i X (4,3,2,1=i ).解 (1)保存名为jacobite.m 为M 文件;(2)输入MATLAB 程序>> A=[12 -56 3 -1;-56 7 2 0;3 2 5 1;-1 0 1 12];[k,B,V,D,Wc]=jacobite(A,0.001,100)(3)运行后屏幕显示如下:k = i = j = mk = Wc =1 2 1 -56 56c = t =-0.04464285714286 -0.95635313919972pii = pij =0.72270271801843 -0.69115901308510Pk =0.72270271801843 0.69115901308510 0 0 -0.69115901308510 0.72270271801843 0 0 0 0 1.00000000000000 00 0 0 1.00000000000000Vk =0.72270271801843 0.69115901308510 0 0 -0.69115901308510 0.72270271801843 0 00 0 1.00000000000000 00 0 0 1.00000000000000Bk =65.55577579518456 0 0.78579012788509 -0.72270271801843 -0.00000000000001 -46.55577579518456 3.51888247529217 -0.691159013085100.78579012788509 3.51888247529217 5.00000000000000 1.00000000000000 -0.72270271801843 -0.69115901308510 1.00000000000000 12.00000000000000 k =i = j = mk = Wc =2 3 2 3.51888247529217 3.51888247529217c = t =-7.32558932518824 -0.06793885568129pii = pij =0.99770011455446 -0.06778260409592Pk =1.00000000000000 0 0 00 0.99770011455446 0.06778260409592 00 -0.06778260409592 0.99770011455446 00 0 0 1.00000000000000Vk =0.72270271801843 0.68956942653035 0.04684855775127 0 -0.69115901308510 0.72104058455581 0.04898667221449 00 -0.06778260409592 0.99770011455446 00 0 0 1.00000000000000Bk =65.55577579518456 -0.05326290114092 0.78398290060672 -0.72270271801843 -0.05326290114093 -46.79484464383285 0 -0.757352030626270.78398290060672 0.00000000000000 5.23906884864829 0.95085155680318 -0.72270271801843 -0.75735203062627 0.95085155680318 12.00000000000000 k = i = j = mk = Wc =3 4 3 0.95085155680318 0.95085155680318c = t =-3.55519802380213 -0.13796227443116pii = pij =0.99061693994324 -0.13666776612460Pk =1.00000000000000 0 0 00 1.00000000000000 0 00 0 0.99061693994324 0.136667766124600 0 -0.13666776612460 0.99061693994324 Vk =0.72270271801843 0.68956942653035 0.04640897492032 0.00640268773403 -0.69115901308510 0.72104058455581 0.04852702732712 0.006694899061430 -0.06778260409592 0.98833863446096 0.136353445918420 0 -0.13666776612460 0.99061693994324 Bk =65.55577579518456 -0.05326290114092 0.87539690801061 -0.60877636330628 -0.05326290114093 -46.79484464383285 0.10350561019562 -0.750245751038800.87539690801061 0.10350561019562 5.10788720522532 -0.00000000000000 -0.60877636330628 -0.75024575103880 -0.00000000000000 12.13118164342297 k =i = j = mk = Wc =4 1 3 0.87539690801061 0.87539690801061c = t =-34.52598931799430 -0.01447880833914pii = pij =0.99989519853186 -0.01447729093877Pk =0.99989519853186 0 -0.01447729093877 00 1.00000000000000 0 00.01447729093877 0 0.99989519853186 00 0 0 1.00000000000000Vk =0.72329885394465 0.68956942653035 0.03594133368062 0.00640268773403 -0.69038403871280 0.72104058455581 0.05852805174080 0.006694899061430.01430846595712 -0.06778260409592 0.98823505512105 0.13635344591842-0.00197857901214 0 -0.13665344314206 0.99061693994324Bk =65.56845049923633 -0.05175883827808 -0.00000000000000 -0.60871256264964-0.05175883827809 -46.79484464383285 0.10426586517177 -0.75024575103880-0.00000000000000 0.10426586517177 5.09521250117356 0.00881343252823-0.60871256264964 -0.75024575103880 0.00881343252823 12.13118164342297 k = i = j = mk = Wc =5 4 2 -0.75024575103880 0.75024575103880c = t =39.27114962375084 0.01272992971264pii = pij =0.99991898429114 0.01272889838836Pk =1.00000000000000 0 0 00 0.99991898429114 0 -0.012728898388360 0 1.00000000000000 00 0.01272889838836 0 0.99991898429114Vk =0.72329885394465 0.68959505973603 0.03594133368062 -0.00237529014628-0.69038403871280 0.72106738763160 0.05852805174080 -0.002483695665250.01430846595712 -0.06604148348220 0.98823505512105 0.13720519702737-0.00197857901214 0.01260946237032 -0.13665344314206 0.99053668440964Bk =65.56845049923633 -0.05950288535679 -0.00000000000000 -0.60800441437674-0.05950288535680 -46.80439521951078 0.10436960328590 0.00000000000000-0.00000000000000 0.10436960328590 5.09521250117356 0.00748552889860-0.60800441437674 0.00000000000000 0.00748552889860 12.14073221910090 k =i = j = mk = Wc =6 4 1 -0.60800441437674 0.60800441437674c = t =-43.93694931878409 -0.01137847012503pii = pij =0.99993527149402 -0.01137773361366Pk =0.99993527149402 0 0 0.011377733613660 1.00000000000000 0 00 0 1.00000000000000 0-0.01137773361366 0 0 0.99993527149402Vk =0.72327906130899 0.68959505973603 0.03594133368062 0.00585436528595-0.69031109235777 0.72106738763160 0.05852805174080 -0.010338540582940.01274645560931 -0.06604148348220 0.98823505512105 0.13735911385404-0.01324851347145 0.01260946237032 -0.13665344314206 0.99045005670500Bk =65.57536865930122 -0.05949903382392 -0.00008516835377 -0.00000000000000-0.05949903382393 -46.80439521951078 0.10436960328590 -0.00067700797883-0.00008516835377 0.10436960328590 5.09521250117356 0.00748504437150-0.00000000000000 -0.00067700797883 0.00748504437150 12.13381405903603 k =i = j = mk = Wc =7 3 2 0.10436960328590 0.10436960328590c = t =-2.486337309269764e+002 -0.00201098208240pii = pij =0.99999797798167 -0.00201097801616Pk =1.00000000000000 0 0 00 0.99999797798167 0.00201097801616 00 -0.00201097801616 0.99999797798167 00 0 0 1.00000000000000…………………………………………………………………………请注意迭代次数k,对称矩阵Bk,以特征向量为列向量的矩阵V,特征值为对角元的对角矩阵D 如下:V1 =0.68990429476497 -0.03732423222484 0.00588594854431 -0.722913771734500.72058252860300 -0.05998661236737 -0.01028322161977 0.69069289931337-0.06802029759277 -0.98795368410472 0.13841044442471 -0.012779125692250.01288885768193 0.13768088498200 0.99030407443219 0.01325486405899D1 =-46.80463661419736 0 0 00 5.09541442877727 0 00 0 12.13382202426702 00 0 0 65.57540016115307k =10B =65.57540016045945 0.00000000000175 -0.00020481967566 0.000000148628360.00000000000175 -46.80463661419739 0.00000062739984 0.00000000000000-0.00020481967566 0.00000062739984 5.09541442947090 -0.000000000007370.00000014862836 -0.00000000000000 -0.00000000000737 12.13382202426704V =0.72291389811507 0.68990429521617 0.03732177568689 0.00588595055487-0.69069269613201 0.72058252932816 0.05998894273570 -0.010283223540620.01278247108107 -0.06802028564977 0.98795364164379 0.13841044446122-0.01325533307898 0.01288885601755 -0.13768084024946 0.99030407439520D =65.57540016045945 0 0 00 -46.80463661419739 0 00 0 5.09541442947090 00 0 0 12.13382202426704Wc =6.920584967017158e-0045.5 豪斯霍尔德(Householder)方法及其MATLAB程序5.5.1 豪斯霍尔德方法及其MATLAB程序求初等反射矩阵P,使得PX的第一个分量以外的其余的分量都为零的MATLAB主程序function [xigema,rou,miou,P,PX]=Householder(X)n=size(X);nX=norm(X,2);xigema=nX*sign(X(1));rou=xigema*(xigema+X(1));miou=[xigema,zeros(1,n-1)]'+X,E=eye(n,n); C=2*miou*(miou)';P=E-C/(norm(miou,2)^2); PX=P*X;例5.5.1设向量=X()T1,2,2,确定一个初等反射矩阵P,使得PX的后两个分量为零.解输入MATLAB程序>> X=[2 2 1]'; [xigema,rou,miou,P,PX]=Householder(X)运行后屏幕显示结果P = PX =-0.6667 -0.6667 -0.3333 -3.0000-0.6667 0.7333 -0.1333 0.0000-0.3333 -0.1333 0.9333 0.00005.5.2 矩阵约化为上豪斯霍尔德矩阵及其MATLAB程序用豪斯霍尔德变换将n阶矩阵A规约成上豪斯霍尔德矩阵的MATLAB主程序function [k,Sk,uk,ck,Pk,Uk,Ak]=Householdrer1(A)n=size(A); Ak=A;for k=1:n-2k,Sk=norm(Ak(k+1:n,k))*sign(Ak(k+1,k)),uk= Ak(k+1:n,k)+ Sk*eye(n-k,1),ck=(norm(uk,2)^2)/2,Pk= eye(n-k,n-k)-uk*uk'/ck,Uk=[eye(k,k),zeros(k,n-k);zeros(n-k, k),Pk],A1=Uk*Ak;Ak=A1,end例5.5.3 用初等反射矩阵正交相似约化实矩阵A 为上豪斯霍尔德矩阵.其中⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=34 19- 37 78- 41- 31 11 72- 98 10.2- 78- 32-94- 21 12 1 0 1- 63- 72 1 5 2 3 17- 32 02 7 56- 51- 17 12- 34 52- 12A . 解 输入MATLAB 程序>> A=[12 -52 34 -12 17 -51;-56 7 2 0 32 -17;3 2 5 1 72 -63;-1 0 1 12 21 -94;-32 -78 -10.2 98 -72 11;31 -41 -78 37 -19 34];[k,Sk,uk,ck,Pk,Uk,Ak]=Householdrer1(A)运行后屏幕显示结果k = Sk = ck =1 -71.6310 9.1423e+003uk = Pk =-127.6310 -0.7818 0.0419 -0.0140 -0.4467 0.43283.0000 0.0419 0.9990 0.0003 0.0105 -0.0102-1.0000 -0.0140 0.0003 0.9999 -0.0035 0.0034-32.0000 -0.4467 0.0105 -0.0035 0.8880 0.108531.0000 0.4328 -0.0102 0.0034 0.1085 0.8949Uk =1.0000 0 0 0 0 00 -0.7818 0.0419 -0.0140 -0.4467 0.43280 0.0419 0.9990 0.0003 0.0105 -0.01020 -0.0140 0.0003 0.9999 -0.0035 0.00340 -0.4467 0.0105 -0.0035 0.8880 0.10850 0.4328 -0.0102 0.0034 0.1085 0.8949Ak =12.0000 -52.0000 34.0000 -12.0000 17.0000 -51.000071.6310 11.7128 -30.5678 -27.8930 1.6473 21.76430.0000 1.8892 5.7655 1.6556 72.7134 -63.9112-0.0000 0.0369 0.7448 11.7815 20.7622 -93.6963-0.0000 -76.8184 -18.3655 91.0066 -79.6101 20.71910.0000 -42.1447 -70.0897 43.7749 -11.6277 24.5846k = Sk = ck =2 87.6402 7.8464e+003uk = Pk =89.5295 -0.0216 -0.0004 0.8765 0.48090.0369 -0.0004 1.0000 0.0004 0.0002-76.8184 0.8765 0.0004 0.2479 -0.4126-42.1447 0.4809 0.0002 -0.4126 0.7736Uk =1.0000 0 0 0 0 00 1.0000 0 0 0 00 0 -0.0216 -0.0004 0.8765 0.48090 0 -0.0004 1.0000 0.0004 0.00020 0 0.8765 0.0004 0.2479 -0.41260 0 0.4809 0.0002 -0.4126 0.7736Ak =12.0000 -52.0000 34.0000 -12.0000 17.0000 -51.000071.6310 11.7128 -30.5678 -27.8930 1.6473 21.7643-0.0000 -87.6402 -49.9272 100.7790 -76.9476 31.4002-0.0000 -0.0000 0.7219 11.8223 20.7005 -93.6570-0.0000 0.0000 29.4202 5.9564 48.8026 -61.06030.0000 0.0000 -43.8731 -2.8860 58.8230 -20.2818…………………………………………………………………………k = Sk = ck =4 -12.2088 195.0398uk = Pk =-15.9753 -0.3085 0.951211.6133 0.9512 0.3085Uk =1.0000 0 0 0 0 00 1.0000 0 0 0 00 0 1.0000 0 0 00 0 0 1.0000 0 00 0 0 0 -0.3085 0.95120 0 0 0 0.9512 0.3085Ak =12.0000 -52.0000 34.0000 -12.0000 17.0000 -51.000071.6310 11.7128 -30.5678 -27.8930 1.6473 21.7643-0.0000 -87.6402 -49.9272 100.7790 -76.9476 31.40020.0000 -0.0000 -52.8292 -5.8754 21.3902 18.44030.0000 0.0000 0.0000 12.2088 40.2435 -106.81340.0000 0.0000 -0.0000 0.0000 64.7555 -34.09095.5.3 实对称矩阵的三对角化及其MATLAB程序将n阶实对称矩阵A规约成三对角形式的MATLAB主程序function T=house(A)[n,n]=size(A);for k=1:n-2s=norm(A(k+1:n,k),2);if (A(k+1,k)<0)s=-s;endr=sqrt(2*s*(A(k+1,k)+s));U(1:k)=zeros(1,k);U(k+1)=(A(k+1,k)+s)/r;U(k+2:n)=A(k+2:n,k)'/r;V(1:k)=zeros(1,k);V(k+1:n)=A(k+1:n,k+1:n)*U(k+1:n)';C=U(k+1:n)*V(k+1:n)';P(1:k)=zeros(1,k);P(k+1:n)=V(k+1:n)-C*U(k+1:n);A(k+2:n,k)=zeros(n-k-1,1);A(k,k+2:n)=zeros(1,n-k-1);A(k+1,k)=-s; A(k,k+1)=-s;A(k+1:n,k+1:n)=A(k+1:n,k+1:n)-2*U(k+1:n)'*P(k+1:n)-2*P( k+1:n)'*U(k+1:n);endT=A;例5.5.4 用初等反射矩阵正交相似约化实对称矩阵A为三对角矩阵.其中⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛------------------=5261215121416134237299021237312611451721253233219612371564901435612A 解 输入MATLAB 程序>> A=[12 -56 3 -14 -90 -4;-56 71 23 61 -9 -21;3 23 53 12 -72 51;-14 61 12 73 23 21;-90 -9 -72 23 -34 -61;-41 -21 51 21 -61 -52];T=house(A)运行后屏幕显示结果T =12.0000 114.5513 0 0 0 0114.5513 -43.2395 -108.2763 0 0 00 -108.2763 49.7411 -22.7766 0 00 0 -22.7766 40.2476 -89.1355 00 0 0 -89.1355 44.9606 39.30900 0 0 0 39.3090 19.29025.6 QR 方法及其MATLAB 程序5.6.5 最末元位移QR 法计算实对称矩阵特征值及其MATLAB 程序用最末元位移QR 方法求实对称矩阵A 全部特征值的MATLAB 主程序function tzg=qr4(A,t,max1)[n,n]=size(A); k=0;Ak=A;tzg=zeros(n); state=1;for i=1:n;while ((k<=max1)&(state==1)&(n>1))b1=abs(Ak(n,n-1)); b2=abs(Ak(n,n));b3=abs(Ak(n-1,n-1));b4=min(b2, b3); jd=10^(-t); jd1=jd*b4;if (b1>=jd1)sk=Ak(n,n); Bk=Ak-sk*eye(n); [Qk,Rk]=qr(Bk);At=Rk*Qk+sk*eye(n); k=k+1;tzgk=Ak(n,n);disp('请注意:下面的i 表示求第i 个特征值,k 是迭代次数,sk 是原点位移量,')disp(' Bk=Ak-sk*eye(n),Qk 和Rk 是Bk 的QR 分解,At=Rk*Qk+sk*eye(n)迭代矩阵:')i,state=1;k,sk,Bk,Qk,Rk,At,Ak=At;elsedisp('请注意:i 表示求第i 个特征值,tzgk 是矩阵A 的特征值的近似值,k 是迭代次数,')disp(' 下面的矩阵B 是m 阶矩阵At 的(m-1)阶主子矩阵,即At 降一阶.')i,tzgk=Ak(n,n),tzg(n,1)=tzgk;k=k,sk,Ak;B=Ak(1:n-1,1:n-1),Ak=B;n=n-1;state==1; i=i+1;endendendtzg(1,1)=Ak;tzg=sort(tzg(:,1));tzgk=Akdisp('请注意:n 阶实对称矩阵A 的全部真特征值lamoda 和至少含t个有效数字的近似特征值tzg 如下:')lamoda=sort(eig(A))例5.6.5 用最末元位移QR 方法求下列实对称矩阵的全部近似特征值,并将计算结果与A 全部真特征值比较.其中,2 1 1 1 1 3 1 21 1 4- 21 2 2 5)1(⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=A 精度为=ε510-; ,52612151214161342372990212373126114517212532332196123715641901435612)2(⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛------------------=A 精度为=ε410-.解 (1)首先保存用最末元位移QR 方法求实对称矩阵A 全部特征值的MATLAB 主程序为M 文件,取名为qr4.m.在MATLAB 工作窗口输入程序>> A=[5 2 2 1;2 -4 1 1;2 1 3 1;1 1 1 2]; tzg=qr4(A,5,100) 运行后屏幕显示结果请注意:下面的i 表示求第i 个特征值,k 是迭代次数,sk 是原点位移量,Bk=Ak-sk*eye(n),Qk 和Rk 是Bk 的QR 分解,At=Rk*Qk+sk*eye(n)迭代矩阵:i =1k =1sk =2Bk =3 2 2 12 -6 1 12 1 1 11 1 1 0Qk =-0.70710678118655 0.38807526285317 0.12674485010490 -0.57735026918963-0.47140452079103 -0.87963726246718 0.06337242505245 0-0.47140452079103 0.20697347352169 -0.63372425052448 0.57735026918963-0.23570226039552 0.18110178933148 0.76046910062937 0.57735026918963 Rk =-4.24264068711929 0.70710678118655 -2.59272486435067 -1.649915822768610 6.44204936336256 0.28458852609232 -0.284588526092320 0 0.44360697536713 -0.443606975367130 0 0 0.00000000000000At =6.27777777777778 -3.10388935193069 -0.10455916682125 0.00000000000000-3.10388935193069 -3.65930388219545 0.01147685957127 0.00000000000000-0.10455916682125 0.01147685957127 1.38152610441767 0.00000000000000 -0.00000000000000 0.00000000000000 0.00000000000000 2.00000000000000 请注意:i 表示求第i 个特征值,tzgk 是矩阵A 的特征值的近似值,k 是迭代次数,下面的矩阵B 是m 阶矩阵At 的(m-1)阶主子矩阵,即At 降一阶.i =1tzgk =2.00000000000000k =1sk =2B =6.27777777777778 -3.10388935193069 -0.10455916682125-3.10388935193069 -3.65930388219545 0.01147685957127-0.10455916682125 0.01147685957127 1.38152610441767请注意:下面的i 表示求第i 个特征值,k 是迭代次数,sk 是原点位移量,Bk=Ak-sk*eye(n),Qk和Rk是Bk的QR分解,At=Rk*Qk+sk*eye(n)迭代矩阵:i =2k =2sk =1.38152610441767Bk =4.89625167336011 -3.10388935193069 -0.10455916682125-3.10388935193069 -5.04082998661312 0.01147685957127-0.10455916682125 0.01147685957127 0Qk =-0.84445320114929 -0.53537837009187 0.016394874396770.53532568873289 -0.84460953959679 -0.007818734217300.01803324849744 0.00217404228940 0.99983502413586Rk =-5.79813264571247 -0.07718952005739 0.094439180886190 5.91931326753920 0.046285251232420 0 -0.00180396892170At =6.23815929000691 3.16959512520840 -0.000032531419853.16959512520840 -3.61788172311421 -0.00000392190472-0.00003253141985 -0.00000392190472 1.37972243310730请注意:i表示求第i个特征值,tzgk是矩阵A的特征值的近似值,k是迭代次数,下面的矩阵B是m阶矩阵At的(m-1)阶主子矩阵,即At降一阶.i =2tzgk =1.37972243310730k =2sk =1.38152610441767B =6.23815929000691 3.169595125208403.16959512520840 -3.61788172311421请注意:下面的i表示求第i个特征值,k是迭代次数,sk是原点位移量,Bk=Ak-sk*eye(n),Qk和Rk是Bk的QR分解,At=Rk*Qk+sk*eye(n)迭代矩阵:i =3k =3sk =-3.61788172311421Bk =9.85604101312112 3.169595125208403.16959512520840 0Qk =-0.95198403663348 -0.30614766697629-0.30614766697629 0.95198403663348Rk =-10.35315786173815 -3.017403961789690 -0.97036415284199At =7.16193047323385 0.297074721510000.29707472151000 -4.54165290634115请注意:下面的i表示求第i个特征值,k是迭代次数,sk是原点位移量,Bk=Ak-sk*eye(n),Qk和Rk是Bk的QR分解,At=Rk*Qk+sk*eye(n)迭代矩阵:i =3k =4sk =-4.54165290634115Bk =11.70358337957500 0.297074721510000.29707472151000 0。

数值分析中常用的matlab程序

数值分析中常用的matlab程序

1.% 最小二乘法拟合数据点方法1:% 左除右除:xA=B ==> x=B/A | Ax=B ==> x=B\A% A 表示拟合函数的组合,如:多项式插值,A=[1,x,x.^2,...,x.^n],表示拟合函数为% 多项式:s(x)=a0+a1*x+...+an*x^n;又如:A=[log(x),cos(x),exp(x)]%则表示拟合函数为s(x)=a0*ln(x)+a1*cos(x)+a2*exp(x)% 法方程为:A'*A*z=A'*y ==> A*z=y ==> z=A\y z=(a0,...,an)'% Date: 2012-1-1clear;clc;x=[0 0.25 0.5 0.75 1]';y=[1 1.284 1.6487 2.1170 2.7183]';%索要拟合的数据点x1=ones(size(x),1);A=[x1 x x.^2];%拟合函数Z=A\y %A中每列函数的参数% 最小二乘法拟合数据方法2:采用polyfit函数% Date:2012-1-1clear;clc;x=[0 0.25 0.5 0.75 1]';y=[1 1.284 1.6487 2.1170 2.7183]';%索要拟合的数据点p=polyfit(x,y,2) %polyfit(x,y,n),(x,y)为数据点坐标,n为拟合多项式阶数,p 为% 所求拟合多项式的幂次从高到低排列的系数。

2.% 复合梯形公式计算积分值% 输入:fun--积分函数;a,b--积分区间;n--区间等分数% 输出:I--数值积分结果% 调用格式(ex):re=ftrapz(@fun1,0,1,10)% 2012-1-1function I=ftrapz(fun,a,b,n)h=(b-a)/n;%区间等分x=linspace(a,b,n+1);%将a到b的区间等分成(n+1)-1个区间,数据点有(n+!)个y=feval(fun,x);I=h*(0.5*y(1)+sum(y(2:n))+0.5*y(n+1));%积分原函数% Date:2012-1-1function y=fun1(x)y=exp(-x);3.% 复合simpson公式求积分% 输入:fun--积分函数;a,b--积分区间;n--区间等分数% 输出:I--数值积分结果% 调用格式(ex):re=fsimpson(@fun1,0,1,10)% 2012-1-1function I=fsimpson(fun,a,b,n)h=(b-a)/n;x=linspace(a,b,2*n+1);y=feval(fun,x);I=(h/6)*(y(1)+2*sum(y(3:2:2*n-1))+4*sum(y(2:2:2*n))+y(2*n+1));4.% 两点GS-Legendre公式求积分% 输入:fun--积分函数;a,b--积分区间;% 输出:I--数值积分结果% 调用格式(ex):re=GSLege(@fun2,0,1)% 2012-1-1function I=GSLege(fun,a,b)%将区间[a.b]通过变量替换x=(a+b)/2-(b-a)/2*t变到[-1,1]%其中t取GS-Lege的高斯点m1=feval(fun,(a+b)/2+(b-a)/2*(-1/sqrt(3)));m2=feval(fun,(a+b)/2+(b-a)/2*(1/sqrt(3)));I=(b-a)/2*(m1+m2);% GS-Legendre公式的积分函数% Date:2012-1-1function y=fun2(x)y=sin(x)/x;5.% 追赶法求解线性方程组Ax=b,其中A是三对角方阵%function x=tridiagsolver(A,b)clear;clc;A=[2 -1 0 0;-1 3 -2 0;0 -2 4 -3;0 0 -3 5];%三对角矩阵,线性方程组系数矩阵b=[6,1,-2,1]';%[n,n]=size(A);for i=1:nif(i<2)l(i)=A(i,i);y(i)=b(i)/l(i);u(i)=A(i,i+1)/l(i);elseif i<nl(i)=A(i,i)-A(i,i-1)*u(i-1);y(i)=(b(i)-y(i-1)*A(i,i-1))/l(i);u(i)=A(i,i+1)/l(i);elsel(i)=A(i,i)-A(i,i-1)*u(i-1);y(i)=(b(i)-y(i-1)*A(i,i-1))/l(i);endendx(n)=y(n);for j=n-1:-1:1x(j)=y(j)-u(j)*x(j+1);endx6.% SOR迭代求解非线性方程组Ax=b% 输入:A--系数矩阵;b--;omega--松弛因子(0~2);tol--精度% 输出:x--方程的解向量;iter--迭代次数;% 调用格式(ex):[x,iter=sor(A,b,1.1,1e-4)% 2012-1-1%function [x,iter]=sor(A,b,omega,tol)%{%}clear;clc;A=[2 -1 0;-1 3 -1;0 -1 2];b=[1 8 -5]';omega=1.1;tol=1e-4;D=diag(diag(A));%diag(A)返回的是A的对角元组成的列向量;diag(b)返回的是以列向量b为对角元的方阵;L=D-tril(A);%tril(A)返回的是矩阵A的下三角矩阵;U=D-triu(A);%triu(A)返回的是矩阵A的上三角矩阵;x=zeros(size(b));%给定迭代初始值零向量iter=1;while iter<500x=(D-omega*L)\(omega*b+(1-omega)*D*x+omega*U*x);%迭代格式error=norm(b-A*x)/norm(b);%收敛条件if error<tolbreak;enditer=iter+1;endif iter>= 500fprintf('root not found!');end7.% 牛顿法求解非线性方程的根% 输入:fun--非线性函数;dfun--非线性函数导数;x0--初始值;tol--精度;% 输出:x--非线性方程数值根% 调用格式(ex):x=newton(@fun3,@dfun3,6,1e-3)% 2012-1-1function x=newton(fun,dfun,x0,tol)iter=1;if abs(feval(fun,x0))<tolx=x0;return;endwhile iter<500if iter==1x=x0-feval(fun,x0)/feval(dfun,x0);if abs(feval(fun,x))<tolbreak;endelsex=x-feval(fun,x)/feval(dfun,x);if abs(feval(fun,x))<tolbreak;endenditer=iter+1;endif iter==500fprintf('not successful!');x=NaN;end% newton的函数文件% Date:2012-1-1function y=fun3(x)y=3.*x.^3-8.*x.^2-8.*x-11;% newton的导函数文件% Date:2012-1-1function y=dfun3(x)y=9.*x.^2-16.*x-8;8.% 两点割线法求解非线性方程的根% 输入:fun--非线性函数;a,b--两个初始值;tol--精度;% 输出:x--非线性方程数值根% 调用格式(ex):x=gexian(@fun3,3,6,1e-3)% 2012-1-1function x=gexian(fun,a,b,tol)iter=1;xk1=a;xk2=b;while iter<500xk3=xk2-feval(fun,xk2)*(xk2-xk1)/(feval(fun,xk2)-feval(fun,xk1));if abs(feval(fun,xk3))<tolbreak;elsexk1=xk2;xk2=xk3;enditer=iter+1;endif iter==500fprintf('not successful!');x=NaN;elsex=xk3;end9.% 乘幂法求矩阵的按模最大特征值及其特征向量% 输入:A--要求的矩阵;v0--初始非零向量;tol--精度;% 输出:x--特征向量;lam--按模最大特征值% 调用格式(ex):[lam,x]=power(A,v0,1e-2)% 2012-1-1function [lam,x]=matrixpower(A,v0,tol)v1=A*v0;v2=A*v1;sum=0;p=0;for i=1:size(v1)if v1(i)~=0sum=sum+v2(i)/v1(i);p=p+1;endendlam0=sum/p;iter=2;vk1=v2;while iter<500vk2=A*vk1;sum=0;p=0;for i=1:size(vk1)if vk1(i)~=0sum=sum+vk2(i)/vk1(i);p=p+1;endendlam=sum/p;if abs(lam-lam0)<tolbreak;elselam0=lam;vk1=vk2;endendif iter==500fprintf('not successful!');lam=NaN;elsex=vk2;end9_2% 改进乘幂法求矩阵的按模最大特征值及其特征向量% 输入:A--要求的矩阵;v0--初始非零向量;tol--精度;% 输出:x--特征向量;lam--按模最大特征值% 调用格式(ex):[lam,x]=pMatrixPower(A,v0,1e-2)% Date:2012-1-2function [lam,x]=pMatrixPower(A,v0,tol)[ty,ti]=max(abs(v0));%返回v0中元素绝对值最大的元素值与下标,ti为下标lam0=v0(ti);u0=v0/lam0;iter=1;while iter<500v1=A*u0;[tv,ti]=max(abs(v1));lam1=v1(ti);u0=v1/lam1;if abs(lam0-lam1)<tolbreak;elselam0=lam1;iter=iter+1;endendif iter>=500fprintf('not successful!');lam=NaN;elselam=lam1;x=u0;end10.% 反幂法求矩阵的按模最小特征值及其特征向量% 输入:A--要求的矩阵;v0--初始非零向量;tol--精度;% 输出:x--特征向量;lam--按模最大特征值% 调用格式(ex):[lam,x]=invMatrixPower(A,v0,1e-2)% Date:2012-1-2function [lam,x]=invMatrixPower(A,v0,tol)[ty,ti]=max(abs(v0));lam0=v0(ti);u0=v0/lam0;iter=1;while iter<500v1=A\u0;[tv,ti]=max(abs(v1));lam1=v1(ti);u0=v1/lam1;if abs(1/lam0-1/lam1)<tolbreak;elselam0=lam1;iter=iter+1;endendif iter>=500fprintf('not successful!');lam=NaN;elselam=1/lam1;x=u0;end11.% 欧拉方法求解一阶常微分方程初值问题% 输入:fun--一阶常微分函数;a,b--求解区间;y0--函数在a点值y(a);n--所分区间数;% 输出:y--常微分方程在区间[a,b]上各点的数值解;% 调用格式(ex):y=odeEuler(@fun4,0,1,1,10)% Date:2012-1-2function y=odeEuler(fun,a,b,y0,n)h=(b-a)/n;y(1)=y0;x=a:h:b;for i=1:ny(i+1)=y(i)+h*feval(fun,x(i),y(i));end% 常微分方程fun4=0% Date:2012-1-2function re=fun4(x,y)re=y-2*x/y;12.% 改进欧拉公式(预估--校正)方法求解一阶常微分方程初值问题% 输入:fun--一阶常微分函数;a,b--求解区间;y0--函数在a点值y(a);n--所分区间数;% 输出:y--常微分方程在区间[a,b]上各点的数值解;% 调用格式(ex):y=pOdeEuler(@fun4,0,1,1,10)% Date:2012-1-2function y=pOdeEuler(fun,a,b,y0,n)h=(b-a)/n;y(1)=y0;x=a:h:b; for i=1:nyp=y(i)+h*feval(fun,x(i),y(i));yc=y(i)+h*feval(fun,x(i+1),yp);y(i+1)=0.5*(yp+yc);end13.% 梯形方法求解一阶常微分方程初值问题% 输入:fun--一阶常微分函数;a,b--求解区间;y0--函数在a点值y(a);n--所分区间数;% 输出:y--常微分方程在区间[a,b]上各点的数值解;% 调用格式(ex):y=trapezium(@fun4,0,1,1,10)% Date:2012-1-2function y=trapezium(fun,a,b,y0,n)h=(b-a)/n;y(1)=y0;x=a:h:b;tol=1e-6;for i=1:n%用不动点迭代的方法求解非线性方程:%y(i+1)=y(i)+h*feval(fun,x(i),y(i))/2+h*feval(fun,x(i),y(i+1))/2;iter=1;yy0=1+(i-1)*h;%迭代初始值while iter<500yy1=y(i)+h*feval(fun,x(i),y(i))/2+h*feval(fun,x(i)+h,yy0)/2;if abs(yy1-yy0)<tolbreak;elseyy0=yy1;iter=iter+1;endendif iter>=500printf('not successful!');y=NaN;return;elsey(i+1)=yy1;endend14.% 标准四阶四段龙格-库塔方法求解一阶常微分方程初值问题% 输入:fun--一阶常微分函数;a,b--求解区间;y0--函数在a点值y(a);n--所分区间数;% 输出:y--常微分方程在区间[a,b]上各点的数值解;% 调用格式(ex):y=longekuta(@fun4,0,1,1,10)% Date:2012-1-2function y=longekuta(fun,a,b,y0,n)h=(b-a)/n;y(1)=y0;for k=2:n+1x=a+(k-2)*h;k1=h*feval(fun,x,y(k-1));k2=h*feval(fun,x+h/2,y(k-1)+k1/2);k3=h*feval(fun,x+h/2,y(k-1)+k2/2);k4=h*feval(fun,x+h,y(k-1)+k3);y(k)=y(k-1)+(k1+2*k2+2*k3+k4)/6;end15.插值% 拉格朗日插值% 输入:x,y--插值数据点(x,y均为行向量);xh--要插值的点; % 输出:yh--插值结果;% 调用格式(ex):yh=lagrange(x,y,xh)% Date:2012-1-2function yh=lagrange(x,y,xh)n=length(x);m=length(xh);yh=zeros(1,m);c1=ones(n-1,1);c2=ones(1,m);for i=1:nxp=x([1:i-1 i+1:n]);yh=yh+y(i)*prod((c1*xh-xp'*c2)./(x(i)-xp'*c2));%prod对输入的一个向量返回其所有分量的乘积end%拉格朗日调用clear;clc;x=[11 12];y=[2.3979 2.4849];xh=11.75;yh=lagrange(x,y,xh)15_2% 牛顿插值% 输入:x,y--插值数据点(x,y均为行向量);xh--要插值的点; % 输出:yh--插值结果;% 调用格式(ex):yh=newtonPol(x,y,xh)% Date:2012-1-2function yh=newtonPol(x,y,xh)n=length(x);p(:,1)=x;p(:,2)=y;for j=3:n+1p(1:n+2-j,j)=diff(p(1:n+3-j,j-1))./(x(j-1:n)-x(1:n+2-j))';%求差商表endq=p(1,2:n+1)';%求牛顿法的系数--取第一行yh=0;m=1;yh=q(1);for i=2:nm=q(i);for j=2:im=m*(xh-x(j-1));%求牛顿法中各多项式值(xh-x0)…(xh-x n-1) endyh=yh+m;%求和end%牛顿插值调用clear;clc;x=[11 12 13];y=[2.3979 2.4849 2.5649];xh=11.75;yh=newtonPol(x,y,xh)。

数值研究分析试验幂法与反幂法matlab

数值研究分析试验幂法与反幂法matlab

数值分析试验幂法与反幂法matlab————————————————————————————————作者:————————————————————————————————日期:一、问题的描述及算法设计(一)问题的描述我所要做的课题是:对称矩阵的条件数的求解设计1、求矩阵A 的二条件数问题 A=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡----210121012 2、设计内容:1)采用幂法求出A 的. 2)采用反幂法求出A 的.3)计算A 的条件数 ⅡA Ⅱ2* ⅡA -1Ⅱ2=cond2(A )=/.(精度要求为10-6) 3、设计要求1)求出ⅡA Ⅱ2。

2)并进行一定的理论分析。

(二)算法设计1、幂法算法(1)取初始向量u )0((例如取u )0(=(1,1,…1)T ),置精度要求ε,置k=1.(2)计算v )(k =Au )1(-k ,m k =max(v )(k ), u )(k = v )(k / m k(3)若| m k = m 1-k |<ε,则停止计算(m k 作为绝对值最大特征值1λ,u )(k 作为相应的特征向量)否则置k=k+1,转(2)2、反幂法算法(1)取初始向量u )0((例如取u )0(=(1,1,…1)T ),置精度要求ε,置k=1.(2)对A 作LU 分解,即A=LU(3)解线性方程组 Ly )(k =u )1(-k ,Uv )(k =y )(k(4)计算m k =max(v )(k ), u )(k = v )(k / m k(5)若|m k =m 1-k |<ε,则停止计算(1/m k 作为绝对值最小特征值n λ,u )(k 作为相应的特征向量);否则置k=k+1,转(3).二、算法的流程图(一)幂法算法的流程图noyes开始k=0;m1=0 v=A*u [vmax,i]=max(abs(v m=v(i);u=v/mabs(m-m1)< 1e-6 index=1;break; 输出:m ,u ,index 结束m1=m;k=k+1(二)反幂法算法的流程图no yes开始输入A ;[m ,u,index] =pow_inv(A,1e-6) k=0;m1=0 v=invA*u [vmax,i]=max(abs(v)) m=v(i);u=v/mabs(m-m1)< 1e-6 index=1;break; 输出:m ,u ,index结束 m1=m;k=k+1 输入A ;三、算法的理论依据及其推导(一)幂法算法的理论依据及推导幂法是用来确定矩阵的主特征值的一种迭代方法,也即,绝对值最大的特征值。

幂法和反幂法的matlab实现

幂法和反幂法的matlab实现

幂法求矩阵主特征值及对应特征向量摘要矩阵特征值的数值算法,在科学和工程技术中很多问题在数学上都归结为矩阵的特征值问题,所以说研究利用数学软件解决求特征值的问题是非常必要的。

实际问题中,有时需要的并不是所有的特征根,而是最大最小的实特征根。

称模最大的特征根为主特征值。

幂法是一种计算矩阵主特征值(矩阵按模最大的特征值)及对应特征向量的迭代方法,它最大的优点是方法简单,特别适用于大型稀疏矩阵,但有时收敛速度很慢。

用java来编写算法。

这个程序主要分成了四个大部分:第一部分为将矩阵转化为线性方程组;第二部分为求特征向量的极大值;第三部分为求幂法函数块;第四部分为页面设计及事件处理。

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

关键字:主特征值;特征向量;线性方程组;幂法函数块POWER METHOD FOR FINDING THE EIGENVALUES AND CORRESPONDING EIGENVECTORS OF THEMATRIXABSTRACTNumerical 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幂法的基本理论和推导 (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求幂法函数块............….....…………...…......…………………………3.4界面设计与事件处理............….....…………...…......…………………………4 运行过程及结果 (6)4.1 运行过程.........................................................………………………………………. .64.2 运行结果 (6)4.3 结果分析 (6)5结论 (7)参考文献 (8)附录 (56)1 幂法设实矩阵n n ij a A ⨯=)(有一个完备的特征向量组,其特征值为n λλλ ,,21,相应的特征向量为n x x x ,,21。

matlab 数组幂运算

matlab 数组幂运算

matlab 数组幂运算我可以帮助你写一篇关于MATLAB 数组幂运算的1500-2000字的文章。

现在,让我们一起来逐步回答这个问题。

第一步:介绍MATLAB 数组幂运算在使用MATLAB 进行数值计算时,数组幂运算是一项非常重要的操作。

它可以对数组中的每个元素进行幂运算,并且能够快速且高效地执行。

在本文中,我们将学习如何使用MATLAB 对数组进行幂运算,并且将展示一些实际例子来进一步理解数学和编程的奇妙结合。

第二步:数组幂运算的语法和基本概念在MATLAB 中,数组幂运算使用符号“^”进行表示。

该符号放置在两个数组或矩阵之间,并且被视为一种“元素级操作”。

这意味着它将对两个数组(或矩阵)中的相应元素进行幂运算,生成一个新的结果矩阵或数组。

如果输入是两个实数数组,那么幂运算的结果将是每对相应元素的幂运算结果。

例如,如果输入为A 和B 两个数组,则结果数组C 的元素C(i,j) 将是A(i,j) 的B(i,j) 次幂。

对于复数数组,幂运算也是逐元素进行的。

这意味着对于每对相应的复数元素,幂运算将得到一对复数结果。

例如,如果有一个复数数组Z,那么Z(i,j) 的幂运算结果将是Z(i,j) 的第二个输入参数的Z(i,j) 次幂。

第三步:一些示例和实际应用理论还是有些抽象,让我们看一些具体的例子来更好地理解MATLAB 数组幂运算的用法和应用。

例子1:假设有两个输入数组A 和B,分别是2×2 的矩阵。

其中,矩阵A 的元素为[2 4; 1 3],矩阵B 的元素为[3 2; 5 2]。

现在,我们要将这两个矩阵进行幂运算。

在MATLAB 中,我们可以使用如下代码实现:matlabA = [2 4; 1 3];B = [3 2; 5 2];C = A.^B;disp(C);运行上述代码后,输出将是一个2×2 的矩阵,其中的元素为:8 161 9这是因为矩阵A 和B 的对应元素进行了幂运算。

数值分析课程设计+幂法与反幂法MATLAB

数值分析课程设计+幂法与反幂法MATLAB

一、问题的描述及算法设计(一)问题的描述本次课程设计我所要做的课题是:对称矩阵的条件数的求解设计 1、求矩阵A 的二条件数问题 A=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡----210121012 2、设计内容: 1)采用幂法求出A 的. 2)采用反幂法求出A 的.3)计算A 的条件数 ⅡA Ⅱ2* ⅡA -1Ⅱ2=cond2(A )=/.(精度要求为10-6)3、设计要求 1)求出ⅡA Ⅱ2。

2)并进行一定的理论分析。

(二)算法设计1、幂法算法(1)取初始向量u )0((例如取u )0(=(1,1,…1)T ),置精度要求ε,置k=1. (2)计算v )(k =Au )1(-k ,m k =max(v )(k ), u )(k = v )(k / m k(3)若| m k = m 1-k |<ε,则停止计算(m k 作为绝对值最大特征值1λ,u )(k 作为相应的特征向量)否则置k=k+1,转(2) 2、反幂法算法(1)取初始向量u )0((例如取u )0(=(1,1,…1)T ),置精度要求ε,置k=1. (2)对A 作LU 分解,即A=LU(3)解线性方程组 Ly )(k =u )1(-k ,Uv )(k =y )(k (4)计算m k =max(v )(k ), u )(k = v )(k / m k(5)若|m k =m 1-k |<ε,则停止计算(1/m k 作为绝对值最小特征值n λ,u )(k 作为相应的特征向量);否则置k=k+1,转(3).二、算法的流程图(一)幂法算法的流程图(二)反幂法算法的流程图三、算法的理论依据及其推导(一)幂法算法的理论依据及推导幂法是用来确定矩阵的主特征值的一种迭代方法,也即,绝对值最大的特征值。

稍微修改该方法,也可以用来确定其他特征值。

幂法的一个很有用的特性是它不仅可以生成特征值,而且可以生成相应的特征向量。

实际上,幂法经常用来求通过其他方法确定的特征值的特征向量。

数值分析3.1幂法和反幂法

数值分析3.1幂法和反幂法

第三章 矩阵的特征值与特征向量
3.1 幂法与反幂法 3.2 Jacobi方法
3.3 QR方法
第三章 矩阵的特征值与特征向量
3.1幂法与反幂法
一、乘幂法 二、反幂法
三、带原点位移的反幂法
四、反幂法的特点
第三章 矩阵的特征值与特征向量
3.1幂法与反幂法
一、乘幂法
1、基本思想
2、算法(迭代公式) ◆一般算法
具体算法: (1)使用范数 2
1 X 1 yk , k 1 1 X 1
(2)使用范数
uk A yk 1

k
er u k er y k 1
T
T
k
lim k 1
留为作业自学
具体算法: (1)使用范数 2 1 X 1 yk , k 1 1 X 1
1 2 n
第三章 矩阵的特征值与特征向量
一、乘幂法 1、基本思想 设A有n个线性无关的特征向量 X 1 , X 2 ,, X n ,
AX j j X j , j 1,2,, n
3.1幂法与反幂法
★ 设 1为实数而且是单根: 1 2 n
u0 1 X 1 2 X 2 n X n
具体算法: 按取范数的不同, 迭代公式也不同。 (1)使用范数 2
任取初始向量u0 R n T k 1 u k 1 u k 1 u k 1 yk 1 k 1 (3.4) u k A yk 1 k yk 1T uk k 1,2,
T
精确结果:
X 1 (0,0.5,1) , 1 45
T
max( uk ) 表示 u k 的绝对值最大的分量。 (3)

数值分析幂法与反幂法-matlab程序

数值分析幂法与反幂法-matlab程序

数值分析幂法与反幂法matlab程序随机产生一对称矩阵,对不同的原点位移和初值(至少取3个)分别使用幂法求计算矩阵的主特征值及主特征向量,用反幂法求计算矩阵的按模最小特征值及特征向量。

要求1)比较不同的原点位移和初值说明收敛性2)给出迭代结果,生成DOC文件。

3)程序清单,生成M文件。

解答:>> A=rand(5) %随机产生5*5矩阵求随机矩阵A =0.7094 0.1626 0.5853 0.6991 0.14930.7547 0.1190 0.2238 0.8909 0.25750.2760 0.4984 0.7513 0.9593 0.84070.6797 0.9597 0.2551 0.5472 0.25430.6551 0.3404 0.5060 0.1386 0.8143>> B=A+A' %A矩阵和A的转置相加,得到随机对称矩阵BB =1.4187 0.9173 0.8613 1.3788 0.80440.9173 0.2380 0.7222 1.8506 0.59790.8613 0.7222 1.5025 1.2144 1.34671.3788 1.8506 1.2144 1.0944 0.39290.8044 0.5979 1.3467 0.3929 1.6286B=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡6286.13929.03467.15979.08044.03929.00944.12144.18506.13788.13467.12144.15025.17222.08613.05979.08506.17222.02380.09173.08044.03788.18613.09173.04187.1编写幂法、反幂法程序:function [m,u,index,k]=pow(A,u,ep,it_max) % 求矩阵最大特征值的幂法,其中 % A 为矩阵;% ep 为精度要求,缺省为1e-5; % it_max 为最大迭代次数,缺省为100; % m 为绝对值最大的特征值; % u 为对应最大特征值的特征向量;% index ,当index=1时,迭代成功,当index=0时,迭代失败 if nargin<4 it_max=100; end if nargin<3 ep=1e-5; endn=length(A);index=0;k=0;m1=0;m0=0.01;% 修改移位参数,原点移位法加速收敛,为0时,即为幂法I=eye(n)T=A-m0*Iwhile k<=it_maxv=T*u;[vmax,i]=max(abs(v));m=v(i);u=v/m;if abs(m-m1)<ep;index=1;break;endm=m+m0;m1=m;k=k+1;endfunction[m,u,index,k]=pow_inv(A,u,ep,it_max)% 求矩阵最大特征值的反幂法,其中% A为矩阵;% ep为精度要求,缺省为1e-5;% it_max为最大迭代次数,缺省为100;% m为绝对值最大的特征值;% u为对应最大特征值的特征向量;% index,当index=1时,迭代成功,当index=0时,迭代失败if nargin<4it_max=100;endif nargin<3ep=1e-5;endn=length(A);index=0;k=0;m1=0;m0=0;% 修改移位参数,原点移位法加速收敛,为0时,即为反幂法I=eye(n);T=A-m0*I;invT=inv(T);while k<=it_maxv=invT*u;[vmax,i]=max(abs(v));m=v(i);u=v/m;if abs(m-m1)<epindex=1;break;endm1=m;k=k+1;endm=1/m;m=m+m0;修改输入的m0的值,所得结果:幂法:反幂法:THANKS !!!致力为企业和个人提供合同协议,策划案计划书,学习课件等等打造全网一站式需求欢迎您的下载,资料仅供参考。

同济大学数值分析matlab编程

同济大学数值分析matlab编程

同济⼤学数值分析matlab编程MATLAB 编程题库1.下⾯的数据表近似地满⾜函数21cx bax y ++=,请适当变换成为线性最⼩⼆乘问题,编程求最好的系数c b a ,,,并在同⼀个图上画出所有数据和函数图像.625.0718.0801.0823.0802.0687.0606.0356.0995.0628.0544.0008.0213.0362.0586.0931.0ii y x ----解:>> x=[-0.931 -0.586 -0.362 -0.213 0.008 0.544 0.628 0.995]'; >> y=[0.356 0.606 0.687 0.802 0.823 0.801 0.718 0.625]'; >> A= [x ones(8,1) -x.^2.*y]; >> z=A\y;>> a=z(1); b=z(2); c=z(3); >>xh=[-1:0.1:1]';>>yh=(a.*xh+b)./(1+c.*xh.^2); >>plot(x,y,'r+',xh,yh,'b*')2.若在Matlab ⼯作⽬录下已经有如下两个函数⽂件,写⼀个割线法程序,求出这两个函数精度为1010-的近似根,并写出调⽤⽅式:>> edit gexianfa.mfunction [x iter]=gexianfa(f,x0,x1,tol) iter=0;x=x1;while(abs(feval(f,x))>tol) iter=iter+1;x=x1-feval(f,x1).*(x1-x0)./(feval(f,x1)-feval(f,x0)); x0=x1;x1=x; end>> edit f.m function v=f(x) v=x.*log(x)-1;>> edit g.m function z=g(y) z=y.^5+y-1;>> [x1 iter1]=gexianfa('f',1,3,1e-10) x1 =1.7632 iter1 = 6>> [x2 iter2]=gexianfa('g',0,1,1e-10) x2 =0.7549 iter2 = 83.使⽤GS 迭代求解下述线性代数⽅程组:123123123521242103103x x x x x x x x x ì++=--++=í???-+=??解:>> edit gsdiedai.mfunction [x iter]=gsdiedai(A,x0,b,tol) D=diag(diag(A)); L=D-tril(A); U=D-triu(A); iter=0; x=x0;>> A=[5 2 1;-1 4 2;1 -3 10]; >> b=[-12 10 3]'; >>tol=1e-4; >>x0=[0 0 0]';>> [x iter]=gsdiedai(A,x0,b,tol); >>x x =-3.0910 1.2372 0.9802 >>iter iter = 64.⽤四阶Range-kutta ⽅法求解下述常微分⽅程初值问题(取步长h=0.01),(1)2x dy y e xy dx y ì??=++?í??=??解:>> edit ksf2.mfunction v=ksf2(x,y)v=y+exp(x)+x.*y; >> a=1;b=2;h=0.01; >> n=(b-a)./h; >> x=[1:0.01:2]; >>y(1)=2;>>for i=2:(n+1)k1=h*ksf2(x(i-1),y(i-1));k2=h*ksf2(x(i-1)+0.5*h,y(i-1)+0.5*k1); k3=h*ksf2(x(i-1)+0.5*h,y(i-1)+0.5*k2); k4=h*ksf2(x(i-1)+h,y(i-1)+k3); y(i)=y(i-1)+(k1+2*k2+2*k3+k4)./6; end >>y调⽤函数⽅法>> edit Rangekutta.mfunction [x y]=Rangekutta(f,a,b,h,y0) x=[a:h:b]; n=(b-a)/h; y(1)=y0; for i=2:(n+1)k1=h*(feval(f,x(i-1),y(i-1)));k2=h*(feval(f,x(i-1)+0.5*h,y(i-1)+0.5*k1)); k3=h*(feval(f,x(i-1)+0.5*h,y(i-1)+0.5*k2)); k4=h*(feval(f,x(i-1)+h,y(i-1)+k3)); y(i)=y(i-1)+ (k1+2*k2+2*k3+k4)./6; end>> [x y]=Rangekutta('ksf2',1,2,0.01,2); >>y5.取0.2h =,请编写Matlab 程序,分别⽤欧拉⽅法、改进欧拉⽅法在12x ≤≤上求解初值问题。

幂法和反幂法求矩阵特征值课程

幂法和反幂法求矩阵特征值课程
end
n=length(A);
index=0;
k=0;
m1=0;
m0=0;
I=eye(n);
T=A-m0*I;
while k<=it_max
v=T*u;
[vmax,i]=max(abs(v));
m=v(i);
u=v/m;
if abs(m-m1)<ep;
index=1;
break;
end
m=m+m0;
m1=m;
k=k+1;
end
在matlab输入面板,输入
A=rand(4);%产生一个4维随机矩阵
B=A+A’;
u=[1 1 1 1]’;%设立初始向量
[m,u,index,k]=pow(B,u,ep,it_max)%最多可省略2个参数
程序结束。
在M文件中可以通过改变m0的值改变原点位移,从而达到原点位移加速。
2、对于幂法的定理
按式(1)计算出m 和u 满足
m = , u =
(二)反幂法算法的理论依据及推导
反幂法是用来计算绝对值最小的特征值忽然相应的特征向量的方法。是对幂法的修改,可以给出更快的收敛性。
1、反幂法的迭代格式与收敛性质
设A是非奇异矩阵,则零不是特征值,并设特征值为
| |≥| |≥…≥| |>| |
4.对结果进行解释说明;
采用方法
及结果
说明
对于幂法和反幂法求解矩阵特征值和特征向量的问题将从问题分析,算法设计和流程图,理论依据,程序及结果进行阐述该问题。
一.问题的分析:
求n阶方阵A的特征值和特征向量,是实际计算中常常碰到的问题,如:机械、结构或电磁振动中的固有值问题等。对于n阶矩阵A,若存在数 和n维向量x满足
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数值分析幂法与反幂法 matlab程序
随机产生一对称矩阵,对不同的原点位移和初值(至少取3个)分别使用幂法求计算矩阵的主特征值及主特征向量,用反幂法求计算矩阵的按模最小特征值及特征向量。

要求
1)比较不同的原点位移和初值说明收敛性
2)给出迭代结果,生成DOC文件。

3)程序清单,生成M文件。

解答:
>> A=rand(5) %随机产生5*5矩阵求随机矩阵
A =
0.7094 0.1626 0.5853 0.6991 0.1493
0.7547 0.1190 0.2238 0.8909 0.2575
0.2760 0.4984 0.7513 0.9593 0.8407
0.6797 0.9597 0.2551 0.5472 0.2543
0.6551 0.3404 0.5060 0.1386 0.8143
>> B=A+A' %A矩阵和A的转置相加,得到随机对称矩阵B
B =
1.4187 0.9173 0.8613 1.3788 0.8044
0.9173 0.2380 0.7222 1.8506 0.5979
0.8613 0.7222 1.5025 1.2144 1.3467
1.3788 1.8506 1.2144 1.0944 0.3929
0.8044 0.5979 1.3467 0.3929 1.6286
B=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡6286.13929.03467.15979.08044.03929.00944.12144.18506.13788.13467.12144.15025.17222.08613.05979.08506.17222.02380.09173.08044.03788.18613.09173.04187.1
编写幂法、反幂法程序:
function [m,u,index,k]=pow(A,u,ep,it_max) % 求矩阵最大特征值的幂法,其中 % A 为矩阵;
% ep 为精度要求,缺省为1e-5;
% it_max 为最大迭代次数,缺省为100; % m 为绝对值最大的特征值;
% u 为对应最大特征值的特征向量;
% index ,当index=1时,迭代成功,当index=0时,迭代失败 if nargin<4
it_max=100; end
if nargin<3 ep=1e-5; end
n=length(A); index=0; k=0; m1=0;
m0=0.01;
% 修改移位参数,原点移位法加速收敛,为0时,即为幂法 I=eye(n) T=A-m0*I
while k<=it_max v=T*u;
[vmax,i]=max(abs(v)); m=v(i); u=v/m;
if abs(m-m1)<ep; index=1; break ; end
m=m+m0; m1=m; k=k+1; end
function[m,u,index,k]=pow_inv(A,u,ep,it_max)
% 求矩阵最大特征值的反幂法,其中
% A为矩阵;
% ep为精度要求,缺省为1e-5;
% it_max为最大迭代次数,缺省为100;
% m为绝对值最大的特征值;
% u为对应最大特征值的特征向量;
% index,当index=1时,迭代成功,当index=0时,迭代失败if nargin<4
it_max=100;
end
if nargin<3
ep=1e-5;
end
n=length(A);
index=0;
k=0;
m1=0;
m0=0;
% 修改移位参数,原点移位法加速收敛,为0时,即为反幂法I=eye(n);
T=A-m0*I;
invT=inv(T);
while k<=it_max
v=invT*u;
[vmax,i]=max(abs(v));
m=v(i);
u=v/m;
if abs(m-m1)<ep
index=1;
break;
end
m1=m;
k=k+1;
end
m=1/m;
m=m+m0;
修改输入的m0的值,所得结果:
⎥⎥⎥⎥⎦
⎢⎢⎢⎢⎣543。

相关文档
最新文档