人人范文网 范文大全

程序设计教案VB版第三章

发布时间:2020-03-02 15:09:06 来源:范文大全 收藏本文 下载本文 手机版

第三章

矩阵的基本计算程序设计方法

§3-1 行列式的性质(参见文献[39]P91)

矩阵的基本计算用到了行列式的内容。行列式通常用记号A或detA表示,det的英文单词是:determinant。为后面讨论矩阵计算时方便,下面先叙述行列式的十个主要性质。

1、把行列式的行变为同号数的列,行列式的值不变。即一个行列式与它的转置行列式的值相等。

2、对调行列式的两行(或两列),行列式的符号改变,但绝对值不变。

3、有两行(或两列)相同的行列式的值必等于零。

4、行列式等于它任意一行(或一列)的各元素与对应于它们的代数余子式的乘积的和。

5、行列式某一行(或某一列)的各元素与另一行(或另一列)对应元素的代数余子式的乘积的和恒等于零。

6、行列式的某一行(或某一列)的各元素如果有公因子,这公因子可以提到行列式记号的外面去。

7、如果行列式的某一行(或某一列)的各元素都等于零,则此行列式等于零。

8、如果行列式的第i行(或第i列)的各元素是两个加数的和,则此行列式可表示为两个行列式的和,其中一个行列式的第i行(或第i列)的各元素是上述的一个加数,而另一个行列式的第i行(或第i列)的各元素是另一个加数;在这三个行列式中,其余的各元素完全相同。

9、如果行列式的两行(或两列)的对应元素成比例,则此行列式等于零。

10、把行列式的某一行(或某一列)所有的元素同乘以一个数后,加于另一行(或另一列)的各对应元素上,行列式的值不变。

§3-2 矩阵基本计算的程序设计原理

矩阵的基本计算包括:矩阵的初等变换(行变换或列变换),矩阵的加、减法,矩阵的转置,矩阵乘法的定义及计算方法、代数余子式的定义及计算方法、按照定义式进行矩阵求逆等的编程方法。矩阵的英文单词是matrix。

一、矩阵的基本概念

设有一个线性方程组,例如测量平差中的条件方程: a1v1a2v2anvnwa0b1v1b2v2bnvnwb0 

rvrvrvw022nnr11等式的左边由三部分组成,即n个改正数vi,r个改正数的系数,r个闭合差。现在我们将这三种成份按原来排列的次序抽出来,分别组成下面三个表:

a1b1r1a2b2r2anbn, v1rnwawbvn, wr v2 18 这种由一组数排列成矩形的表,就称为矩阵。表中的数称为矩阵的元素。在第一个表中有r行n列元素,该表称为rn阶矩阵;第二个表只有一行n列元素,称为1n阶矩阵,或称行矩阵;第三表有r行一列元素,称为r1阶矩阵,或称列矩阵。

一般地,设有mn个元素排成矩形的表: a11a21 Aam1a12a22am2a1na2n amn称A为m行n列矩阵,aij称为矩阵A的元素。m行n列矩阵记为mn阶矩阵。

二、常见的特殊矩阵

1、方阵

当mn时,矩阵A称为n阶矩阵,或称n阶方阵。方阵A中的元素a11,a22,,ann称为矩阵A的对角线元素。例如条件平差中法方程组的系数阵,即为方阵。

2、零矩阵

如果某一个矩阵的元素全为零,则称为零矩阵,记为O。测量平差中常见的零矩阵是r1阶零矩阵,一般也用O表示。即:

00 O

0

3、对角阵

如果一个n阶方阵除对角线元素外,其余元素全为零,则称其为对角阵,即: a110 A00a22000 ann

4、单位矩阵

对于对角阵A,当主对角线元素全为1时,即:a11a22ann1,则称其为单位矩阵,简称单位阵,也称为幺阵,一般用E表示,也有用I表示的。

5、上三角矩阵

对于n阶方阵A,如果当ij时,aij均为零,则称该矩阵为上三角矩阵。即: a110A 0a12a220a1na2n ann

6、下三角矩阵

对于n阶方阵A,如果当ij时,aij均为零,则称该矩阵为下三角矩阵。即:

19 a11a21 Aan10a22an200 ann

7、行矩阵

对于mn阶矩阵,若m1时,则称其为行矩阵,也称为行向量。即:

Aa11

8、列矩阵

对于mn阶矩阵,若n1时,则称其为列矩阵,也称为列向量。即: a11a21 A

am1a12a1n

9、对称方阵

对于n阶方阵A: a11a21A an1a12a22an2a1na2n annann两侧的元素对称相等,若主对角线元素a11,a22,即aijaji,则称A为n阶对称方阵。

三、矩阵的基本计算

矩阵和行列式有本质的区别,属于两个不同的概念。行列式本身代表一个数,而矩阵仅仅是一组数排列成的表,它只说明表中各元素的排列位置,但矩阵的整体可以参与运算。下面介绍矩阵的基本计算规则。

㈠、矩阵的相等

设有两个同阶矩阵A(aij)和B(bij),如果它们的对应元素相等,即:aijbij,则矩阵A和B称为相等。

㈡、矩阵的加、减法

1、如果矩阵A(aij)和B(bij)是同阶矩阵,则矩阵A与B是可加减的。将两个同阶矩阵中对应元素求和差,称为矩阵的加减法。即: a11b11a21b21 ABabm1m1a12b12a22b22am2bm2a1nb1na2nb2n amnbmn 20 若令aijbijcij,C(cij),则矩阵:

CAB

可见矩阵C必与A、B同阶。

2、一个常数与一个矩阵相乘的定义及计算方法

常数与某矩阵A相乘所得之矩阵B,其元素就是常数与矩阵A中各个元素之乘积。即:

a11a21 BAAam1a12a22a1na2nam2amn 

3、矩阵加减法运算的基本性质

⑴、可结合性:A(BC)(AB)C ⑵、可交换性:ABBA

⑶、AOA (式中O为与A同阶的零矩阵)

⑷、()AAA (式中A为矩阵,、是常数) ⑸、(AB)AB (式中A、B为矩阵,是常数)

㈢、矩阵的转置

1、设A是mn阶矩阵,将A的行与列依次对换,得nm阶矩阵,称为A的转置矩阵,并记为A,或记为AT。即: a11a21 Aam1a12a22am2a1na11a2na12TA aamn1na21a22a2nam1am2 anm

2、转置矩阵的性质

⑴、将矩阵进行两次转置即得原矩阵,即:(A)⑵、(AB)⑶、(A)TTTTTA。

ATTB

TTTA (式中A为矩阵,是常数)

⑷、(AB)BA

⑸、对角阵的转置矩阵,仍为对角阵,且与原对角阵相等。 ⑹、若ATA,则A为对称矩阵。

㈣、矩阵相乘的定义及计算方法

1、两个矩阵相乘的定义及计算方法 设矩阵A的列数等于矩阵B的行数:

21 a11a21Aam1a12a22am2a1pb11a2pb21B bampp1c1nc2n cmnb12b22bp2b1nb2n bpn又设矩阵:

c11c21 Ccm1pc12c22cm2这里cijak1ik,将C称为bkj (i1,2,,m;j1,2,,n;1im;1jn)矩阵A与B的乘积,记作CAB。

2、矩阵乘积的性质

⑴、注意,一般地,ABBA,即矩阵的乘法一般不满足交换律。

⑵、矩阵乘法的结合律是成立的,即:(AB)CA(BC)或(A)B(AB)。 ⑶、矩阵乘法的分配律是成立的,即:A(BC)ABAC或(AB)CACBC。 ⑷、若A是n阶矩阵,E是n阶单位矩阵,则有:AEEAA。

㈤、代数余子式的定义及计算方法

在某阶行列式中,划去aij所在的行和列的元素,余下的元素构成一个降阶行列式,它与(1)ij的乘积叫做aij的代数余子式,记作Aij。例如:

a11a12a22a3223a13a23中a23的代数余子式为: a33行列式a21a31A23(1)a11a31a12a32a11a31a12a32

