当前位置:编程学习 > C#/ASP.NET >>

请高手指点

程序编出来之后运行的结果也很好,为什么其中的一个输入参数改小程序就运行不出结果。
麻烦哪位高手指点下。
Private Sub Command1_Click()
'声明变量
Dim K As Double, Pg As Double, Pe As Double, Pc As Double, P As Double, P2 As Double, M4 As Double, U As Double
Dim Mp2 As Double, Me2 As Double, M5 As Double, P5 As Double, max As Double, a As Double, b As Double, c As Double, L As Double
'初始化
Nn = 0.85                  '输入数据
Nm = 0.85                  '输入数据
Nd = 0.85                  '输入数据
Te = 5                     '输入数据
Tg = 80                    '输入数据
K = 1.11                   '输入数据
Pg = 1.0833                '输入数据
Pe = 0.34784               '输入数据
Pc = 0.8833                '输入数据

'开始循环
For P2 = 0.000001 To Pe Step 0.001                                                         '假定P2的范围(最大值不能超过Pe,所以最大值设为Pe)
  
  Mp2 = Sqr(2 * Nn / (K - 1) * ((Pg / P2) ^ ((K - 1) / K) - 1))                               '计算Mp2,Me2的值
  Me2 = Sqr(2 / (K - 1) * ((Pe / P2) ^ ((K - 1) / K) - 1))
     
    For M4 = 1 To 10 Step 0.01                                                                '假定M4的范围
      M5 = Sqr((M4 ^ 2 + 2 / (K - 1)) / (2 * K * M4 ^ 2 / (K - 1) - 1))                        '计算M5,P5,Pc*(P即为Pc*)的值
      P5 = P2 * (1 + K * M4 ^ 2) / (1 + K * M5 ^ 2)
      P = P5 * (Nd * (K - 1) * M5 ^ 2 / 2 + 1) ^ (K / (K - 1))
      
        If (P - Pc) / Pc <= 0.005 And (P - Pc) / Pc >= -0.005 Then                            '判定P的精度
        a = Ma(M4) ^ 2 * Te / Tg - Ma(Me2) ^ 2 * Te / Tg                                       'a,b,c,L分别为方程7的三个系数和判别式
        b = Ma(M4) ^ 2 + Ma(M4) ^ 2 * Te / Tg - 2 * Nm * Ma(Mp2) * Ma(Me2) * Sqr(Te / Tg)
        c = Ma(M4) ^ 2 - Nm ^ 2 * Ma(Mp2) ^ 2
        L = b ^ 2 - 4 * a * c
             
        If L >= 0 Then                                                                         '如果判别式大于零,便可求出喷射系数U
          U = (-b + Sqr(L)) / (2 * a)
              List1.AddItem Format(U, "##.#############")                                       '输出结果
              List2.AddItem Str(M4) & vbCrLf
              List3.AddItem Str(P2) & vbCrLf
              List4.AddItem Str(Mp2) & vbCrLf
              List5.AddItem Str(Me2) & vbCrLf
             
              If max < U Then                                                                    '求喷射系数最大值
             max = U
             Label1.Caption = Format(max, "##.#############")
             Label2.Caption = Format(M4, "##.#############")
             Label3.Caption = Format(P2, "##.#############")
             Label9.Caption = Format(Mp2, "##.#############")
             Label10.Caption = Format(Me2, "##.#############")
             End If
          Else
          Exit For
        End If
     End If
    Next
Next
End Sub
Function Ma(M As Double) As Double
Const X As Single = 1.11                                                                       '公式8的子程序
Ma = Sqr(M ^ 2 * (X + 1) / (M ^ 2 * (X - 1) + 2))
End Function --------------------编程问答-------------------- 是不是精度的问题?你最好列出是哪个参数改小不行的
另外你for循环里的变量(如p2)应该定义个类型 --------------------编程问答-------------------- 第七个输入参数Pg如果改小的话程序循环不出结果,请问这是怎么回事?
麻烦您了。
--------------------编程问答-------------------- 你加下面的红色试试
For P2 as double = 0.000001 To Pe Step 0.001                                                          --------------------编程问答-------------------- 要学会调试,而不是把乱七八糟的代码一贴就不管了。天知道你要让程序做什么。如果代码根本就不是你写的,最好问写程序的人。 --------------------编程问答-------------------- 是这样的,我用的是令外一个软件EES,其中一个参数需要用VB计算,VB的程序是之前有人做好的,现在这个人不在这边了,联系不上,我们这边没有人会VB软件,所以就来论坛请教了,有点病急乱投医,添麻烦了。 --------------------编程问答--------------------
引用 5 楼 bubu06124 的回复:
是这样的,我用的是令外一个软件EES,其中一个参数需要用VB计算,VB的程序是之前有人做好的,现在这个人不在这边了,联系不上,我们这边没有人会VB软件,所以就来论坛请教了,有点病急乱投医,添麻烦了。


你能说清楚算法,给出输入/预期的输出测试数据,才有可能给出解决的办法。 --------------------编程问答--------------------
引用 6 楼 caozhy 的回复:
引用 5 楼 bubu06124 的回复:
是这样的,我用的是令外一个软件EES,其中一个参数需要用VB计算,VB的程序是之前有人做好的,现在这个人不在这边了,联系不上,我们这边没有人会VB软件,所以就来论坛请教了,有点病急乱投医,添麻烦了。

你能说清楚算法,给出输入/预期的输出测试数据,才有可能给出解决的办法。


哦,谢谢。我对这个软件理解不够,对问题没有说明清楚。
下面是计算所需的相关参数:
相关参数
工质选用R134a,其绝热系数K=1.11, 
Nn=0.85,Nm=0.85,Nd=0.85,这三个是常数。
工质温度参数:蒸发温度为Te=5℃;发生温度为Tg=80℃;冷凝温度为Tc=35℃;
工质压力参数:蒸发压力:Pe=0.34784MPa,发生压力:Pg=2.6248,冷凝压力: Pc=0.8833

第一步  开始

第二步  确定绝热指数; 

第三步  给定工况压力值(Pe,Pg,Pc)

第四步  假设P2的值

第五步  由式1,2计算MP2,Me2

第六步  假设M4的值(1-10)

第七步  由式3,4,5,6计算M5,P5, P*c

第八步  检验/(P*C—PC)/PC/≤ε 返回第六步

第九步  由式7,8计算得到一个喷射系数(0.1-0.4)  返回第四步

第十步  得到给定工况下的最大喷射系数

在这种情况下,计算出来的结果:喷射系数=0.1855
现在我想把发生压力改为:发生压力=冷凝压力+0.2,也就是0.8833+0.2=1.0833,这种情况下就循环不出结果了,您看我这样可以把问题说清楚吗? --------------------编程问答-------------------- 不是很懂 --------------------编程问答-------------------- 看下先,再想想 --------------------编程问答-------------------- EES?  工质? 冷凝?

热动 专业?

不需要那么麻烦. ees 本身就能 自定义 模块/函数/过程,来计算

EES本身足够解决问题了, 何须VB?

实在需要外部的交互,用文本,能解决一切问题 --------------------编程问答--------------------
引用 10 楼 CandPointer 的回复:
EES?  工质? 冷凝?

热动 专业?

不需要那么麻烦. ees 本身就能 自定义 模块/函数/过程,来计算

EES本身足够解决问题了, 何须VB?

实在需要外部的交互,用文本,能解决一切问题


EES默认的的饱和状态,这里的工质有亚临界和跨临界的,EES不适合计算。
补充:.NET技术 ,  VB.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,