⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 单纯刑法.frm

📁 完整的数值模拟软件
💻 FRM
字号:
VERSION 5.00
Begin VB.Form Form21 
   BackColor       =   &H00FFFFFF&
   Caption         =   "单纯形法"
   ClientHeight    =   7830
   ClientLeft      =   60
   ClientTop       =   345
   ClientWidth     =   7875
   LinkTopic       =   "Form13"
   ScaleHeight     =   7830
   ScaleWidth      =   7875
   StartUpPosition =   3  '窗口缺省
End
Attribute VB_Name = "Form21"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim f0!
Dim n As Integer, m As Integer
Dim a(), b(), x(), c()
Private Sub dcxbxs(a(), b(), c())
Print Tab(6); String(12 * (n + 2), "_")

i = 1
Do While i <= n
    Print Tab(12 * i); "x(" & i & ")";
    i = i + 1
Loop
Print Spc(8); "-f"; Spc(8); "  b  "
Print Tab(6); String(12 * (n + 2), "_")
i = 1
Do While i <= m
    j = 1
    Print
    Do While j <= n
        Print Tab(12 * j); Format(a(i, j), "#######.##");
        j = j + 1
    Loop
    Print Tab(12 * j); "0";
    Print Tab(12 * (j + 1)); Format(b(i), "#######.####");
    i = i + 1
Loop
Print Tab(6); String(12 * (n + 2), "_")

j = 1
Print
Do While j <= n
   Print Tab(12 * j); Format(c(j), "#######.##");
   j = j + 1
Loop
Print Tab(12 * j); "1";
Print Tab(12 * (j + 1)); Format(f0, "#######.####");
Print Tab(6); String(12 * (n + 2), "_")

End Sub

Private Sub Form_Click()
n = InputBox("输入变量的个数")
m = InputBox("输入方程的个数")
'n = 4
'm = 2
ReDim a(m, n), b(m), x(n), c(n)

'a(1, 1) = 1: a(1, 2) = -1: a(1, 3) = 1: a(1, 4) = 0: b(1) = 1
'a(2, 1) = 3: a(2, 2) = -2: a(2, 3) = 0: a(2, 4) = 1: b(2) = 6
'c(1) = -3: c(2) = -2: c(3) = 0: c(4) = 0






k = 0

i = 1
Do While i <= m
j = 1
Do While j <= n
a(i, j) = Val(InputBox("a(" & i & "," & j & ")=  "))
j = j + 1
Loop
b(i) = Val(InputBox("b(" & i & ")=  "))
i = i + 1
Loop
j = 1
Do While j <= n
c(j) = Val(InputBox("c(" & j & ")=  "))
j = j + 1
Loop




f0 = 0
Print
Print
Print
Print "                  k=" & k & "时的单纯形表:"
Call dcxbxs(a(), b(), c())

MsgBox "按任意键继续"

Do While True
   '找出最小的Cs
   s = 1
   cs = c(1)
   i = 2
   Do While i <= n
      If c(i) < cs Then
         cs = c(i)
         s = i
      End If
      i = i + 1
   Loop

   '判断最小的Cs是否大于等于0(判断单纯形表是否为最优可行解的单纯形表)
   If cs >= 0 Then
      Print
      Print
      Print "                  k=" & k & "时的单纯形表为最优可行解对应的单纯形表:"
      Call dcxbxs(a(), b(), c())
      MsgBox "按任意键继续"
      Exit Do
   End If
   
   '最小的Cs小于0(单纯形表不是最优可行解的单纯形表),考察与最小Cs对应列的变量的系数A(i,s)
   '找出最大的A(i,s)
   R = 1
   ars = a(1, s)
   i = 2
   Do While i <= m
      If a(i, s) > ars Then
         ars = a(i, s)
         R = i
      End If
      i = i + 1
   Loop

   '判断最大的A(i,s)是否小于0
   If ars < 0 Then
      Print
      Print "                  k=" & k & "时的单纯形表:(该线性规划问题的解为无界解)"
      Call dcxbxs(a(), b(), c())
      MsgBox "按任意键继续"
      Exit Do
   End If
 
   '最大的A(i,s)大于0,找主元素r
   k = k + 1
   ars = b(R) / a(R, s)
   i = 1
   Do While i <= m
      If b(i) / a(i, s) < ars And b(i) / a(i, s) > 0 Then
         ars = b(i) / a(i, s)
         R = i
      End If
      i = i + 1
   Loop
   Print Tab(10); "s=" & s; Spc(5); "r=" & R; Spc(5); "主元素:" & a(R, s)
   MsgBox "按任意键继续"
   
  '用A(r,s)作主元素,消元后得到新的单纯形表
   
   '对r行的所有元素进行处理(所有元素除以A(r,s))
   ars = a(R, s)
   b(R) = b(R) / a(R, s)
   xs = b(R)
   i = 1
   Do While i <= n
      a(R, i) = a(R, i) / ars
      i = i + 1
   Loop
   
  '对S列元素进行处理(使除了A(r,s)=1外,其他的元素全部变换为0)
   i = 1
   Do While i <= m
      If i <> R Then
         j = 1
         Do While j <= n
            If j <> s Then
               a(i, j) = a(i, j) - a(R, j) * a(i, s)
            End If
            j = j + 1
         Loop
         b(i) = b(i) - a(i, s) * b(R)
         a(i, s) = 0
      End If
      i = i + 1
   Loop
   i = 1
   cs = c(s)
   Do While i <= n
      c(i) = c(i) - a(R, i) * cs
      i = i + 1
   Loop
   
   f0 = f0 - cs * xs
   Print
   Print
   Print "                  k=" & k & "时的单纯形表"
   Call dcxbxs(a(), b(), c())
   MsgBox "按任意键继续"
    


Loop

End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -