ImageVerifierCode 换一换
格式:DOCX , 页数:7 ,大小:54.62KB ,
资源ID:7878639      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7878639.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(vb逆矩阵的求法.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

vb逆矩阵的求法.docx

1、vb逆矩阵的求法逆矩阵的求法设是一个三阶方阵,如果存在三阶方阵B满足AB=E,E是三阶单位矩阵,那么B称为A的逆矩阵,记为。求矩阵A的逆矩阵可以用初等变换,也可以用公式.1,公式法矩阵A的逆可由公式1求得(公式1)在公式1中分母是矩阵A的行列式,分子是矩阵A的伴随矩阵。矩阵的A的行列式可由公式2得到(公式2)矩阵A的伴随矩阵由下列公式3给出(公式3)在如公式3中所示的伴随矩阵的每个元素计算公式如公式4所示,(公式4)模块名:MatrixModule.bas函数名:MCinv功能:实矩阵求逆的全选主元高斯约当法参数:n-Integer型变量,矩阵的阶数mtxAR-Double型二维数组,体积为n

2、xn。存放原矩阵A的实部;返回时存放其逆矩阵A-的实部。mtxAI-Double型二维数组,体积为nxn。存放原矩阵A的虚部;返回时存放其逆矩阵A-的虚部。返回值:Boolean型,失败为False,成功为TrueFunctionMCinv(nAsInteger,mtxAR()AsDouble,mtxAI()AsDouble)AsBoolean局部变量ReDimnIs(n)AsInteger,nJs(n)AsIntegerDimiAsInteger,jAsInteger,kAsIntegerDimdAsDouble,pAsDouble,sAsDouble,tAsDouble,qAsDouble

3、,bAsDouble全选主元,消元Fork=1Tond=0#Fori=kTonForj=kTonp=mtxAR(i,j)*mtxAR(i,j)+mtxAI(i,j)*mtxAI(i,j)If(pd)Thend=pnIs(k)=inJs(k)=jEndIfNextjNexti求解失败If(d+1#=1#)ThenMCinv=FalseExitFunctionEndIfIf(nIs(k)k)ThenForj=1Tont=mtxAR(k,j)mtxAR(k,j)=mtxAR(nIs(k),j)mtxAR(nIs(k),j)=tt=mtxAI(k,j)mtxAI(k,j)=mtxAI(nIs(k),j

4、)mtxAI(nIs(k),j)=tNextjEndIfIf(nJs(k)k)ThenFori=1Tont=mtxAR(i,k)mtxAR(i,k)=mtxAR(i,nJs(k)mtxAR(i,nJs(k)=tt=mtxAI(i,k)mtxAI(i,k)=mtxAI(i,nJs(k)mtxAI(i,nJs(k)=tNextiEndIfmtxAR(k,k)=mtxAR(k,k)/dmtxAI(k,k)=-mtxAI(k,k)/dForj=1TonIf(jk)Thenp=mtxAR(k,j)*mtxAR(k,k)q=mtxAI(k,j)*mtxAI(k,k)s=(mtxAR(k,j)+mtxAI(

5、k,j)*(mtxAR(k,k)+mtxAI(k,k)mtxAR(k,j)=p-qmtxAI(k,j)=s-p-qEndIfNextjFori=1TonIf(ik)ThenForj=1TonIf(jk)Thenp=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-qb=s-p-qmtxAR(i,j)=mtxAR(i,j)-tmtxAI(i,j)=mtxAI(i,j)-bEndIfNextjEndIfNextiFori=1TonIf(ik)Thenp=mtx

6、AR(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-pmtxAI(i,k)=p+q-sEndIfNextiNextk调整恢复行列次序Fork=nTo1Step-1If(nJs(k)k)ThenForj=1Tont=mtxAR(k,j)mtxAR(k,j)=mtxAR(nJs(k),j)mtxAR(nJs(k),j)=tt=mtxAI(k,j)mtxAI(k,j)=mtxAI(nJs(k),j)mtxAI(nJs(k),j)=tNextjEndIf

7、If(nIs(k)k)ThenFori=1Tont=mtxAR(i,k)mtxAR(i,k)=mtxAR(i,nIs(k)mtxAR(i,nIs(k)=tt=mtxAI(i,k)mtxAI(i,k)=mtxAI(i,nIs(k)mtxAI(i,nIs(k)=tNextiEndIfNextk求解成功MCinv=TrueEndFunctionVBA来解决大数据量计算逆矩阵的问题EXCEL2003中应用minverse求逆矩阵,该函数在excel中的确存在计算范围上的限制,可能最大的计算范围是52*52。下面给出一个VBA的解法Private Declare Sub CopyMemory Lib k

8、ernel32 Alias RtlMoveMemory (Destination As Any, Source As Any, ByVal Length As Long)Sub Swap(ByRef sA, ByRef sB)Dim r As LongCopyMemory r, ByVal VarPtr(sA), 4CopyMemory ByVal VarPtr(sA), ByVal VarPtr(sB), 4CopyMemory ByVal VarPtr(sB), r, 4End SubSub 求逆矩阵(ByVal r As Range)Dim A() As Long, B() As Lon

9、g, i As Long, j As Long, k As Long, N As Long, D As Double, tt As Double, matrixApplication.ScreenUpdating = Falsematrix = r.ValueIf r.Rows.Count r.Columns.Count Then MsgBox 矩阵行数与列数不等: Exit SubN = r.Rows.Counttt = TimerReDim A(N), B(N)For k = 1 To ND = 0#For i = k To NFor j = k To NIf (Abs(matrix(i,

10、 j) D) ThenD = Abs(matrix(i, j)A(k) = iB(k) = jEnd IfNext j, iIf (D + 1# = 1#) Then MsgBox 矩阵行列式的值等于0: Exit SubIf (A(k) k) ThenFor j = 1 To NSwap matrix(k, j), matrix(A(k), j)NextEnd IfIf (B(k) k) ThenFor i = 1 To NSwap matrix(i, k), matrix(i, B(k)NextEnd Ifmatrix(k, k) = 1# / matrix(k, k)For j = 1

11、To NIf (j k) Then matrix(k, j) = matrix(k, j) * matrix(k, k)NextFor i = 1 To NIf (i k) ThenFor j = 1 To NIf (j k) Then matrix(i, j) = matrix(i, j) - matrix(i, k) * matrix(k, j)NextEnd IfNextFor i = 1 To NIf (i k) Then matrix(i, k) = -matrix(i, k) * matrix(k, k)NextNextFor k = N To 1 Step -1If (B(k)

12、k) ThenFor j = 1 To NSwap matrix(k, j), matrix(B(k), j)NextEnd IfIf (A(k) k) ThenFor i = 1 To NSwap matrix(i, k), matrix(i, A(k)NextEnd IfNextr.Offset(N + 3, 0).Resize(N, N).NumberFormatLocal = 0.00000000r.Offset(N + 3, 0).Resize(N, N) = matrixApplication.ScreenUpdating = TrueMsgBox OK! 程序运行 & Forma

13、t(Timer - tt, 0.0000000) & 秒End SubSub test()求逆矩阵 Sheets(sheet1).a1.CurrentRegionEnd Sub以上代码计算一个256*256的矩阵的逆矩阵,用时12秒左右,还是有点慢。矩阵相乘VB源码彩色显示 注:在code./code内就以下面格式显示文字,双击源码拷贝到剪切板Private Function Rect_multip(A() As Double, B() As Double, n As Long, n1 As Long, n2 As Long, C() As Double) As Double矩阵相乘 n1*n 的矩阵乘以 n*n2 的矩阵结果得矩阵C(n1,n2)Dim T1 As LongDim T2 As LongDim T3 As LongFor T1 = 0 To n1For T2 = 0 To n2C(T1, T2) = 0For T3 = 0 To nC(T1, T2) = C(T1, T2) + A(T1, T3) * B(T3, T2)Next T3Next T2Next T1End Function

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1