㈥、按照定义式进行矩阵求逆的一种编程方法

1、非奇异矩阵和奇异矩阵的定义 a11a21设n阶矩阵为:Aan1a12a22an2a1na2n,方阵A的行列式记作A,若A0,ann称A为非奇异矩阵(也称满秩矩阵);否则,称A为奇异矩阵。

2、逆矩阵的定义

22 对于n阶矩阵A,如果有一个n阶矩阵B,满足:ABBAE,则B叫做A的逆矩阵,A也叫做B的逆矩阵。A的逆矩阵记作A1,这里E是单位矩阵。

重要的性质:一个n阶矩阵有逆矩阵的必要与充分条件是该矩阵是非奇异矩阵。非奇异矩阵有唯一的逆矩阵。

3、伴随方阵的定义及逆矩阵的定义式

设A为一个n阶非奇异矩阵,则A有唯一的一个逆矩阵A1,其定义式为:

A11AA*

a11a21A an1 A*A11A12A1na12a22an2A21A22A2na12a22an2a1na2n annAn1An2 Anna1na2nanna11 Aa21an1

式中,Aij是行列式A中元素aij的代数余子式,称矩阵A*为矩阵A的伴随方阵,A1是矩阵A的逆矩阵。

4、矩阵A的行列式A的值的计算方法

根据行列式的性质10,首先通过列变换,将行列式第一行上除主对角线上的一个元素外,将这行上其它各元素均变换成零;这样,根据行列式的性质4可知,行列式的值等于第一行各元素与对应于它们的代数余子式的乘积之和,即等于第一行不为零的主对角线上的元与其代数余子式的积。 素a11若行列式的某一行(或某一列)的所有元素均为零,则该行列式的值为零,不需要进行变换。

a11a12a22an2a1na2nann Aa21an1

23

a110a222ana22a23a333an0na2annna2na3anna1ia11 a21an1

111a11a322an

上式中首先将a

12、a

13、„„、a1n均变换为0,具体方法如下:取乘数m1i

