职场文秘网

首页 > 总结汇报 > 工作总结 / 正文

直饮水秒流量计算与VB编程|什么是直饮水

2019-12-01 07:38:53

摘要:随着人民生活水平的提高,建筑给排水工程设计中的直饮水系统也越来越多,工程设计中直饮水管道的秒流量计算也就显得比较重要了。

关键词:直饮水概率使用概率设计秒流量函数类循环体

随着人民生活水平的提高,建筑给排水工程设计中的直饮水系统也越来越多,工程设计中直饮水管道的秒流量计算也就显得比较重要了。

《2003全国民用建筑工程设计技术措施给水排水》中第3章第62页对直饮水管道的设计秒流量计算采用的是概率法进行计算。其计算步骤如下:

1.先计算出系统的最高日用水量qd:qd=n×qd

式中:n系统服务的人数qd用水定额(l/d.人)

2.再计算出系统最大时用水量qh:qh=kh×qd&pide;t

式中:kh时变化系数t系统中直饮水使用时间(h)

3.然后计算出饮用水龙头的使用概率p:p=α×qh&pide;(1800×n×q0)

式中:α经验系数,取0.6~0.9(一般取0.8)n龙头数量

q0龙头额定流量(l/s)

4.根据使用概率p,求出瞬时高峰用水量龙头使用数量m:

5.求出瞬时高峰用水量qs:qs=q0×m

在上述5个计算步骤中,第4步的计算在饮用水龙头数量少时尚可手算。如果龙头数量≥12个时,手算就很麻烦了。为此,书中特意列出了表3.1.9-3《龙头设置数量达12个以上时的使用数量》。表中对于使用概率为0.005的整数倍进行详细列表,并且表中的数量仅局限于1500个龙头。在实际工程计算中,计算出的使用概率是0.005的整数倍的可能性是很小的,对于小数量的龙头,采用内插法求解时其误差可以忽略不计;但是数量大时,其误差影响就比较大。为此,我在利用程序求解方面作了一些尝试。

在上述5个计算步骤中,第4步是整个计算过程中最难求解的一步。瞬时高峰用水量龙头使用数量m是在n个龙头中,若0~m个龙头使用概率的总和不小于0.99,则m为设计秒流量发生时的同时使用龙头个数。

在n个龙头中,任意r个同时使用的概率为pnr:

pnr=cnr×(1-p)n-r×pr

式中:cnr为从n个不同元素中,每次取出r个不同的元素,不管其顺序组合成的组合数量:

cnr=n!&pide;(r!×(n-r)!)

在n个龙头中,任意0~m个水龙头使用的概率总和不小于0.99,其表达式为

pn=∑r=0mcnr×(1-p)n-r×pr

因此,我们只要按r从0到m依次求出pnr以及pn,并判断pn是否满足≥0.99;如果是,则m的值就是我们所求的解。具体编程流程如下:

在上述编程流程中使用了一个dowhile循环,并加了个计数器。这样,在满足条件跳出循环的时候,就可以得到m的值。

但是在计算程序执行过程中,由于vb编程软件自身对于计算结果的限制,对于cnr=n!&pide;(r!×(n-r)!)中的组合数,如果采用integer变量,很容易就超出可计算的范围;如果采用long变量或double变量,则占用内存较多,且计算范围并未扩大很多。鉴于以上情况及所计算的概率值≤1,我考虑利用vb6提供的log函数(即数学函数中的ln),对上述公式进行了转换:

㏒(cnr)=㏒(n!)-(㏒(r!)+㏒(n-r)!)

㏒(pnr)=㏒(cnr)+(n-r)㏒(1-p)+r㏒(p)

因此在程序中,需要专门设计两个新的类:第一个类,用来处理㏒(pnr),其源程序如下:

functionlnjc(nasinteger)asdouble

dimtempjcasdouble

tempjc=0

dowhilen=1

tempjc=tempjc+log(n)

n=n-1

loop

lnjc=tempjc

endfunction

第二个类,用来处理㏒(cnr),其源程序如下:

functionlncjc(nasinteger,rasinteger,pasdouble)asdouble

dimtempcjc,temp0,temp1,temp2asdouble

dimn1asinteger

dimnn,rrasinteger

dimtempasnewlnjc

tempcjc=0:nn=n-r:n1=nn:rr=r

ifr<=0thenr=1

temp0=temp.lnjc(n)

temp1=temp.lnjc(r)

temp2=temp.lnjc(n1)

tempcjc=temp0-temp1-temp2

temp1=rr*log(p)

temp2=nn*log(1-p)

temp0=tempcjc+temp1+temp2

lncjc=temp0

endfunction

然后再用vb6中提供的另一个函数exp进行反向求解,既可以得到pnr。上述两个类在dowhile循环体内,然后再计算pn=∑r=0mpnr,退出循环体的条件是:

pn是否满足≥0.99

其循环体的求解源程序如下:

privatesubcommand3_click()

dimnasinteger

dimrasinteger

dimmasinteger

dimnn,mmasinteger

dimpasdouble

dimp0asdouble

dimtempasnewlncjc

iftext2.text<""thenfwrs=cdbl(text2.text)

iftext4.text<""thenysde=cdbl(text4.text)

iftext5.text<""thenn=cint(text5.text)

iftext7.text<""thenjyxs=cdbl(text7.text)

iftext9.text<""thenedll=cdbl(text9.text)

iftext3.text<""then

bhxs=cdbl(text3.text)

yssj=cint(yssjt.text)

p=log(jyxs*(bhxs*fwrs*ysde/yssj))-(log(1800*edll)+log(n))

p=exp(p)

text1.text=format(p,"0.###0")

else

p=cdbl(text1.text)

endif

ifn<=32000then

p0=0:mm=0:nn=n

dowhilep0<0.99

m=mm:n=nn

p0=p0+exp(temp.lncjc(n,m,p))

mm=mm+1

loop

text6.text=mm-1

text8.text=format(((mm-1)*edll),"0.##0")

else

msgbox("龙头总数量不能超过32000个!")

endif

endsub

这样,计算的龙头数量可以多达32000个龙头。对于较大的住宅小区,已经是足够用了。程序运行时的界面如下:

其窗体调用时的源程序如下:

privatesubform_load()

command3.enabled=false

endsub

对于建筑物性质,其参数控制的源程序如下:

privatesuboption1_click(indexasinteger)

selectcaseindex

case0

yssjt.text=24:text3.tooltiptext="4~6":text4.tooltiptext="一般:3~5发达地区:7~8"

case1

yssjt.text=10:text3.tooltiptext="2.5~4.0":text4.tooltiptext="2~3"

endselect

endsub

在上述的程序中,在可选参数设置了提示(如上图),使用户界面更具人性化;类functionlncjc(nasinteger,rasinteger,pasdouble)asdouble中调用类functionlnjc(nasinteger)asdouble,对计算程序进行了压缩;计算32000个龙头的过程在pii466mhz的机器上约需运行一分钟,即可以得出计算结果。

Tags:

搜索
网站分类
标签列表