逆矩阵的两种解法.doc_第1页
逆矩阵的两种解法.doc_第2页
逆矩阵的两种解法.doc_第3页
逆矩阵的两种解法.doc_第4页
全文预览已结束

下载本文档

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

文档简介

一、初等行变换求逆矩阵* 初等变换法求逆矩阵A()数组为输入变量,存放输入的矩阵A1()数组为输出变量,存放A()的逆矩阵Sub InverseMatrix(A(), A1() If UBound(A, 1) UBound(A, 2) Then MsgBox 逆矩阵不存在, vbInformation, 提示: Exit Sub 判断矩阵是否为方阵,若不是则退出过程 Dim B(), N B()存放A()矩阵与单位矩阵的增广矩阵 N = UBound(A) ReDim B(N, 2 * N) 求A与单位矩阵的增广矩阵 For i = 1 To N For J = 1 To 2 * N If J = N Then B(i, J) = A(i, J) ElseIf J - N = i Then B(i, J) = 1 Else B(i, J) = 0 End If Next Next 将增广矩阵化为行最简形矩阵 For i = 1 To N 判断增广矩阵左边的n阶矩阵的对角线上的元素,是否为零,若为零则进行行交换 If B(i, i) = 0 Then 若为零,则与该列的非零元素所对应的行进行交换 For J = i + 1 To N If B(J, i) 0 Then 若该列有非零元素,则进行行交换 For I1 = 1 To 2 * N C = B(i, I1) B(i, I1) = B(J, I1) B(J, I1) = C Next Exit For End If Next 若该列没有一个非零元素,即该列的元素全为零,则可知逆矩阵不存在 If J = N + 1 Then MsgBox 逆矩阵不存在, vbInformation, 提示: Exit Sub End If 将每列,非对角线上的元素化为零 For J = 1 To N If J i Then If B(J, i) 0 Then H1 = B(J, i) / B(i, i) For J1 = i To 2 * N B(J, J1) = B(J, J1) - H1 * B(i, J1) Next End If End If Next Next i 将增广矩阵化为行最简形矩阵,并将其右边的逆矩阵赋给A1()数组 For i = 1 To N k = B(i, i) B(i, i) = B(i, i) / k For J = N + 1 To 2 * N B(i, J) = B(i, J) / k A1(i, J - N) = B(i, J) Next NextEnd Sub*二、伴随矩阵法求逆矩阵*本过程的作用是,求N阶矩阵的逆矩阵Sub InverseMatrix1(A(), B() A()存放n阶矩阵,B()存放n阶矩阵的逆矩阵 Dim i, J, I1, J1, C(), k, K1, H For i = 1 To UBound(A) 求n阶矩阵每行上的元素 For J = 1 To UBound(A) 求n阶矩阵每列上的元素 ReDim C(UBound(A) - 1, UBound(A) - 1) C()存放n阶矩阵的余子式 一下代码作用是,去除n阶矩阵中第j行,第i列,并把其余子式存放在C()中 For I1 = 1 To UBound(A) If I1 = J Then k = 1 Else For J1 = 1 To UBound(A) If J1 = i Then K1 = 1 Else C(I1 - k, J1 - K1) = A(I1, J1) End If Next K1 = 0 End If Next B(i, J) = (-1) (i + J) * valOfDet(C)/valofDet(A) B()存放N阶矩阵的逆矩阵中的各元素 k = 0: K1 = 0 Erase C Next NextEnd Sub*Function valOfDet(A() A()为存放n阶行列式的二维数组,valOfDet存放行列式的值 Dim g, i, J, N, B(), k, H, A1() N为行列式的阶数 N = UBound(A) ReDim A1(N, N) For i = 1 To N For J = 1 To N A1(i, J) = A(i, J) Next Next 对行列式的对角线下三角的每一行化零 For g = N To 2 Step -1 求出第g行中有多少个不为零的数据,并把它存放在B()数组里 For i = 1 To g - 1 If A1(g, i) 0 Then ReDim Preserve B(k + 1) B(k + 1) = i 记录数据不为零的列数 k = k + 1 End If Next 将每个不为零的数据化为零 If k 0 Then For i = 1 To UBound(B) 对每行中最后一个不为零的数据进行化零 If i = UBound(B) Then 对该行中数据不为零的最后一列进行化零处理 如果该行所对应的对角线上的数据为零,则进行数据对换 If A1(g, g) = 0 Then For J = 1 To g C = A1(J, B(i) A1(J, B(i) = A1(J, g) A1(J, g) = C NextH = H + 1 记录交换的次数 Else 若对角线上的数据不为零,则将该行中数据不为零的最后一列化为零 For J = 1 To g A1(J, B(i) = A1(J, B(i) - A1(g, B(i) / A1(g, g) * A1(J, g) Next End If Else 对该行中数据不为零的非最后一列数据进行化零处理 For J = 1 To g A1(J, B(i) = A1(J, B(i) - A1(g, B(i) / A1(g, B(i + 1) * A1(J, B(i + 1) Next End If Next End If Erase B: k = 0 Next valOfDet = 1# 通过求行列式对角线上各数据的积,计算行列式的值 For i = 1 To N If A1(i, i) = 0 Then valOfDet

温馨提示

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

评论

0/150

提交评论