请高手指点
程序编出来之后运行的结果也很好,为什么其中的一个输入参数改小程序就运行不出结果。麻烦哪位高手指点下。
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软件,所以就来论坛请教了,有点病急乱投医,添麻烦了。 --------------------编程问答--------------------
你能说清楚算法,给出输入/预期的输出测试数据,才有可能给出解决的办法。 --------------------编程问答--------------------
哦,谢谢。我对这个软件理解不够,对问题没有说明清楚。
下面是计算所需的相关参数:
相关参数
工质选用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?
实在需要外部的交互,用文本,能解决一切问题 --------------------编程问答--------------------
EES默认的的饱和状态,这里的工质有亚临界和跨临界的,EES不适合计算。
补充:.NET技术 , VB.NET