程序设计教案VB版第三章由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“第三章vb程序设计”。
第三章
矩阵的基本计算程序设计方法
§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。
一、矩阵的基本概念
设有一个线性方程组,例如测量平差中的条件方程: a1v1a2v2anvnwa0b1v1b2v2bnvnwb0
rvrvrvw022nnr11等式的左边由三部分组成,即n个改正数vi,r个改正数的系数,r个闭合差。现在我们将这三种成份按原来排列的次序抽出来,分别组成下面三个表:
a1b1r1a2b2r2anbn,v1rnwawbvn,wr v2 18 这种由一组数排列成矩形的表,就称为矩阵。表中的数称为矩阵的元素。在第一个表中有r行n列元素,该表称为rn阶矩阵;第二个表只有一行n列元素,称为1n阶矩阵,或称行矩阵;第三表有r行一列元素,称为r1阶矩阵,或称列矩阵。
一般地,设有mn个元素排成矩形的表: a11a21 Aam1a12a22am2a1na2n amn称A为m行n列矩阵,aij称为矩阵A的元素。m行n列矩阵记为mn阶矩阵。
二、常见的特殊矩阵
1、方阵
当mn时,矩阵A称为n阶矩阵,或称n阶方阵。方阵A中的元素a11,a22,,ann称为矩阵A的对角线元素。例如条件平差中法方程组的系数阵,即为方阵。
2、零矩阵
如果某一个矩阵的元素全为零,则称为零矩阵,记为O。测量平差中常见的零矩阵是r1阶零矩阵,一般也用O表示。即:
00 O
0
3、对角阵
如果一个n阶方阵除对角线元素外,其余元素全为零,则称其为对角阵,即: a110 A00a22000 ann
4、单位矩阵
对于对角阵A,当主对角线元素全为1时,即:a11a22ann1,则称其为单位矩阵,简称单位阵,也称为幺阵,一般用E表示,也有用I表示的。
5、上三角矩阵
对于n阶方阵A,如果当ij时,aij均为零,则称该矩阵为上三角矩阵。即: a110A 0a12a220a1na2n ann
6、下三角矩阵
对于n阶方阵A,如果当ij时,aij均为零,则称该矩阵为下三角矩阵。即:a11a21 Aan10a22an200 ann
7、行矩阵
对于mn阶矩阵,若m1时,则称其为行矩阵,也称为行向量。即:
Aa118、列矩阵
对于mn阶矩阵,若n1时,则称其为列矩阵,也称为列向量。即: a11a21 A
am1a12a1n
9、对称方阵
对于n阶方阵A: a11a21A an1a12a22an2a1na2n annann两侧的元素对称相等,若主对角线元素a11,a22,即aijaji,则称A为n阶对称方阵。
三、矩阵的基本计算
矩阵和行列式有本质的区别,属于两个不同的概念。行列式本身代表一个数,而矩阵仅仅是一组数排列成的表,它只说明表中各元素的排列位置,但矩阵的整体可以参与运算。下面介绍矩阵的基本计算规则。
㈠、矩阵的相等
设有两个同阶矩阵A(aij)和B(bij),如果它们的对应元素相等,即:aijbij,则矩阵A和B称为相等。
㈡、矩阵的加、减法
1、如果矩阵A(aij)和B(bij)是同阶矩阵,则矩阵A与B是可加减的。将两个同阶矩阵中对应元素求和差,称为矩阵的加减法。即: a11b11a21b21 ABabm1m1a12b12a22b22am2bm2a1nb1na2nb2n amnbmn 20 若令aijbijcij,C(cij),则矩阵:
CAB
可见矩阵C必与A、B同阶。
2、一个常数与一个矩阵相乘的定义及计算方法
常数与某矩阵A相乘所得之矩阵B,其元素就是常数与矩阵A中各个元素之乘积。即:
a11a21 BAAam1a12a22a1na2nam2amn
3、矩阵加减法运算的基本性质
⑴、可结合性:A(BC)(AB)C ⑵、可交换性:ABBA
⑶、AOA(式中O为与A同阶的零矩阵)
⑷、()AAA(式中A为矩阵,、是常数)⑸、(AB)AB(式中A、B为矩阵,是常数)
㈢、矩阵的转置
1、设A是mn阶矩阵,将A的行与列依次对换,得nm阶矩阵,称为A的转置矩阵,并记为A,或记为AT。即: a11a21 Aam1a12a22am2a1na11a2na12TA aamn1na21a22a2nam1am2 anm
2、转置矩阵的性质
⑴、将矩阵进行两次转置即得原矩阵,即:(A)⑵、(AB)⑶、(A)TTTTTA。
ATTB
TTTA(式中A为矩阵,是常数)
⑷、(AB)BA
⑸、对角阵的转置矩阵,仍为对角阵,且与原对角阵相等。⑹、若ATA,则A为对称矩阵。
㈣、矩阵相乘的定义及计算方法
1、两个矩阵相乘的定义及计算方法 设矩阵A的列数等于矩阵B的行数:a11a21Aam1a12a22am2a1pb11a2pb21B bampp1c1nc2n cmnb12b22bp2b1nb2n bpn又设矩阵:
c11c21 Ccm1pc12c22cm2这里cijak1ik,将C称为bkj(i1,2,,m;j1,2,,n;1im;1jn)矩阵A与B的乘积,记作CAB。
2、矩阵乘积的性质
⑴、注意,一般地,ABBA,即矩阵的乘法一般不满足交换律。
⑵、矩阵乘法的结合律是成立的,即:(AB)CA(BC)或(A)B(AB)。⑶、矩阵乘法的分配律是成立的,即:A(BC)ABAC或(AB)CACBC。⑷、若A是n阶矩阵,E是n阶单位矩阵,则有:AEEAA。
㈤、代数余子式的定义及计算方法
在某阶行列式中,划去aij所在的行和列的元素,余下的元素构成一个降阶行列式,它与(1)ij的乘积叫做aij的代数余子式,记作Aij。例如:
a11a12a22a3223a13a23中a23的代数余子式为: a33行列式a21a31A23(1)a11a31a12a32a11a31a12a32
㈥、按照定义式进行矩阵求逆的一种编程方法
1、非奇异矩阵和奇异矩阵的定义 a11a21设n阶矩阵为:Aan1a12a22an2a1na2n,方阵A的行列式记作A,若A0,ann称A为非奇异矩阵(也称满秩矩阵);否则,称A为奇异矩阵。
2、逆矩阵的定义对于n阶矩阵A,如果有一个n阶矩阵B,满足:ABBAE,则B叫做A的逆矩阵,A也叫做B的逆矩阵。A的逆矩阵记作A1,这里E是单位矩阵。
重要的性质:一个n阶矩阵有逆矩阵的必要与充分条件是该矩阵是非奇异矩阵。非奇异矩阵有唯一的逆矩阵。
3、伴随方阵的定义及逆矩阵的定义式
设A为一个n阶非奇异矩阵,则A有唯一的一个逆矩阵A1,其定义式为:
A11AA*
a11a21A an1 A*A11A12A1na12a22an2A21A22A2na12a22an2a1na2n annAn1An2 Anna1na2nanna11 Aa21an1
式中,Aij是行列式A中元素aij的代数余子式,称矩阵A*为矩阵A的伴随方阵,A1是矩阵A的逆矩阵。
4、矩阵A的行列式A的值的计算方法
根据行列式的性质10,首先通过列变换,将行列式第一行上除主对角线上的一个元素外,将这行上其它各元素均变换成零;这样,根据行列式的性质4可知,行列式的值等于第一行各元素与对应于它们的代数余子式的乘积之和,即等于第一行不为零的主对角线上的元与其代数余子式的积。素a11若行列式的某一行(或某一列)的所有元素均为零,则该行列式的值为零,不需要进行变换。
a11a12a22an2a1na2nann Aa21an1
a110a222ana22a23a333an0na2annna2na3anna1ia11 a21an1
111a11a322an
上式中首先将a12、a13、„„、a1n均变换为0,具体方法如下:取乘数m1i
3、、n)(i
2、,从第二列起,每列各元素加上第一列各元素与m1i的积。例如,若想
a12使a12变为0,应将第一列各元素同乘以a11a13将第一列各元素同乘以a11后,加到第二列上;若想使a13变为0,应后,加到第三列上;„„。 仿照列变换,也可以进行行变换,使a11、a21、a31、„„、an1均变换为0。
同理,往下可以逐次变换,每变换一次,行列式便降一阶,最后行列式A的值为经过变换的主对角线上各元素与每一次降阶时的(1)ij的积。
由于每次降阶时均有ij,所以(1)ij1。这样,矩阵A的行列式的值为: a33a44
Aa11a225、伴随矩阵A*中各元素Aij的计算方法
类似地,利用上述求行列式A的值的方法可以求出伴随矩阵A*中各元素Aij(Aij为行列式A中元素aij的代数余子式)的值。
6、有关逆矩阵的两个性质
①、若矩阵A、B都有逆矩阵,则其乘积AB也有逆矩阵,其(AB)②、设A为非奇异矩阵,则(A)1T1B1A1。
(A)T1,即(A)为AT的逆矩阵。
1T㈦、矩阵的秩
241、矩阵A的k阶子式的定义
在一个m行、n列的矩阵A中任取k行、k列,位于这些行、列相交处的元素构成的k阶行列式,叫做A的k阶子式。
2、矩阵A的秩的定义
矩阵A中不等于零的子式的最大阶数,叫做矩阵A的秩。
3、关于计算矩阵A的秩的三个定理(这三个定理又称为矩阵的初等变换)①、如果一个矩阵的某一行(列)乘以一个不为零的数,则矩阵的秩不变。
②、若一个矩阵的任意两行(列)交换,则矩阵的秩不变。
③、如果一个矩阵A的某一行(列)乘以一个不为零的数k,然后加到另一行(列)的对应元素上去,则矩阵的秩不变。
㈧、分块矩阵
对于阶数比较高的矩阵A,在计算过程中,经常采用“矩阵分块法”,这样,它可以使计算简化为较低阶矩阵的运算。
1、分块矩阵的定义
将一个mn阶矩阵A用若干条纵线和横线分成多块低阶矩阵,每一块低阶矩阵称为A的子块,以子块为元素的矩阵称为分块矩阵。
实际计算中,多数情况下是将一个mn阶矩阵A化成m1阶或1n阶分快矩阵,即将矩阵A按列或按行分块,这样分块的作用是规律性强,利于编程计算。
2、分块矩阵的计算规则
⑴、作分块矩阵的加减法运算时,必须将两个同阶矩阵按相同方法分块,才能运算。
⑵、作分块矩阵A与B相乘时,A的列子阵数必须等于B的行子阵数,且对应相乘的子阵Cih与Dhi必须有Cih的列数等于Dhi的行数。即:
C11C21ACs1C12C22Cs2at1,l2at2,l2atm,l2C1pD11C2pD21 BDCspp1at1,lnat2,ln atm,lnD12D22Dp2D1rD2r Dpr且 Cihat1,l1at2,l1atm,l1bf1,e1bfx,e1 Dhibf1,en
bfx,en⑶、分块矩阵转置时,先将子阵看成矩阵的元素,作转置后,再将每个子阵转置。即:
C11C21ACs1
C12C22Cs2TC1pC11TC2pC12T ACTCsp1pC21C22C2pTTTTCs1TCs2 TCsp25 ⑷、分块矩阵求逆法 参见文献[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 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()的行数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程序设计课程设计1、目的VB程序设计课程设计是考察学生对VB程序设计课程相关知识点掌握情况的重要环节,也是激励学生进一步学习VB、提高运用VB开发实际计算机程序的能力。......
发表于《中小学信息技术教育》杂志2005年第7期 VB程序设计方法——今天我来做导演!教学目标:1、知道创建一个VB程序的基本步骤2、了解窗口、事件和消息的含义3、培养学生的自......
第七章绘制误差椭圆、误差曲线的程序设计方法§7-1 绘制误差椭圆的程序设计方法测量平面控制网平差计算后进行精度评定时,点位中误差虽然可以用来评定待定点的点位精度,但是它......
《VB【教学内容分析】选择结构程序设计》教案《程序的选择结构》是信息技术普通高中课程实验教科书选修1《算法与程序设计》第二章第三节的内容。主要内容是用选择结构编写......