vb逆矩阵的求法Word格式文档下载.docx
- 文档编号:21011463
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:7
- 大小:54.62KB
vb逆矩阵的求法Word格式文档下载.docx
《vb逆矩阵的求法Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《vb逆矩阵的求法Word格式文档下载.docx(7页珍藏版)》请在冰豆网上搜索。
的每个元素计算公式如公式4所示,
(公式4)
'
模块名:
MatrixModule.bas
函数名:
MCinv
功能:
实矩阵求逆的全选主元高斯-约当法
参数:
n
-
Integer型变量,矩阵的阶数
mtxAR
Double型二维数组,体积为n
x
n。
存放原矩阵A的实部;
返回时存放其逆矩阵A-的实部。
mtxAI
存放原矩阵A的虚部;
返回时存放其逆矩阵A-的虚部。
返回值:
Boolean型,失败为False,成功为True
Function
MCinv(n
As
Integer,
mtxAR()
Double,
mtxAI()
Double)
Boolean
局部变量
ReDim
nIs(n)
nJs(n)
Integer
Dim
i
j
k
d
p
s
t
q
b
Double
全选主元,消元
For
=
1
To
n
0#
mtxAR(i,
j)
*
+
mtxAI(i,
j)
If
(p
>
d)
Then
p
nIs(k)
i
nJs(k)
j
End
If
Next
求解失败
(d
1#
1#)
MCinv
False
Exit
Function
(nIs(k)
<
k)
mtxAR(k,
mtxAR(nIs(k),
t
mtxAI(k,
mtxAI(nIs(k),
(nJs(k)
k)
nJs(k))
nJs(k))
/
d
-mtxAI(k,
(j
(mtxAR(k,
j))
k))
q
(i
(mtxAR(i,
b
k))
s
k
调整恢复行列次序
Step
-1
mtxAR(nJs(k),
mtxAI(nJs(k),
nIs(k))
nIs(k))
求解成功
True
VBA来解决大数据量计算逆矩阵的问题
EXCEL2003中应用minverse求逆矩阵,该函数在excel中的确存在计算范围上的限制,可能最大的计算范围是52*52。
下面给出一个VBA的解法
PrivateDeclareSubCopyMemoryLib"
kernel32"
Alias"
RtlMoveMemory"
(DestinationAsAny,SourceAsAny,ByValLengthAsLong)
SubSwap(ByRefsA,ByRefsB)
Dimr
AsLong
CopyMemoryr,ByValVarPtr(sA),4
CopyMemoryByValVarPtr(sA),ByValVarPtr(sB),4
CopyMemoryByValVarPtr(sB),r,4
EndSub
Sub求逆矩阵(ByValrAsRange)
DimA()AsLong,B()AsLong,iAsLong,jAsLong,kAsLong,NAsLong,DAsDouble,ttAsDouble,matrix
Application.ScreenUpdating=False
matrix=r.Value
Ifr.Rows.Count<
r.Columns.CountThenMsgBox"
矩阵行数与列数不等"
:
ExitSub
N=r.Rows.Count
tt=Timer
ReDimA(N),B(N)
Fork=1ToN
D=0#
Fori=kToN
Forj=kToN
If(Abs(matrix(i,j))>
D)Then
D=Abs(matrix(i,j))
A(k)=i
B(k)=j
EndIf
Nextj,i
If(D+1#=1#)ThenMsgBox"
矩阵行列式的值等于0"
If(A(k)<
k)Then
Forj=1ToN
Swapmatrix(k,j),matrix(A(k),j)
Next
If(B(k)<
Fori=1ToN
Swapmatrix(i,k),matrix(i,B(k))
matrix(k,k)=1#/matrix(k,k)
If(j<
k)Thenmatrix(k,j)=matrix(k,j)*matrix(k,k)
If(i<
k)Thenmatrix(i,j)=matrix(i,j)-matrix(i,k)*matrix(k,j)
k)Thenmatrix(i,k)=-matrix(i,k)*matrix(k,k)
Fork=NTo1Step-1
Swapmatrix(k,j),matrix(B(k),j)
Swapmatrix(i,k),matrix(i,A(k))
r.Offset(N+3,0).Resize(N,N).NumberFormatLocal="
0.00000000"
r.Offset(N+3,0).Resize(N,N)=matrix
Application.ScreenUpdating=True
MsgBox"
OK!
程序运行"
&
Format(Timer-tt,"
0.0000000"
)&
"
秒"
Subtest()
求逆矩阵Sheets("
sheet1"
).[a1].CurrentRegion
以上代码计算一个256*256的矩阵的逆矩阵,用时12秒左右,还是有点慢。
矩阵相乘
VB源码彩色显示注:
在[code]...[/code]内就以下面格式显示文字,双击源码拷贝到剪切板
PrivateFunctionRect_multip(A()AsDouble,B()AsDouble,nAsLong,n1AsLong,n2AsLong,C()AsDouble)AsDouble'
矩阵相乘n1*n的矩阵乘以n*n2的矩阵结果得矩阵C(n1,n2)DimT1AsLongDimT2AsLongDimT3AsLongForT1=0Ton1ForT2=0Ton2C(T1,T2)=0ForT3=0TonC(T1,T2)=C(T1,T2)+A(T1,T3)*B(T3,T2)NextT3NextT2NextT1EndFunction
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- vb 矩阵 求法