矩阵数值算法
矩阵特征值问题的数值方法.

矩阵特征值问题的数值方法矩阵特征值设A 是n 阶矩阵,x 是非零列向量. 如果有数λ 存在,满足那么,称x 是矩阵A 关于特征值λ的特征向量. 很显然一般地有主特征值的乘幂迭代法设n 阶矩阵A 的n 个特征值按模从大到小排序为:n 其对应的n 个线性无关的特征向量分别为:设是任意一个非零的n 维向量,则:假设,构造一个向量序列:则:或者:当时:如果是矩阵A 的关于特征值的一个特征向量,特征值个特征那么对于任意一个给定的,也是特征值的特征向量。
所以,是对主特征值对应的特征向量的近似。
如果则会变得很大或者如果,则会变得很大,或者如果,则会变得非常小,在实际计算中,为避免这种情况的出现需对做归一化处理况的出现,需对做归一化处理:由:左乘得:所以主特征值的近似值所以主特征值的近似值:残余误差向量定义为:当迭代次数充分大时,残余误差将充分小。
逆乘幂法:类似地,也可以求模最小特征值和对应的特征向量特征向量。
上述问题的主特征值问题就是矩阵A 的模最小特征值问题。
结果,逆乘幂法的迭代公式为:在实际应用中,无需计算逆矩阵,但需求解线性系统实对称矩阵的基本定理:对实对称矩阵A ,一定存在一个正交相似变换使得为对角矩阵且其对角矩阵P ,使得:为对角矩阵,且其对角的特征值元素为矩阵A 的特征值。
相似变换:相似变换保持矩阵特征值(但不是特征向量)不变不变。
(证明略)正交相似变换:中。
正交相似变换的例子—坐标旋转:叫旋转矩阵。
容易验证:。
适当选择旋转角,可消去xy 项—得到对角阵D 。
矩阵特征值问题的数值方法实对称矩阵的基本定理再看下面的例子:令:O 平面的坐标旋转变换适当同样地有:。
则是在x-O-z 平面的坐标旋转变换。
适当x z —D 。
选择旋转角可消去z 项得到对角阵实对称矩阵的Jacobi 方法:全部特征值和特征向量根据实对称矩阵的基本定理,求得矩阵A 的全部特征值的关键是找到正交相似变换矩阵P 使部特征值的关键,是找到正交相似变换矩阵P ,使得为对角阵。
矩阵的乘除法-概述说明以及解释

矩阵的乘除法-概述说明以及解释1.引言1.1 概述矩阵是线性代数中的重要概念,它是一个由数值排列成的矩形阵列。
矩阵可用于描述线性方程组、变换矩阵和向量空间等数学问题。
在实际应用中,矩阵广泛应用于计算机图形学、物理学、金融和工程等领域。
本文主要介绍矩阵的乘除法。
矩阵的乘法是指将两个矩阵相乘得到一个新的矩阵的运算。
矩阵的乘法具有结合性和分配性,但不满足交换律。
我们将详细探讨矩阵乘法的定义、基本性质和计算方法。
然而,矩阵的除法并不像乘法那样直接定义。
事实上,不存在矩阵的除法运算,因为矩阵除法的定义涉及到矩阵的逆。
我们将介绍矩阵的逆以及与矩阵除法相关的概念。
在文章的结论部分,我们将强调矩阵乘法在数学和实际应用中的重要性。
同时,我们也会讨论矩阵除法的限制和应用领域,并提供一些示例。
通过深入了解矩阵的乘除法,读者将能够更好地理解线性代数中的重要概念和运算,并将其应用于实际问题的求解中。
本文旨在为读者提供一个全面而清晰的介绍,帮助他们建立起对矩阵乘除法的深入理解。
1.2文章结构文章结构部分的内容:文章结构部分提供了对整篇文章的概要介绍和组织方式的说明。
通过明确提供文章的大纲,读者可以更好地理解文章的逻辑和结构,有助于他们更好地阅读和理解文章的内容。
在本文中,文章结构部分主要包括以下几个方面的信息:1. 引言:引言部分将对整篇文章的内容进行简要介绍和概述。
读者可以通过引言部分了解文章的主题和要解决的问题,从而更好地准备阅读和理解后续的内容。
2. 正文:正文部分是文章的主体,包含了关于矩阵的乘除法的详细讨论和分析。
正文部分将分为两个小节,分别介绍矩阵的乘法和除法的相关知识。
2.1 矩阵的乘法:在这一小节中,将给出矩阵的乘法的定义和基本性质的介绍。
读者将了解到矩阵乘法的基本概念和性质,从而为后续的计算方法提供基础。
2.1.1 定义和基本性质:本小节将详细介绍矩阵乘法的定义和基本性质。
从定义上了解矩阵乘法的运算规则,以及矩阵乘法的交换律、结合律等基本性质。
矩阵特征值和特征向量的数值解法