3、、n)(i

2、,从第二列起,每列各元素加上第一列各元素与m1i的积。例如,若想

a12使a12变为0,应将第一列各元素同乘以a11a13将第一列各元素同乘以a11后,加到第二列上;若想使a13变为0,应后,加到第三列上;„„。  仿照列变换,也可以进行行变换,使a

11、a

21、a

31、„„、an1均变换为0。

同理,往下可以逐次变换,每变换一次,行列式便降一阶,最后行列式A的值为经过变换的主对角线上各元素与每一次降阶时的(1)ij的积。

由于每次降阶时均有ij,所以(1)ij1。这样,矩阵A的行列式的值为: a33a44

Aa11a2

25、伴随矩阵A*中各元素Aij的计算方法

类似地,利用上述求行列式A的值的方法可以求出伴随矩阵A*中各元素Aij(Aij为行列式A中元素aij的代数余子式)的值。

6、有关逆矩阵的两个性质

①、若矩阵A、B都有逆矩阵,则其乘积AB也有逆矩阵,其(AB)②、设A为非奇异矩阵,则(A)1T1B1A1。

(A)T1,即(A)为AT的逆矩阵。

1T㈦、矩阵的秩

24

1、矩阵A的k阶子式的定义

在一个m行、n列的矩阵A中任取k行、k列,位于这些行、列相交处的元素构成的k阶行列式,叫做A的k阶子式。

2、矩阵A的秩的定义

矩阵A中不等于零的子式的最大阶数,叫做矩阵A的秩。

3、关于计算矩阵A的秩的三个定理(这三个定理又称为矩阵的初等变换) ①、如果一个矩阵的某一行(列)乘以一个不为零的数,则矩阵的秩不变。

②、若一个矩阵的任意两行(列)交换,则矩阵的秩不变。

③、如果一个矩阵A的某一行(列)乘以一个不为零的数k,然后加到另一行(列)的对应元素上去,则矩阵的秩不变。

㈧、分块矩阵

对于阶数比较高的矩阵A,在计算过程中,经常采用“矩阵分块法”,这样,它可以使计算简化为较低阶矩阵的运算。

1、分块矩阵的定义

将一个mn阶矩阵A用若干条纵线和横线分成多块低阶矩阵,每一块低阶矩阵称为A的子块,以子块为元素的矩阵称为分块矩阵。

实际计算中,多数情况下是将一个mn阶矩阵A化成m1阶或1n阶分快矩阵,即将矩阵A按列或按行分块,这样分块的作用是规律性强,利于编程计算。

2、分块矩阵的计算规则

⑴、作分块矩阵的加减法运算时,必须将两个同阶矩阵按相同方法分块,才能运算。

⑵、作分块矩阵A与B相乘时,A的列子阵数必须等于B的行子阵数,且对应相乘的子阵Cih与Dhi必须有Cih的列数等于Dhi的行数。即:

C11C21ACs1C12C22Cs2at1,l2at2,l2atm,l2C1pD11C2pD21 BDCspp1at1,lnat2,ln atm,lnD12D22Dp2D1rD2r Dpr且 Cihat1,l1at2,l1atm,l1bf1,e1bfx,e1 Dhibf1,en

bfx,en⑶、分块矩阵转置时,先将子阵看成矩阵的元素,作转置后,再将每个子阵转置。即:

C11C21ACs1

C12C22Cs2TC1pC11TC2pC12T ACTCsp1pC21C22C2pTTTTCs1TCs2 TCsp25 ⑷、分块矩阵求逆法 参见文献[30]P506。

四、矩阵基本计算程序示例

1、矩阵加减、转置、乘法运算 Private Sub GPHARRAY1_Click() Rem ***** 矩阵加减计算子菜单 ***** Dim I As Integer Dim J As Integer I = 3 J = 3 ReDim A(1 To I, 1 To J) As Double ReDim B(1 To I, 1 To J) As Double A(1, 1) = 1 A(1, 2) = 2 A(1, 3) = 3 A(2, 1) = 4 A(2, 2) = 5 A(2, 3) = 6 A(3, 1) = 7 A(3, 2) = 8 A(3, 3) = 9 B(1, 1) = 0.1: \'***** 第一行第一列 B(1, 2) = 0.2 B(1, 3) = 0.3 B(2, 1) = 0.4: \'***** 第二行第一列 B(2, 2) = 0.5 B(2, 3) = 0.6 B(3, 1) = 0.7: \'***** 第三行第一列 B(3, 2) = 0.8 B(3, 3) = 0.9 Cls Call GPHARRAY11(A(), B()) End Sub

Private Sub GPHARRAY11(ByRef A() As Double, ByRef B() As Double) Rem ***** 矩阵加减计算子程序 ***** Dim I As Integer Dim J As Integer

26 Dim N As Integer N = 3 ReDim C(1 To N, 1 To N) As Double For I = 1 To N For J = 1 To N C(I, J) = A(I, J) + B(I, J) Print Spc(6); \"C(\"; I; \",\"; J; \")=\"; C(I, J) Next J Next I End Sub

Private Sub GPHARRAY2_Click() Rem ***** 矩阵转置计算子菜单 ***** Dim I As Integer I = 2 J = 3 ReDim A(1 To I, 1 To J) As Double A(1, 1) = 2: \'***** 第一行第一列 A(1, 2) = 3 A(1, 3) = 4 A(2, 1) = 5: \'***** 第二行第一列 A(2, 2) = 6 A(2, 3) = 7 Cls Call GPHARRAY21(A()) End Sub

Private Sub GPHARRAY21(ByRef A() As Double) Rem ***** 矩阵转置计算子程序 ***** Dim I As Integer Dim J As Integer Dim I1 As Integer Dim J1 As Integer I = LBound(A, 1): \'***** 返回二维数组第一维的最小下标 J = LBound(A, 2): \'***** 返回二维数组第二维的最小下标 I1 = UBound(A, 1): \'***** 返回二维数组第一维的最大下标 J1 = UBound(A, 2): \'***** 返回二维数组第二维的最大下标 ReDim C(I To J1, J To I1) As Double For R = 1 To J1 For S = 1 To I1 C(R, S) = A(S, R) Print Spc(6); \"C(\"; R; \",\"; S; \")=\"; C(R, S) Next S 27 Next R End Sub

Private Sub GPHARRAY3_Click() Rem ***** 矩阵乘法计算子菜单 ***** Dim I As Integer Dim J As Integer I = 2 J = 3 K = 4 ReDim A(1 To I, 1 To J) As Double ReDim B(1 To J, 1 To K) As Double A(1, 1) = 1 A(1, 2) = 2 A(1, 3) = 3 A(2, 1) = 4 A(2, 2) = 5 A(2, 3) = 6 B(1, 1) = 1: \'***** 第一行第一列 B(1, 2) = 2 B(1, 3) = 3 B(1, 4) = 4 B(2, 1) = 5: \'***** 第二行第一列 B(2, 2) = 6 B(2, 3) = 7 B(2, 4) = 8 B(3, 1) = 9: \'***** 第三行第一列 B(3, 2) = 10 B(3, 3) = 11 B(3, 4) = 12 Cls Call GPHARRAY31(A(), B()) End Sub

Private Sub GPHARRAY31(ByRef A() As Double, ByRef B() As Double) Rem ***** 矩阵乘法计算子程序 ***** Dim I As Integer Dim J As Integer Dim K As Integer Dim U As Integer Dim I1 As Integer Dim J1 As Integer Dim K1 As Integer I1 = UBound(A, 1): \'***** 返回二维数组第一维的最大下标,此为矩阵A()的行数

28 J1 = UBound(A, 2): \'***** 返回二维数组第二维的最大下标,此为矩阵A()的列数 K1 = UBound(B, 2): \'***** 返回二维数组第二维的最大下标,此为矩阵B()的列数 Rem ***** C()=A()*B()

ReDim C(1 To I1, 1 To K1) As Double For I = 1 To I1 For K = 1 To K1 U = 0 For J = 1 To J1 U = U + A(I, J) * B(J, K) Next J C(I, K) = U Print Spc(6); \"C(\"; I; \",\"; K; \")=\"; C(I, K) Next K Next I End Sub

2、矩阵求逆

Private Sub Form_Load() Dim I As Integer Dim J As Integer Dim K As Integer Dim N As Integer Dim R As Integer Dim DetA As Double, S As Double N = 4 ReDim A(1 To N, 1 To N), B(1 To N, 1 To N) As Double, C(1 To N, 1 To N) As Double \'A数组存放源矩阵,B数组临时存放各元素的代数余子式,C数组存放逆矩阵 A(1, 1) = 10: A(1, 2) = 4: A(1, 3) = 3: A(1, 4) = 6 A(2, 1) = 5: A(2, 2) = 8: A(2, 3) = 7: A(2, 4) = 9 A(3, 1) = 1: A(3, 2) = 3: A(3, 3) = 5: A(3, 4) = 7 A(4, 1) = 2: A(4, 2) = 6: A(4, 3) = 3: A(4, 4) = 1 \'求矩阵的行列式 For I = 1 To N For J = 1 To N B(I, J) = A(I, J) Next J Next I Call QIUJUZHEN(B(), N, S) DetA = S Debug.Print \"S=\"; S \'求代数余子式及伴随矩阵 N = N1) = A(K, R) If R I Then B(K1, R1 For J = I + 1 To N M = -B(I, J) / B(I, I) For K = I To N B(K, J) = B(K, J) + M * B(K, I) \' Debug.Print \"B(\"; K; \",\"; J; \")=\"; B(K, J) Next K Next J Next I For I = 1 To N S = S * B(I, I) Next I

End Function 30

程序设计教案VB版第七章

程序设计教案VB版第一章、第二章

公开课 VB程序设计教案

VB程序设计课程设计

vb程序设计方法

VB程序设计的常用算法教案

VB选择结构程序设计的教案

VB程序设计(大作业)

VB程序设计教学小结

《VB程序设计》课程教学大纲

程序设计教案VB版第三章
《程序设计教案VB版第三章.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档