vb中如何求一个矩阵的逆矩阵

winampsukai 2007-05-16 03:58:44
请问各位大虾
如何在VB中要怎样才能实现一个矩阵的逆矩阵
谢谢大家指导啦
...全文
1212 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
嗷嗷叫的老马 2007-05-16
  • 打赏
  • 举报
回复
mark
szjhxu 2007-05-16
  • 打赏
  • 举报
回复
EXCEL中有标准求逆矩阵的函数的,不知VB中有没有?
CathySun118 2007-05-16
  • 打赏
  • 举报
回复
http://www.celiang.net/celiang/article_view.asp?id=9
Rose2007 2007-05-16
  • 打赏
  • 举报
回复
MARK
laviewpbt 2007-05-16
  • 打赏
  • 举报
回复
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 模块名:MatrixModule.bas
' 函数名:MCinv
' 功能: 实矩阵求逆的全选主元高斯-约当法
' 参数: n - Integer型变量,矩阵的阶数
' mtxAR - Double型二维数组,体积为n x n。存放原矩阵A的实部;返回时存放其逆矩阵A-的实部。
' mtxAI - Double型二维数组,体积为n x n。存放原矩阵A的虚部;返回时存放其逆矩阵A-的虚部。
' 返回值:Boolean型,失败为False,成功为True
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function MCinv(n As Integer, mtxAR() As Double, mtxAI() As Double) As Boolean
' 局部变量
ReDim nIs(n) As Integer, nJs(n) As Integer
Dim i As Integer, j As Integer, k As Integer
Dim d As Double, p As Double, s As Double, t As Double, q As Double, b As Double

' 全选主元,消元
For k = 1 To n
d = 0#
For i = k To n
For j = k To n
p = mtxAR(i, j) * mtxAR(i, j) + mtxAI(i, j) * mtxAI(i, j)
If (p > d) Then
d = p
nIs(k) = i
nJs(k) = j
End If
Next j
Next i

' 求解失败
If (d + 1# = 1#) Then
MCinv = False
Exit Function
End If

If (nIs(k) <> k) Then
For j = 1 To n
t = mtxAR(k, j)
mtxAR(k, j) = mtxAR(nIs(k), j)
mtxAR(nIs(k), j) = t

t = mtxAI(k, j)
mtxAI(k, j) = mtxAI(nIs(k), j)
mtxAI(nIs(k), j) = t
Next j
End If
If (nJs(k) <> k) Then
For i = 1 To n
t = mtxAR(i, k)
mtxAR(i, k) = mtxAR(i, nJs(k))
mtxAR(i, nJs(k)) = t
t = mtxAI(i, k)
mtxAI(i, k) = mtxAI(i, nJs(k))
mtxAI(i, nJs(k)) = t
Next i
End If

mtxAR(k, k) = mtxAR(k, k) / d
mtxAI(k, k) = -mtxAI(k, k) / d
For j = 1 To n
If (j <> k) Then
p = mtxAR(k, j) * mtxAR(k, k)
q = mtxAI(k, j) * mtxAI(k, k)
s = (mtxAR(k, j) + mtxAI(k, j)) * (mtxAR(k, k) + mtxAI(k, k))
mtxAR(k, j) = p - q
mtxAI(k, j) = s - p - q
End If
Next j
For i = 1 To n
If (i <> k) Then
For j = 1 To n
If (j <> k) Then
p = mtxAR(k, j) * mtxAR(i, k)
q = mtxAI(k, j) * mtxAI(i, k)
s = (mtxAR(k, j) + mtxAI(k, j)) * (mtxAR(i, k) + mtxAI(i, k))
t = p - q
b = s - p - q
mtxAR(i, j) = mtxAR(i, j) - t
mtxAI(i, j) = mtxAI(i, j) - b
End If
Next j
End If
Next i

For i = 1 To n
If (i <> k) Then
p = mtxAR(i, k) * mtxAR(k, k)
q = mtxAI(i, k) * mtxAI(k, k)
s = (mtxAR(i, k) + mtxAI(i, k)) * (mtxAR(k, k) + mtxAI(k, k))
mtxAR(i, k) = q - p
mtxAI(i, k) = p + q - s
End If
Next i
Next k

' 调整恢复行列次序
For k = n To 1 Step -1
If (nJs(k) <> k) Then
For j = 1 To n
t = mtxAR(k, j)
mtxAR(k, j) = mtxAR(nJs(k), j)
mtxAR(nJs(k), j) = t
t = mtxAI(k, j)
mtxAI(k, j) = mtxAI(nJs(k), j)
mtxAI(nJs(k), j) = t
Next j
End If
If (nIs(k) <> k) Then
For i = 1 To n
t = mtxAR(i, k)
mtxAR(i, k) = mtxAR(i, nIs(k))
mtxAR(i, nIs(k)) = t
t = mtxAI(i, k)
mtxAI(i, k) = mtxAI(i, nIs(k))
mtxAI(i, nIs(k)) = t
Next i
End If
Next k

' 求解成功
MCinv = True

End Function

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