的常用方法是迭代每一步对向量 u
规范化。引入函数 max( u
(k )
) ,它表示取
向 量 u (k ) 中 按模 最大 的分 量,例 如, u (k ) =(2,-5,4)T,则 max( u (k ) )=-5,这 样
u (k ) 的最大分量为 1,即完成了规范化。 (k ) max (u )
7.1 幂法
7.1.1 幂法原理及实用幂法 幂法主要用于求矩阵按模最大的特征值和相应的特征向量。设矩阵,2,..., n) 满足:
| λ1 |>| λ 2 |≥| λ3 |≥ ... ≥| λ n | (7.1.1)
相应的 n 个特征向量 xi (i = 1,2,..., n) 线性无关。上述假设表明, λ1 为非零单 实根, x1 为实特征向量。
k →∞
k →∞
lim v ( k ) =
x1 max( x1 )
事实上,由式(7.1.5)知
v
(k )
=
Ak u ( 0 )
∏m
i =0
k
i
算法 7.1.1 实用幂法 (1) 输入: aij (i, j = 1,2, L n), ui (i = 1,2, L), ε ; (2) k = 1; m0 = max(ui );
7.1 幂法
幂法基本原理是:任取非零实向量 u
(0)
,做迭代
u ( k ) = Au ( k −1) = Ak u ( 0 ) (k = 1,2,...)
则
( 7 .1 . 2 )
λ1 = lim
这里 u j 表示向量 u
(k ) (k )
u (jk +1) u (jk )
k →∞
数值计算中的矩阵计算和迭代算法的应用

矩阵计算和迭代算法在数值计算中扮演着非常重要的角色。
它们被广泛应用于计算机科学、物理学、工程学等领域。
本文将讨论矩阵计算和迭代算法在数值计算中的应用,并且介绍一些相关的算法和方法。
首先,让我们了解一下矩阵计算的基本概念。
矩阵是由若干个数按照一定的规律排列成的一个矩形的数组。
矩阵的大小由它的行数和列数确定。
矩阵可以进行加法、减法、乘法等基本运算,而这些运算可以在数值计算中广泛应用。
矩阵计算在数值计算中有许多应用,其中最重要的应用之一是线性方程组的求解。
线性方程组是由一组线性方程构成的方程组,例如:a₁₁x₁ + a₁₂x₂ + a₁₃x₃ = b₁a₂₁x₁ + a₂₂x₂ + a₂₃x₃ = b₂a₃₁x₁ + a₃₂x₂ + a₃₃x₃ = b₃其中,x₁、x₂、x₃是未知数,a₁₁、a₁₂、a₁₃等是已知的系数,b₁、b₂、b₃是已知的常数。
矩阵可以非常方便地表示这个方程组,例如用向量表示法:Ax = b其中,A是一个矩阵,x和b是向量。
对于这个方程组,我们可以利用矩阵计算的方法,比如矩阵的求逆、矩阵的行变换等来求解未知数。
除了线性方程组的求解,矩阵计算还广泛应用于最小二乘问题的求解。
最小二乘法是一种数学优化问题的解法,主要用于拟合数据和估计参数。
在实际问题中,往往存在多个数据点,这些数据点可能存在噪声或误差。
最小二乘法可以通过最小化误差的平方和来找到最优的拟合曲线或参数。
迭代算法在数值计算中也扮演着重要的角色。
迭代算法是一种通过迭代逼近的方法求解数学问题的算法。
迭代算法的基本思想是从一个初始值开始,通过不断迭代来逼近问题的解。
迭代算法往往在每一次迭代中都使用前一次迭代的结果来计算新的值,直到满足收敛条件。
迭代算法在数值计算中有广泛的应用,其中最著名的应用之一是求解非线性方程的根。
非线性方程是指方程中包含未知数的幂、指数、对数等非线性项的方程。
对于非线性方程,往往不存在解析解,因此需要借助迭代算法来进行数值求解。
矩阵的运算及其运算规则

