📄 form02.frm
字号:
VERSION 5.00
Object = "{8AE029D0-08E3-11D1-BAA2-444553540000}#3.0#0"; "VSFLEX3.OCX"
Begin VB.Form Form02
AutoRedraw = -1 'True
BackColor = &H80000013&
Caption = "距离判别分析"
ClientHeight = 6255
ClientLeft = 60
ClientTop = 450
ClientWidth = 10485
FillColor = &H80000013&
ForeColor = &H80000013&
Icon = "Form02.frx":0000
LinkTopic = "Form1"
ScaleHeight = 6255
ScaleMode = 0 'User
ScaleWidth = 5664.506
StartUpPosition = 3 '窗口缺省
Begin VB.CommandButton Command2
Caption = "分析"
Height = 375
Left = 1680
TabIndex = 14
Top = 3240
Width = 1095
End
Begin VB.TextBox Text4
Height = 375
Left = 1680
TabIndex = 3
Top = 1320
Width = 855
End
Begin VB.CommandButton Command1
Caption = "重置"
Height = 375
Left = 240
TabIndex = 11
Top = 3240
Width = 1095
End
Begin VB.Frame Frame2
BackColor = &H80000013&
Caption = "结果显示"
Height = 2295
Left = 840
TabIndex = 10
Top = 3840
Width = 9135
Begin VB.TextBox Text5
BackColor = &H80000013&
Height = 1965
Left = 240
MultiLine = -1 'True
ScrollBars = 3 'Both
TabIndex = 13
Top = 240
Width = 8655
End
End
Begin VB.TextBox Text3
Height = 1815
Left = 3480
MultiLine = -1 'True
ScrollBars = 3 'Both
TabIndex = 9
Top = 2040
Width = 6615
End
Begin VB.Frame Frame1
BackColor = &H80000013&
Caption = "数据输入方式"
Height = 975
Left = 240
TabIndex = 5
Top = 1920
Width = 2295
Begin VB.OptionButton Option2
BackColor = &H80000013&
Caption = "使用文本框"
Height = 255
Left = 480
TabIndex = 7
Top = 600
Width = 1455
End
Begin VB.OptionButton Option1
BackColor = &H80000013&
Caption = "使用表格"
Height = 255
Left = 480
TabIndex = 6
Top = 240
Value = -1 'True
Width = 1335
End
End
Begin VB.TextBox Text2
Height = 375
Left = 1680
TabIndex = 2
Top = 720
Width = 855
End
Begin VB.TextBox Text1
Height = 375
Left = 1680
TabIndex = 1
Top = 120
Width = 855
End
Begin vsFlexLib.vsFlexArray vsFlexArray1
Height = 1575
Left = 3480
TabIndex = 8
Top = 360
Width = 6615
_Version = 196608
_ExtentX = 11668
_ExtentY = 2778
_StockProps = 228
Appearance = 1
ConvInfo = 1413783674
ScrollTrack = -1 'True
Editable = -1 'True
End
Begin VB.Label Label3
BackColor = &H80000013&
Caption = "类别总数"
Height = 255
Left = 360
TabIndex = 12
Top = 1320
Width = 855
End
Begin VB.Label Label2
BackColor = &H80000013&
Caption = "指标总数"
Height = 255
Left = 360
TabIndex = 4
Top = 720
Width = 855
End
Begin VB.Label Label1
BackColor = &H80000013&
Caption = "样品总数"
Height = 255
Left = 360
TabIndex = 0
Top = 240
Width = 855
End
End
Attribute VB_Name = "Form02"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Base 1
'********************************************************************************************
' 函数部分
'
'
'********************************************************************************************
Sub putout(A() As Double, m%, n%) 'm为矩阵的行,n为矩阵的列
'****************************************************************************************
' 功能 : 输出矩阵
' 参数 : a为待输出的矩阵;m为a矩阵的行;n为a矩阵的列
' 返回值: 无返回值
'****************************************************************************************
For i = 1 To m
For j = 1 To n
Print Tab(j * 20); A(i, j); 'Format(a(i, j), "0.0000");
Next j
Print
Next i
End Sub
Sub pingjun(A() As Double, m%, qd%, zd%, pj() As Double)
'****************************************************************************************
' 功能 : 求m列矩阵从第qd列到第zd列的平均
' 参数 : a为待求矩阵;m为矩阵的行数;qd为起始列下标;zd终止列下标
' 返回值: pj返回最终结果,是一m为列向量
'****************************************************************************************
ReDim pj(m) As Double
For i = 1 To m
For j = qd To zd
pj(i) = pj(i) + A(j, i)
Next j
pj(i) = pj(i) / (zd - qd + 1)
Next i
End Sub
Sub licha(A() As Double, m%, qd%, zd%, lc() As Double)
'****************************************************************************************
' 功能 : 求m列矩阵从第qd列到第zd列的离差
' 参数 : a为待求矩阵;m为矩阵的行数;qd为起始列下标;zd终止列下标
' 返回值: lc返回最终结果,是一m为列向量
'****************************************************************************************
ReDim lc(m, m) As Double '原来的lc矩阵可能已存入非零数据,所以要重新声明使其数据均为零
Dim pj1() As Double
Call pingjun(A(), m, qd, zd, pj1())
For r = 1 To m
For t = 1 To m
For j = qd To zd
sum = sum + (A(j, t) - pj1(t)) * (A(j, r) - pj1(r))
Next j
lc(t, r) = sum
sum = 0
Next t, r
End Sub
Sub chengfa(n() As Double, p() As Double, m() As Double)
'****************************************************************************************
' 功能 : 求两矩阵的乘积
' 参数 : n,p为待求乘积的两矩阵(n的列数必须与p的行数相同,否则结果无效)
' 返回值: m返回乘积结果的矩阵,行数与n的相同,列数与p的相同
'**************************************************************************************
A = UBound(n, 1): B = UBound(n, 2): B = UBound(p, 1): c = UBound(p, 2)
ReDim m(A, c)
For i = 1 To A
For j = 1 To c
For k = 1 To B
m(i, j) = m(i, j) + n(i, k) * p(k, j)
Next
Next
Next
End Sub
Sub zhuanzhi(A() As Double, B() As Double)
'****************************************************************************************
' 功能 : 求矩阵的转置
' 参数 : a为待求矩阵
' 返回值: b返回最终结果即a的转置
'****************************************************************************************
m = UBound(A, 1): n = UBound(A, 2)
ReDim B(n, m)
For i = 1 To n
For j = 1 To m
B(i, j) = A(j, i)
Next j
Next i
End Sub
Sub MRinv(n As Integer, A() As Double, mtxA() As Double, flag As Boolean)
'****************************************************************************************
' 功能 : 用全选主元高斯-约当法实现矩阵求逆
' 参数 : a为待求矩阵;n为其阶数
' 返回值: flag返回False表示求逆失败(无逆),返回True表示求逆成功结果存入mtxA矩阵
'****************************************************************************************
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 i = 1 To n
For j = 1 To n
mtxA(i, j) = A(i, j)
Next j, i
' 全选主元,消元
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
flag = False
Exit Sub
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -