资源预览内容
第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
第9页 / 共11页
第10页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
用 VB 写的求解多元线性方程组的程序使用时将方程组的系数矩阵和常数矩阵输入一 EXCEL 工作表最后将结果也输出到该表格内如上图,对应的方程组为:2X+3Y+Z=44X+2Y+3Z=177X+Y-Z=1系数矩阵在 SHEET1 中输入,常数矩阵在 SHEET2 第一列中输入求解结果在 SHEET2 第三列输出在工程中需添加以下两个控件简陋的界面如下:未知数的个数与系数矩阵的行数对应以下为代码通用部分输入以下代码Option Base 1Dim xlApp As Excel.Application 定义 EXCEL 类Dim xlBook As Excel.Workbook 定义工作簿类Dim xlSheet As Excel.Worksheet 定义工作表类Dim M, N, p As IntegerDim A(), mtxA(), C() As Double按键一单机事件输入Private Sub CMDOPEN_Click()从 EXCEL 文件中导入方程组系数矩阵的数据从 Sheet1 左上角开始输入,一个单元格输入一个系数,一行输入一个方程Set xlApp = CreateObject(Excel.Application)xlApp.Visible = TrueCD1.ShowOpenSet xlBook = xlApp.Workbooks.Open(CD1.FileName)Set xlSheet = xlBook.Worksheets(1)xlSheet.ActivatexlApp.Caption = VB 程序正在调用该文件-M = Text1.TextN = Mp = 1ReDim mtxA(M, N)ReDim B(N, p)ReDim C(M, p)读系数矩阵For i = 1 To MFor j = 1 To NmtxA(i, j) = xlSheet.Cells(i, j)Next jNext i矩阵求逆t = MRinv(Int(M)读常量矩阵从 Sheet2 左上角开始,一单元格输入一个系数,一行输入一个Set xlSheet = xlBook.Worksheets(2)xlSheet.ActivateFor i = 1 To MB(i, 1) = xlSheet.Cells(i, 1)Next i矩阵相乘For i = 1 To MFor j = 1 To p C(i, j) = 0For k = 1 To NC(i, j) = mtxA(i, k) * B(k, j) + C(i, j)Next kNext jNext i结果输出For i = 1 To MxlSheet.Cells(i, 3) = C(i, 1)Next iEnd Sub系数矩阵求逆的函数( 参考下面网址)http:/zhidao.baidu.com/link?url=ofti-KCfdn8Dl3mOPT5V2MuD1-y2k0y10JnmXbHnr2GK2rANCbjwdHtGzJPkUTDBpTwTWVXcHDtGsRX3iRKTwqFunction MRinv(N As Integer) As BooleanReDim nIs(N) As Integer, nJs(N) As IntegerDim i As Integer, j As Integer, k As IntegerDim D As Double, p As Double 全选主元,消元For k = 1 To ND = 0#For i = k To N For j = k To Np = Abs(mtxA(i, j)If (p D) ThenD = pnIs(k) = inJs(k) = jEnd IfNext jNext i 求解失败If (D + 1# = 1#) ThenMRinv = FalseExit FunctionEnd IfIf (nIs(k) k) ThenFor j = 1 To Np = mtxA(k, j)mtxA(k, j) = mtxA(nIs(k), j)mtxA(nIs(k), j) = pNext j End IfIf (nJs(k) k) ThenFor i = 1 To Np = mtxA(i, k)mtxA(i, k) = mtxA(i, nJs(k)mtxA(i, nJs(k) = pNext iEnd IfmtxA(k, k) = 1# / mtxA(k, k)For j = 1 To NIf (j k) Then mtxA(k, j) = mtxA(k, j) * mtxA(k, k)Next jFor i = 1 To NIf (i k) ThenFor j = 1 To NIf (j k) Then mtxA(i, j) = mtxA(i, j) - mtxA(i, k) * mtxA(k, j)Next jEnd IfNext i For i = 1 To NIf (i k) Then mtxA(i, k) = -mtxA(i, k) * mtxA(k, k)Next iNext k 调整恢复行列次序For k = N To 1 Step -1If (nJs(k) k) ThenFor j = 1 To Np = mtxA(k, j)mtxA(k, j) = mtxA(nJs(k), j)mtxA(nJs(k), j) = pNext jEnd IfIf (nIs(k) k) ThenFor i = 1 To Np = mtxA(i, k)mtxA(i, k) = mtxA(i, nIs(k)mtxA(i, nIs(k) = pNext iEnd IfNext k 求解成功MRinv = TrueEnd Function
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号