矩阵的运算及其运算规则矩阵是线性代数中的基本概念之一,它是一个由数个数按照矩形排列的数表。
矩阵的运算是对矩阵进行各种数学操作的过程,通过矩阵的运算可以实现对数据的处理和分析,广泛应用于各个领域。
矩阵的基本运算包括矩阵的加法、矩阵的乘法和矩阵的转置。
矩阵的加法是指将两个矩阵对应元素相加得到一个新的矩阵。
矩阵的乘法是指将两个矩阵按照一定规则相乘得到一个新的矩阵。
矩阵的转置是指将矩阵的行和列对调得到一个新的矩阵。
矩阵的运算规则包括加法的交换律和结合律,乘法的结合律和分配律。
加法的交换律指两个矩阵相加的结果与顺序无关;加法的结合律指三个矩阵相加的结果与加法的顺序无关。
乘法的结合律指三个矩阵相乘的结果与乘法的顺序无关;乘法的分配律指一个数与两个矩阵相乘的结果等于这个数与每个矩阵相乘后再相加的结果。
矩阵运算的应用非常广泛,特别是在线性代数、概率论和统计学中。
在线性代数中,矩阵的运算可以用于求解线性方程组、计算矩阵的秩和行列式、求解特征值和特征向量等问题。
在概率论和统计学中,矩阵的运算可以用于计算协方差矩阵、相关矩阵和条件概率矩阵,从而帮助我们分析和理解数据的关系和分布。
除了基本的矩阵运算外,还有一些特殊的矩阵运算。
例如,矩阵的逆运算是指对于一个可逆矩阵,可以找到一个矩阵使得两个矩阵相乘等于单位矩阵。
矩阵的转置运算是指将矩阵的行和列对调得到一个新的矩阵。
矩阵的迹运算是指矩阵主对角线上元素的和。
这些特殊的矩阵运算在实际应用中也有着重要的作用。
总的来说,矩阵的运算及其运算规则是线性代数中的重要内容,通过对矩阵的运算可以实现对数据的处理和分析,广泛应用于各个领域。
矩阵的运算规则包括加法的交换律和结合律,乘法的结合律和分配律。
除了基本的矩阵运算外,还有一些特殊的矩阵运算,如矩阵的逆运算、转置运算和迹运算。
这些矩阵运算在实际应用中具有重要作用,可以帮助我们解决各种数学和统计问题。
第三讲矩阵的基本运算

