矩阵求逆标准算法.doc

矩阵求逆标准算法.doc

ID:59460497

大小:146.50 KB

页数:14页

时间:2020-11-02

矩阵求逆标准算法.doc_第1页
矩阵求逆标准算法.doc_第2页
矩阵求逆标准算法.doc_第3页
矩阵求逆标准算法.doc_第4页
矩阵求逆标准算法.doc_第5页
资源描述:

《矩阵求逆标准算法.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、矩阵求逆标准算法(VB)源码2006-11-2913:49类别:默认  本程序依据矩阵初等变换的基本原理编写,算法较为繁琐,但易于理解适合VB初学者。  本程序适合任何(n*n)的矩阵求逆,对于不可逆矩阵有提示信息,并结束程序  本程序在XP,VB6.0下调试通过  本程序由本人原创,请慎用。如有疑问,或调试有误,请联系本人QQ  本程序可在VB6.0内任何地方用calljzqn(qa(),na()))语句调用  其中qa()是输入的矩阵数组,调用此函数后na()为返回的逆矩阵数组  注意:调用本程序前不要声明na()的维数,仅用dimna()即可。  请不要试图对一个病态矩阵求逆

2、、否则计算结果未必是你想要的  病态矩阵是指行列式计算结果极其接近于零的矩阵PublicSubjzqn(qa(),na())Dima()n=UBound(qa,1)ReDimna(n,n)ReDima(n,2*n) Fori=1Ton   Forj=1Ton     a(i,j)=qa(i,j)   Nextj NextiFori=1Ton Forj=n+1To2*n Ifj-i=nThen a(i,j)=1 Else a(i,j)=0 EndIf Nextj Nexti Fori=1Ton Ifa(i,i)=0Then   Forq=iTon   Ifa(q,i)<>0Then 

3、     Forw=iTo2*n        zj=a(i,w)        a(i,w)=a(q,w)        a(q,w)=zj      Nextw      ExitFor   EndIf   Nextq   Ifq>nThenMsgBox"此矩阵不可逆":ExitSub EndIf Fork=2*nToiStep-1 a(i,k)=a(i,k)/a(i,i) Nextk Forj=i+1Ton Ifa(j,i)<>0Then    Fork=2*nToiStep-1   a(j,k)=a(j,k)/a(j,i)-a(i,k)   Nextk   EndIf Ne

4、xtjNextiFori=nTo1Step-1 Ifa(i,i)=0Then   Forq=i-1To1Step-1   Ifa(q,i)<>0Then      Forw=iTo2*n        zj=a(i,w)        a(i,w)=a(q,w)        a(q,w)=zj      Nextw      ExitFor   EndIf   Nextq EndIf Fork=2*nToiStep-1 a(i,k)=a(i,k)/a(i,i) Nextk Forj=i-1To1Step-1 Ifa(j,i)<>0Then xxx=a(j,i) Fork=2*nT

5、o1Step-1   a(j,k)=a(j,k)/xxx-a(i,k)   Nextk   EndIf NextjNextiFori=1Ton Forj=1Ton  na(i,j)=a(i,j+n)NextjNextiEndSub  调用示例:下面代码随机产生一个10*10的矩阵,并求逆,打印于窗体PrivateSubCommand1_Click()Dima(10,10),b()ClsRandomizeFori=1To10  Forj=1To10    a(i,j)=Int(Rnd*100)   Printa(i,j);  Nextj  PrintNextiPrintCalljzq

6、n(a(),b())Fori=1To10  Forj=1To10 PrintFormat(b(i,j),"0.000"),  Nextj PrintNextiEndSub矩阵运算是数值运算中经常碰到的,“砖头”抛出多天,尚未“引出玉来”,我自己再来个补充吧!矩阵求逆上面给出的程序,虽然可以使用,但远不完善,更不精炼。下面将其修改一下,例如:使用IIF()函数简化判断分支语句,将“约化”过程合并,添加一个矩阵无逆的判断,……。但还是属于小打小闹的修修补补,希望诸位能挑出程序中的问题、缺陷,诸位版主和大侠们能从赐以高水平的程序代码,不胜感谢!修改后的矩阵求逆代码如下:源程序压缩文件如下

7、:矩阵求逆程序代码Dima()AsSingleDimi%,j%,k%,am!,tt%,at!,bt!PrivateSubCommand1_Click()n=InputBox("请输入方阵的阶数N")ReDima(n,2*n)AsSingleFori=1TonForj=1Tona(i,j)=InputBox("请输入a("&i&","&j&")的值")a(i,j+n)=IIf(i=j,1,0)‘使用IIf()函数,简化此判断结构Nextj,iPrint"原矩阵的增广矩阵

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。