VB求解多元线性方程组的程序

用VB 写的求解多元线性方程组的程序

使用时将方程组的系数矩阵和常数矩阵输入一EXCEL 工作表 最后将结果也输出到该表格内

如上图,对应的方程组为:

2X+3Y+Z=4

4X+2Y+3Z=17

7X+Y-Z=1

系数矩阵在SHEET1中输入,常数矩阵在SHEET2第一列中输入

求解结果在SHEET2第三列输出

在工程中需添加以下两个控件

简陋的界面如下:

未知数的个数与系数矩阵的行数对应

以下为代码

‘通用部分输入以下代码

Option Base 1

Dim xlApp As Excel.Application '定义EXCEL 类

Dim xlBook As Excel.Workbook '定义工作簿类

Dim xlSheet As Excel.Worksheet '定义工作表类

Dim M, N, p As Integer

Dim A(), mtxA(), C() As Double

‘按键一单机事件输入

Private Sub CMDOPEN_Click()

‘从EXCEL 文件中导入方程组系数矩阵的数据

‘从Sheet1左上角开始输入,一个单元格输入一个系数,一行输入一‘个方程

Set xlApp = CreateObject("Excel.Application")

xlApp.Visible = True

CD1.ShowOpen

Set xlBook = xlApp.Workbooks.Open(CD1.FileName)

Set xlSheet = xlBook.Worksheets(1)

xlSheet.Activate

xlApp.Caption = "VB程序正在调用该文件"

'-----------------

M = Text1.Text

N = M

p = 1

ReDim mtxA(M, N)

ReDim B(N, p)

ReDim C(M, p)

' 读系数矩阵

For i = 1 To M

For j = 1 To N

mtxA(i, j) = xlSheet.Cells(i, j)

Next j

Next i

' 矩阵求逆

t = MRinv(Int(M))

' 读常量矩阵

‘从Sheet2左上角开始,一单元格输入一个系数,一行输入一个Set xlSheet = xlBook.Worksheets(2)

xlSheet.Activate

For i = 1 To M

B(i, 1) = xlSheet.Cells(i, 1)

Next i

' 矩阵相乘

For i = 1 To M

For j = 1 To p

C(i, j) = 0

For k = 1 To N

C(i, j) = mtxA(i, k) * B(k, j) + C(i, j)

Next k

Next j

Next i

‘结果输出

For i = 1 To M

xlSheet.Cells(i, 3) = C(i, 1)

Next i

End Sub

‘系数矩阵求逆的函数(参考下面网址)

Function MRinv(N As Integer) 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

' 全选主元,消元

For k = 1 To N

D = 0#

For i = k To N

For j = k To N

