这篇文章起因是因为工作的需要,我们一般用的都是干湿球温度计(psychrometer)很早就知道相对湿度是空气中水蒸气分压和饱和水蒸气压力之间的比值,但是一直不知道怎么计算的。常规的都是测出干球和湿球的温度值,然后通过查干湿球对照表得出结论;这次查了一下资料,最大的感触是在学术类文章上百度不如google,我先用百度查了一下相关词,确实国内有人写过类似的文章,但是你也知道,对于没钱的人想看到清晰地原版资料是多么的困难,我下了一个资料,被他的推论公式搞得云里雾里(很多符号都看不清),让后我果断选择了google去搜索外文资料,很快就找到了,并且很权威很官方(来自维萨拉,至于它是干嘛的,大家百度一下吧!-_-!!)。
资料下载地址相对湿度计算
新问题接着出现,如何在已知干球温度和相对湿度的情况下推算湿球温度,
饱和蒸汽压计算公式 1:Pws=A*10^(m*T/(T+Tn)) (T为温度)就是这个公式。
A=6.089613,m=7.33502,Tn=230.3921
绝对含湿量水蒸汽分压计算公式2: Pw=Pws(Twet)-Ptot*K*(Tdry-Twet)(Ptot常压1013hPa,K为干湿球系数0.000662,Tdry为干球温度,Twet就是要求解的值)
Pw= Pws(Twet)-1013*0.000662*(Tdry-Twet)
相对湿度计算公式3: RH=Pw/Pws(Tdry)*100%
将湿球温度设成x,得到一个超越方程:
f(x)= A*10^(m*x/(x+Tn))-1013*0.000662*(Tdry-T)-Pw
用二分法求解
- #include<iostream>
- #include<cmath>
-
- double Pws(double T);
- double Fps(double T,double RH,const double Td);
- const double Accu=pow(10.0,-5.0);
- using namespace std;
-
- int main()
- {
- double a,b,R;
- double c=0.0;
- do
- {
- cout<<"输入干球温度:\n";
- cin>>a;
- if(a<0||a>100)
- cout<<"干球应该在0到100之间,请重新输入:\n";
- }
- while(!cin||a<0||a>100);
- do
- {
- cout<<"输入相对湿度:\n";
- cin>>R;
- if(R<0||R>1)
- cout<<"相对湿度应该在0和1之间,请重新输入:\n";
- }
- while(!cin||R<0||R>1);
- const double Td=a;
- do
- {
- b=(a+c)/2.0;
-
- if(Fps(a,R,Td)*Fps(b,R,Td)<0)
- c=b;
- else if(Fps(c,R,Td)*Fps(b,R,Td)<0)
- a=b;
- else
- break;
- }
- while (fabs(Fps(b,R,Td))>Accu);
- cout<<"湿球温度:"<<b;
- system("pause");
- return 0;
-
- }
-
- double Pws(double T)
- {
-
- return 6.089613*pow(10.0,7.33502*T/(T+230.3921));
- }
- double Fps(double T,double RH,double Td)
- {
-
-
- return Pws(T)-1013*0.000662*(Td-T)-Pws(Td)*RH;
- }