• 矩阵特征值和特征向量 • E=eig(A) 求特征值 • [V,D]=eig(A) D是特征值构成的对角阵;V是 特征向量阵,列为特征向量。 • 对称正定阵的cholesky分解 • R=chol(A) A对称正定,R为上三角阵,R’*R=A
• • • • • 方阵的QR分解 [Q,R]=qr(A) Q为正交矩阵,R为上三角阵,Q*R=A 可逆阵的 LU分解 [L,U]=lu(A) L是下三角阵,U是上三角阵 这些对解线性方程组还是很有利的。
3.1.5 矩阵的转置和共轭转置
复矩阵的共轭转置:B=A’ or B=ctranspose(A);
复矩阵的转置:B=A.’ or B=transpose(A)
注意:共轭转置是指先每个元素求共轭,再把矩 阵转置;转置运算是点运算。 3.1.6 矩阵的函数运算 1. 常用函数见P59函数表,是对每个元素求函数 值 记住一些常用函数格式!!!
第三讲内容介绍
目标:进一步了解MATLAB,能够
熟练掌握矩阵的各种基本运算法
则。
3.1 MATLAB矩阵的代数运算
3.1.1 加法和减法运算
C=A+B或 C=plus(A,B)
C=A-B或C=minus(A,B) 注意:加减运算要求A、B同构,即大小一样 特别地,标量可以和任意大小的矩阵进行加减 例题3.1.1显然略讲 3.1.2 乘法运算 普通矩阵乘法:C=A*B或C=mtimes(A,B)
3.4.2 两个集合的并集 格式:c=union(a,b)
%返回a,b的并集,即c=a
b
C=union(A,B,’rows’) %返回矩阵A,B不同行向量构成的大矩阵, 其中相同行向量只取其一。 [c,ia,ib]=union(…) % ia,ib分别表示c中行向量在原矩阵(向量)中的位置。 >> A=[1,2,3,4]; >> B=[2,4,5,8]; >> C=union(A,B) 则结果为: C= 1 2 3 4 5 8 >> A=[1,2,3,4;1,2,4,6]; >> B=[1,2,3,8;1,1,4,6]; >> [C,IA,IB]=union(A,B,'rows') C= 1 1 4 6 1 2 3 4 1 2 3 8 1 2 4 6 IA = 1
矩阵方程的数值解法[文献综述]
![矩阵方程的数值解法[文献综述]](https://img.taocdn.com/s3/m/a80deca389eb172ded63b78e.png)
文献综述信息与计算科学矩阵方程的数值解法一. 前言部分在科学、工程计算中,求解矩阵方程的任务占相当大的份额。
这是因为,矩阵方程不仅能以完整的形式作为许许多多实际问题的模型之一,而且还能作为不少其他数值方法处理过程中转化而成的组成部分。
例如,在电路网络、弹性力学、潮流计算、热传导、振动等领域,其基本模型就是矩阵方程,而求微分方程边值问题的差分法和有限元法等数值计算本身,也导致求解某些矩阵方程。
在系统控制等工程研究领域经常遇到矩阵方程的求解问题。
自动控制系统最重要的一个特征是稳定性问题,它表示系统能妥善地保持预定工作状态,耐受各种不利因素的影响,因此矩阵方程在系统的稳定性理论,极点配置等方面具有重要的意义。
在常微分方程的定性研究以及数值求解常微分方程的隐式Rung-kwtta 方法和块方法中,也需要求解矩阵方程。
此外,在广义特征值问题的摄动研究中及隐式常微分方程的数值解中,经常遇到矩阵方程的求解问题。
随着科学技术的迅速发展,矩阵方程越来越多地出现在科学与工程计算领域,关于这类问题的研究也日益受到人们的高度重视.对矩阵方程的研究具有很重要的理论意义和应用价值。
本文主要考虑形如B AX =的矩阵方程的数值解法,其中nn R A ⨯∈.,m n R B X ⨯∈由于线性方程组b Ax =, 其中n n R A ⨯∈,n R b ∈是矩阵方程B AX =的一个特例,所以本文试图将解线性方程组的一些经典方法,如高斯消元法、Jacobi 迭代法、Gauss-Seidcl 迭代法和SOR 迭代方法,推广用来解矩阵方程。
在这些方法的基础上,利用matlab 软件编程快速求出矩阵方程的解,并比较各种方法的优劣。
解上述线性方程组数值的数值方法主要有如下两类:(1)直接法: 就是在没有舍入误差的情况下, 通过有限步的代数运算可以求得方程组准确解的方法, 但由于实际计算中舍入误差是客观存在的, 因而使用此类方法也只能得到近似解。
矩阵的基本运算

矩阵的基本运算矩阵是数学中非常重要的一个概念,它在各个领域都有着广泛的应用。
矩阵的基本运算包括矩阵的加法、减法、数乘和矩阵的乘法等。
本文将围绕这些基本运算展开讨论。
首先,我们来讲解矩阵的加法。
如果两个矩阵A和B的维数相同,即都是m行n列的矩阵,那么它们可以相加。
矩阵的加法运算是将对应位置的元素相加得到新的矩阵。
即若A=(a_{ij}),B=(b_{ij}),则A+B=(a_{ij}+b_{ij})。
例如,给定两个矩阵A和B如下:A = [1 2 3][4 5 6]B = [7 8 9][10 11 12]则A与B的和C为:C = [1+7 2+8 3+9][4+10 5+11 6+12]简化运算后,C的结果为:C = [8 10 12][14 16 18]接下来我们讨论矩阵的减法。
矩阵的减法运算与加法类似,也是将对应位置的元素相减得到新的矩阵,即若A=(a_{ij}),B=(b_{ij}),则A-B=(a_{ij}-b_{ij})。
例如,给定两个矩阵A和B如下:A = [1 2 3][4 5 6]B = [7 8 9][10 11 12]则A与B的差D为:D = [1-7 2-8 3-9][4-10 5-11 6-12]简化运算后,D的结果为:D = [-6 -6 -6][-6 -6 -6]矩阵的数乘是指将一个矩阵的每个元素都乘以一个实数。
即若A=(a_{ij})是一个m行n列的矩阵,k是一个实数,那么kA=(ka_{ij})。
例如,给定一个矩阵A和一个实数k如下:A = [1 2 3][4 5 6]k = 2则kA的结果为:kA = [2*1 2*2 2*3][2*4 2*5 2*6]简化运算后,kA的结果为:kA = [2 4 6][8 10 12]最后我们来讨论矩阵的乘法。
矩阵的乘法运算是指矩阵与矩阵之间进行乘法运算,得到一个新的矩阵。
矩阵的乘法有一定的规则,即若A是一个m行n列的矩阵,B是一个n行p列的矩阵,那么它们可以相乘,得到一个m行p列的矩阵C。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算实习报告一 实习目的(1)了解矩阵特征值与相应特征向量求解的意义,理解幂法和反幂法的原理,能编制此算法的程序,并能求解实际问题。
(2)通过对比非线性方程的迭代法,理解线性方程组迭代解法的原理,学会编写Jacobi 迭代法程序,并能求解中小型非线性方程组。
初始点对收敛性质及收敛速度的影响。
(3)理解 QR 法计算矩阵特征值与特征向量的原理,能编制此算法的程序,并用于实际问题的求解。
二 问题定义及题目分析1. 分别用幂法和幂法加速技术求矩阵2.5 2.53.00.50.0 5.0 2.0 2.00.50.5 4.0 2.52.52.55.03.5-⎛⎫⎪-⎪= ⎪--⎪--⎝⎭A 的主特征值和特征向量.2. 对于实对称矩阵n n ⨯∈A R ,用Jacobi 方法编写其程序,并用所编程序求下列矩阵的全部特征值.151541141144114114⨯-⎛⎫ ⎪-- ⎪ ⎪- ⎪=⎪ ⎪- ⎪-- ⎪ ⎪-⎝⎭A3. 对于实矩阵n n ⨯∈A R ,用QR 方法编写其程序,并用所编程序求下列矩阵的全部特征值:11121113,4,5,62311111n n n nn n ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥==+⎢⎥⎢⎥⎢⎥⎢⎥+⎣⎦A三 概要设计(1) 幂法用于求按模最大的特征值及其对应的特征向量的一种数值算法,它要求矩阵 A 的特征值有如下关系: 12n ...λλλ>≥≥ ,对于相应的特征向量。
其算法如下:Step 0:初始化数据0,, 1.A z k = Step 1:计算1k k y A z +=。
Step 2:令 kkm y ∞=。
Step 3:令 k k k z y m = ;如果1k k m m +≈或1k k z z +≈,则 gotoStep 4;否则 , k = k + 1 ,goto Step 1。
Step 4:输出结果算法说明与要求输入参数为实数矩阵、初始向量、误差限与最大迭代次数。
输出参数为特征值及相对应的特征向量。
注意初始向量不能为“0”向量。
(2) 迭代法的原理如果能将方程 Ax =b 改写成等价形式:x=Bx+f 。
如果B 满足:ρ(B )<1,则对于任意初始向量 x (0) ,由迭代 x ( k + 1) = Bx (k ) + f 产生的序列均收敛到方程组的精确解。
迭代法中两种最有名的迭代法就是Jacobi 迭代法,它的迭代矩阵 B 为:1()J DL U -=-+,1f D b -=其中,D 为系数矩阵 A 的对角元所组成对角矩阵,L 为系数矩阵 A 的对角元下方所有元素所组成的下三角矩阵,U 为系数矩阵 A 的对角元上方所有元素所组成的上三角矩阵。
算法如下:Step 0:初始化数据 00,,,,k A b x δ=和ε。
Step 1:计算D,L,U,J 或G, 得到迭代矩阵B. Step 2::1kk =+0x B x f *=+0x x =如果0x x δ-<或()fx ε≤,goto Step 3;否则 gotoStep 2。
Step 3:输出结果。
程序说明与要求程序的输入参数为系数矩阵与常量、初始向量及误差控制,输出参数为方程组的近似解。
要求输入系数 A 中对角元不能存在 0,如果对角元出现 0 元素,则可以通过交换方程组中方程的次序解决。
(3) QR 法原理QR 算法是求实对称矩阵全部特征的最有效方法。
其基本过程就是利用矩阵的QR 分解,即将任一实数矩阵分解为一个正交矩阵Q 与一个上三角矩阵 R 的乘积。
QR 算法的计算过程如下Step 0:初始化数据0000,,,,1A Q R A Q R k == Step 1:令 11k k k A Q R ++=。
Step 2:计算 k k k A Q R =Step 3:令k m 为k R 所有对角元下方元素绝对值之和;如果k m ε< ,则 goto Step 4;否则, k = k + 1 ,goto Step 1。
Step 4:输出结果。
算法的要求与说明先利用函数 house 将对称矩阵 A 通过Householder 相似变换为对称三对角阵 T ,然后通过程序 QR_method 求出矩阵 T 的特征值。
程序输入参数为矩阵 A ,输出参数为矩阵 A 的所有特征值。
四 详细设计源程序 (1)#include"math.h" #include"stdio.h"void main() /*主函数*/ {int i,j; int n=4,k=0; floata[4][4]={{2.5,-2.5,3.0,0.5},{0.0,5.0,-2.0,2.0},{-0.5,-0.5,4.0,2.5},{-2.5,-2.5,5.0,3.5}},x[4]={1,1,1,1};double max,m,y[4],z[4],ej=0.0001,e;printf("k max(xk) y(k)=x(k)/max(x(k))x(k+1)=a*y(k)\n"); /*输出格式*/ cyclo:{for(i=0;i<n;i++) /*循环次数统计并从0次开始输出,并缓存临时向量组用于后面的循环条件比较*/z[i]=x[i];k=k+1;printf("%d ",k-1);{max=0.0; /*比较求出向量组x[]的元素最大值*/for(i=0;i<n;i++)if(fabs(x[i])>max)max=fabs(x[i]);}for(i=0;i<n;i++) /*求出向量组y[]的各元素值*/y[i]=x[i]/max;printf("%f ",max);printf("("); /*输出y[i]*/for(i=0;i<n;i++)printf("%f ",y[i]);printf(")");for(i=0;i<n;i++) /*计算求出x(k+1)的元素值*/{m=0.0;for(j=0;j<n;j++)m+=a[i][j]*y[j];x[i]=m;}printf("("); /*输出x(k+1)的元素值*/for(i=0;i<n;i++)printf("%f ",x[i]);printf(")\n");e=0.0; /*以下是判定循环条件如果前后两次结果差值大于给定的误差限,则继续循环,此处也可以采用真值来进行比较,采用真值就需要再最开始给定真值*/for(i=0;i<n;i++)if(e<fabs(x[i]-z[i]))e=fabs(x[i]-z[i]);if(e>ej) goto cyclo;else{printf("at last %f ",max); /*输出循环中止时的最终结果,即矩阵的主特征值和对应的特征向量y[]*/printf("(");for(i=0;i<n;i++)printf("%f ",y[i]);printf(")\n");}}}(2)#include <stdio.h>#include <math.h>//a 存放n阶实对称阵,返回时对角线存放n个特征值//n 矩阵阶数//v n阶矩阵,第j列为对应第j个特征值的特征向量//eps 控制精度//jt 最大迭代次数//返回值:大于0则计算成功,小于0则失败int jacobi(double *a,int n,double *v,double eps,int jt) {int i,j,p,q,u,w,t,s,l;double fm,cn,sn,omega,x,y,d;l=1;for (i=0; i<=n-1; i++){ v[i*n+i]=1.0;for (j=0; j<=n-1; j++)if (i!=j) v[i*n+j]=0.0;}while (1){ fm=0.0;for (i=1; i<=n-1; i++)for (j=0; j<=i-1; j++){ d=fabs(a[i*n+j]);if ((i!=j)&&(d>fm)){ fm=d; p=i; q=j;}}if (fm<eps) return(1);if (l>jt) return(-1);l=l+1;u=p*n+q; w=p*n+p; t=q*n+p; s=q*n+q;x=-a[u]; y=(a[s]-a[w])/2.0;omega=x/sqrt(x*x+y*y);if (y<0.0) omega=-omega;sn=1.0+sqrt(1.0-omega*omega);sn=omega/sqrt(2.0*sn);cn=sqrt(1.0-sn*sn);fm=a[w];a[w]=fm*cn*cn+a[s]*sn*sn+a[u]*omega;a[s]=fm*sn*sn+a[s]*cn*cn-a[u]*omega;a[u]=0.0; a[t]=0.0;for (j=0; j<=n-1; j++)if ((j!=p)&&(j!=q)){ u=p*n+j; w=q*n+j;fm=a[u];a[u]=fm*cn+a[w]*sn;a[w]=-fm*sn+a[w]*cn;}for (i=0; i<=n-1; i++)if ((i!=p)&&(i!=q)){ u=i*n+p; w=i*n+q;fm=a[u];a[u]=fm*cn+a[w]*sn;a[w]=-fm*sn+a[w]*cn;}for (i=0; i<=n-1; i++){ u=i*n+p; w=i*n+q;fm=v[u];v[u]=fm*cn+v[w]*sn;v[w]=-fm*sn+v[w]*cn;}}return(1);}int main(){int i,j;double a[15][15];double v[15][15];printf("示例矩阵:\n");for(i=0;i<=14;i++){for(j=0;j<=14;j++){if(i==j)a[i][j]=4;else if(fabs(i-j)==1)a[i][j]=-1;elsea[i][j]=0;printf("%lf\t",a[i][j]);}printf("\n");}jacobi((double*)a,15,(double*)v,0.0001,100);for(i=0;i<=14;i++){printf("特征值为:%lf\t",a[i][i]);}return 0;}(3)#include<iostream>#include<fstream>#include<iomanip>using namespace std;#include<math.h>#define N 3 //矩阵的维数#define NUM 15 //QR分解次数#define SNUM 13 //用来控制输出格式void Print(long double A[N][N],long double Q[N][N],long double R[N][N]); //矩阵输出void QR(long double A[N][N],long double Q[N][N],long double R[N][N]); //QR分解void Multiplicate(long double A[N][N],long double R[N][N],long doubleQ[N][N]); //迭代,获得下一次矩阵A=QRint main(){int i,j;long double A[N][N];long double Q[N][N]={0};long double R[N][N]={0};cout<<"*************************************************************"<<endl;cout<<"输入初始矩阵:\n";cout<<"-------------------------------------------------------------"<<endl;for(i=0;i<N;i++)for(j=0;j<N;j++)cin>>A[i][j];cout<<"*************************************************************"<<endl;cout<<"输出每一步迭代过程: \n";cout<<"*************************************************************"<< endl;for(i=1;i<=NUM;i++){QR(A,Q,R);cout<<"第"<<i<<"步QR分解:\n";cout<<"-------------------------------------------------------------"<< endl;Print(A,Q,R);Multiplicate(A,R,Q);}cout<<"矩阵特征值为:\n";cout<<"-------------------------------------------------------------"<< endl;for(i=0;i<N;i++) //输出特征值cout<<"r["<<(i+1)<<"]="<<R[i][i]<<endl;cout<<"*************************************************************"<< endl;return 0;}void QR(long double A[N][N],long double Q[N][N],long double R[N][N]) {int i,j,k,m;long double temp;long double a[N],b[N];for(j=0;j<N;j++){for(i=0;i<N;i++){a[i]=A[i][j];b[i]=A[i][j];}for(k=0;k<j;k++){R[k][j]=0;for(m=0;m<N;m++)R[k][j]+=a[m]*Q[m][k];for(m=0;m<N;m++)b[m]-=R[k][j]*Q[m][k];}temp=0;for(i=0;i<N;i++)temp+=b[i]*b[i];R[j][j]=sqrt(temp);for(i=0;i<N;i++)Q[i][j]=b[i]/sqrt(temp);}}void Multiplicate(long double A[N][N],long double R[N][N],long doubleQ[N][N]){int i,j,k;long double temp;for(i=0;i<N;i++)for(j=0;j<N;j++){temp=0;for(k=0;k<N;k++)temp+=R[i][k]*Q[k][j];A[i][j]=temp;}}void Print(long double A[N][N],long double Q[N][N],long double R[N][N]) {int i,j;cout<<left;cout<<"矩阵A:\n";for(i=0;i<N;i++){for(j=0;j<N;j++)cout<<setw(SNUM)<<A[i][j];cout<<endl;}cout<<"-------------------------------------------------------------"<< endl;cout<<"矩阵Q:\n";for(i=0;i<N;i++){for(j=0;j<N;j++)cout<<setw(SNUM)<<Q[i][j];cout<<endl;}cout<<"-------------------------------------------------------------"<< endl;cout<<"矩阵R:\n";for(i=0;i<N;i++){for(j=0;j<N;j++)cout<<setw(SNUM)<<R[i][j];cout<<endl;}cout<<"*************************************************************"<< endl;}五调试与测试结果分析及总结(1)(2)(3)六分析及总结(1)参考幂法程序,写出求矩阵按模最小特征值的反幂法程序,并用计算上例的按模最小特征值与其对应的特征向量。