p = Abs(mtxA(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

MRinv = False

Exit Function

End If

If (nIs(k) k) Then

For j = 1 To N

p = mtxA(k, j)

mtxA(k, j) = mtxA(nIs(k), j)

mtxA(nIs(k), j) = p

Next j

End If

If (nJs(k) k) Then

For i = 1 To N

p = mtxA(i, k)

mtxA(i, k) = mtxA(i, nJs(k))

mtxA(i, nJs(k)) = p

Next i

End If

mtxA(k, k) = 1# / mtxA(k, k)

For j = 1 To N

If (j k) Then mtxA(k, j) = mtxA(k, j) * mtxA(k, k)

Next j

For i = 1 To N

If (i k) Then

For j = 1 To N

If (j k) Then mtxA(i, j) = mtxA(i, j) - mtxA(i, k) * mtxA(k, j)

Next j

End If

Next i

For i = 1 To N

If (i k) Then mtxA(i, k) = -mtxA(i, k) * mtxA(k, k) Next i

Next k

' 调整恢复行列次序

For k = N To 1 Step -1

If (nJs(k) k) Then

For j = 1 To N

p = mtxA(k, j)

mtxA(k, j) = mtxA(nJs(k), j)

mtxA(nJs(k), j) = p

Next j

End If

If (nIs(k) k) Then

For i = 1 To N

p = mtxA(i, k)

mtxA(i, k) = mtxA(i, nIs(k))

mtxA(i, nIs(k)) = p

Next i

End If

Next k

' 求解成功 MRinv = True End Function

用VB 写的求解多元线性方程组的程序

使用时将方程组的系数矩阵和常数矩阵输入一EXCEL 工作表 最后将结果也输出到该表格内

如上图,对应的方程组为:

2X+3Y+Z=4

4X+2Y+3Z=17

7X+Y-Z=1

系数矩阵在SHEET1中输入,常数矩阵在SHEET2第一列中输入

求解结果在SHEET2第三列输出

在工程中需添加以下两个控件

简陋的界面如下:

未知数的个数与系数矩阵的行数对应

以下为代码

‘通用部分输入以下代码

Option Base 1

Dim xlApp As Excel.Application '定义EXCEL 类

Dim xlBook As Excel.Workbook '定义工作簿类

Dim xlSheet As Excel.Worksheet '定义工作表类

Dim M, N, p As Integer

Dim A(), mtxA(), C() As Double

‘按键一单机事件输入

Private Sub CMDOPEN_Click()

‘从EXCEL 文件中导入方程组系数矩阵的数据

‘从Sheet1左上角开始输入,一个单元格输入一个系数,一行输入一‘个方程

Set xlApp = CreateObject("Excel.Application")

xlApp.Visible = True

CD1.ShowOpen

Set xlBook = xlApp.Workbooks.Open(CD1.FileName)

Set xlSheet = xlBook.Worksheets(1)

xlSheet.Activate

xlApp.Caption = "VB程序正在调用该文件"

'-----------------

M = Text1.Text

N = M

p = 1

ReDim mtxA(M, N)

ReDim B(N, p)

ReDim C(M, p)

' 读系数矩阵

For i = 1 To M

For j = 1 To N

mtxA(i, j) = xlSheet.Cells(i, j)

Next j

Next i

' 矩阵求逆

t = MRinv(Int(M))

' 读常量矩阵

‘从Sheet2左上角开始,一单元格输入一个系数,一行输入一个Set xlSheet = xlBook.Worksheets(2)

xlSheet.Activate

For i = 1 To M

B(i, 1) = xlSheet.Cells(i, 1)

Next i

' 矩阵相乘

For i = 1 To M

For j = 1 To p

C(i, j) = 0

For k = 1 To N

C(i, j) = mtxA(i, k) * B(k, j) + C(i, j)

Next k

Next j

Next i

‘结果输出

For i = 1 To M

xlSheet.Cells(i, 3) = C(i, 1)

Next i

End Sub

‘系数矩阵求逆的函数(参考下面网址)

Function MRinv(N As Integer) 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

' 全选主元,消元

For k = 1 To N

D = 0#

For i = k To N

For j = k To N

p = Abs(mtxA(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

MRinv = False

Exit Function

End If

If (nIs(k) k) Then

For j = 1 To N

p = mtxA(k, j)

mtxA(k, j) = mtxA(nIs(k), j)

mtxA(nIs(k), j) = p

Next j

End If

If (nJs(k) k) Then

For i = 1 To N

p = mtxA(i, k)

mtxA(i, k) = mtxA(i, nJs(k))

mtxA(i, nJs(k)) = p

Next i

End If

mtxA(k, k) = 1# / mtxA(k, k)

For j = 1 To N

If (j k) Then mtxA(k, j) = mtxA(k, j) * mtxA(k, k)

Next j

For i = 1 To N

If (i k) Then

For j = 1 To N

If (j k) Then mtxA(i, j) = mtxA(i, j) - mtxA(i, k) * mtxA(k, j)

Next j

End If

Next i

For i = 1 To N

If (i k) Then mtxA(i, k) = -mtxA(i, k) * mtxA(k, k) Next i

Next k

' 调整恢复行列次序

For k = N To 1 Step -1

If (nJs(k) k) Then

For j = 1 To N

p = mtxA(k, j)

mtxA(k, j) = mtxA(nJs(k), j)

mtxA(nJs(k), j) = p

Next j

End If

If (nIs(k) k) Then

For i = 1 To N

p = mtxA(i, k)

mtxA(i, k) = mtxA(i, nIs(k))

mtxA(i, nIs(k)) = p

Next i

End If

Next k

' 求解成功 MRinv = True End Function


相关文章

  • 线性方程组的解法
  • 线性方程组的解法 1 引言 在科学研究和大型工程设计中出现了越来越多的数学问题,而这些问题往往需要求数值解.在进行数值求解时,经离散后,常常归结为求解形如Ax= b的大型线性方程组.而如插值公式,拟合公式等的建立,微分方程差分格式的构造等, ...查看


  • 多元回归分析SPSS
  • 多元线性回归分析预测法 多元线性回归分析预测法(Multi factor line regression method,多元线性回归分析法) [编辑] 多元线性回归分析预测法概述 在市场的经济活动中,经常会遇到某一市场现象的发展和变化取决于 ...查看


  • 关于对[数值分析]中用割线法求方程根的探讨
  • l+nX1 第1期(总第44期) 2005年2月 山西广播电视大学学报 JournalofShanxiRadio8LTVUniversity NO.1Feb.2005 摘要:在日常实际应用中,人们会经常遇到求非线性方程f(x)一0的近似根问 ...查看


  • MATLAB求解数学模型的基本知识
  • MATLAB 求解数学模型的基本知识 目录 1. 熟悉MATLAB 软件运算环境 ............................................................................... ...查看


  • 线性代数§1.1二阶.三阶行列式
  • 本章说明与要求 行列式的理论是人们从解线性方程组的需要中建立和发展起来的,它在线性代数以及其他数学分支上都有着广泛的应用.在本章里我们主要讨论下面几个问题: (1) 行列式的定义: (2) 行列式的基本性质及计算方法: (3) 利用行列式求 ...查看


  • 数学建模:水资源短缺风险综合评价
  • 2011河南科技大学第八届大学生数学建模竞赛 承 诺 书 我们仔细阅读了中国大学生数学建模竞赛的竞赛规则. 我们完全明白,在竞赛开始后参赛队员不能以任何方式(包括电话.电子邮件.网上咨询等)与队外的任何人(包括指导教师)研究.讨论与赛题有关 ...查看


  • 高等数学教学大纲
  • <高等数学>课程教学大纲 一.课程基本情况 开课单位:数理系 课程编码:B080101 适应专业:高职高专工程类专业 修课方式:必修 总学时:110学时 考核方式:考试 教 材:侯风波 <高等数学(第二版) > 高等 ...查看


  • 2013年全国数学建模比赛优秀论文
  • 车道被占用对城市道路通行能力的影响 摘 要 车道被占用是指因交通事故.路边停车.占道施工等因素,导致车道或道路横断面通行能力在单位时间内降低的现象.由于城市道路具有交通流密度大.连续性强等特点,一条车道被占用,也可能降低路段所有车道的通行能 ...查看


  • 的资源配置优化模型
  • 数学建模论文 题目:数学建模在计算机专业的应用 专业系别:电子信息与控制工程系轨道交通信号与控制姓名:金朝阳 学号:14101067 指导教师:李晓玲 数学建模在计算机专业中的应用 一.摘要 本文重点分析了数学建模的特点,探讨了数学建模与计 ...查看


热门内容