技术标签: 数据分析 机器学习 信息可视化 人工智能 概率论
水文频率计算的两个基本内容包括分布线型及参数估计。水文分析计算中使用的概率分布曲线俗称水文频率曲线,习惯上把由实测资料(样本)绘制的频率曲线称为经验频率曲线,而把由数学方程式所表示的频率曲线称为理论频率曲线。连续型随机变量的分布是以概率密度曲线和分布曲线来表示的,这些分布在数学上有很多的类型。我国工程水文学中常用的分布有正态分布、皮尔逊Ⅲ型分布以及对数正态分布等。
根据SL 44—2006《水利水电工程设计洪水计算规范》规定,频率曲线的线型一般选用皮尔逊Ⅲ型。
英国生物学家皮尔逊通过大量的分析研究,提出一种概括性的曲线族,包括13种分布曲线,其中第Ⅲ型被引入水文计算中,成为当前水文计算中常用的频率曲线。
皮尔逊第Ⅲ型曲线是一条一端有限,一端无线的不对称单峰的正偏的曲线,数学上称之为伽马分布,其概率密度函数为:
f ( x ) = β α Γ ( α ) ( x − a 0 ) a − 1 e − β ( x − a 0 ) f(x)=\frac{β^α}{\Gamma(\alpha)}(x-a_0)^{a-1}e^{-\beta(x-a_0)} f(x)=Γ(α)βα(x−a0)a−1e−β(x−a0)
式中,Γ(α)为α的伽马函数;α,β,a0表征皮尔逊Ⅲ型分布的形状、尺度和位置的三个参数,α>0,β>0。
显然,参数α、β、a0一旦确定,该密度函数随之确定。可以证明,这三个函数与总体的三个统计参数
均值:
x \frac{}{x} x
离差系数:
C v C_v Cv
偏态系数:
C s C_s Cs
具有下列关系:
{ α = 4 C s 2 β = 2 x C s C v a 0 = x ( 1 − 2 C v C s ) \begin{cases}\alpha=\frac{4}{C_s^2}\\ \beta=\frac{2}{\frac{}{x}C_sC_v}\\ a_0=\frac{}{x}(1-\frac{2C_v}{C_s})\end{cases} ⎩
⎨
⎧α=Cs24β=xCsCv2a0=x(1−Cs2Cv)
水文计算中,一般需要推求指定频率P所对应的随机变量Xp,这要通过对密度曲线进行积分,求出等于或大于Xp的累积频率P值,即
P = F ( x p ) = P ( x ≥ x p ) = β α Γ ( α ) ∫ x p ∞ ( x − a 0 ) a − 1 e − β ( x − a 0 ) d x P=F(x_p)=P(x\geq x_p)=\frac{\beta^{\alpha}}{\Gamma(\alpha)}\int_{x_p}^{\infty}{(x-a_0)^{a-1}e^{-\beta(x-a_0)}}dx P=F(xp)=P(x≥xp)=Γ(α)βα∫xp∞(x−a0)a−1e−β(x−a0)dx
但是由上式直接计算P非常麻烦,美国工程师福斯特通过变量转换,根据拟定的Cs值进行多次积分,并把结果制成专用表格(Φ值表),供水利工作者直接查用。引入变量:
Φ = x − x ‾ x ‾ C v \Phi=\frac{x-\overline{x}}{\overline{x}C_v} Φ=xCvx−x
则变量Φ的均值为0,均方差为1,水文学中称为离均系数。这样经过标准化变换后,原被积分的函数中就只含有一个待定参数Cs,即
P ( Φ ≥ Φ p ) = ∫ Φ p ∞ f ( Φ , C s ) d Φ P(\Phi\geq{\Phi_p})=\int_{\Phi_p}^{\infty}f(\Phi,C_s)d\Phi P(Φ≥Φp)=∫Φp∞f(Φ,Cs)dΦ
根据估计的频率分布曲线和样本经验点据分布配合最佳来优选参数的方法叫做适线法(亦叫配线法)。该法自20世纪50年代开始即在我国水文频率计算中得到较为广泛应用,层次清楚,方法灵活,操作容易,目前已是我国水利水电工程设计洪水规范中规定的主要参数估计方法。它的实质是通过样本的经验分布去探求总体的分布。适线法包括传统目估适线法及计算机优化适线法
由此,本节以P—Ⅲ型分布为例,介绍如何使用Python完成适线法。示例分为均匀格纸(未添加海森格纸)的情形和非均匀格纸(添加海森格纸)的情形,并作对比。
示例数据来自某水文站1965年—1995年的年径流,如下表所示(该表格在文件为 shixianshuju.xlsx)。
Year | Flow(m3/s) |
---|---|
1965 | 1676 |
1966 | 601 |
1967 | 562 |
1968 | 697 |
1969 | 407 |
1970 | 2259 |
1971 | 402 |
1972 | 777 |
1973 | 614 |
1974 | 490 |
1975 | 990 |
1976 | 597 |
1977 | 214 |
1978 | 196 |
1979 | 929 |
1980 | 1828 |
1981 | 343 |
1982 | 413 |
1983 | 493 |
1984 | 372 |
1985 | 214 |
1986 | 1117 |
1987 | 761 |
1988 | 980 |
1989 | 1029 |
1990 | 1463 |
1991 | 540 |
1992 | 1077 |
1993 | 571 |
1994 | 1995 |
1995 | 1840 |
实例1 均匀格纸(未添加海森格纸)
首先导入需要的库:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
读取表格:
df=pd.read_excel('shixianshuju.xlsx')
# print(df)
flow=list(df['Flow(m3/s)'])
flow_sort=sorted(flow,reverse=True)
# print(len(flow_sort))
特征值计算:
mean_flow=np.mean(flow)
std_flow=np.std(flow)
Cv=std_flow/mean_flow
得Cv=0.65,假定Cs=2Cv,查K值表,得出对应于频率P的Kp值乘以平均流量得出相应Qp值。
Kp1=list(df['Kp1'].dropna())
P1=list(df['P%'].dropna())
# print(Kp1)
Qp=[]
for q in Kp1:
qi=q*mean_flow
Qp.append(qi)
最后绘图:
x=P
y=flow_sort
plt.scatter(x,y,label='经验频率')
plt.scatter(P1,Qp)
plt.plot(P1,Qp,label='理论频率')
plt.text(x= 81,y= 3500,s="Cv=0.65\nCs=2Cv", bbox=dict(facecolor="white" ,alpha=0.5) )
plt.title('配线结果',fontsize=10)
plt.xlabel('频率%',fontsize=10)
plt.ylabel('流量(m3/s)',fontsize=10)
plt.legend()
plt.grid()
plt.show()
适线结果如下图所示:
完整代码如下:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df=pd.read_excel('shixianshuju.xlsx')
# print(df)
flow=list(df['Flow(m3/s)'])
flow_sort=sorted(flow,reverse=True)
# print(len(flow_sort))
xuhao=[]
P=[]
for i in range(1,32):
p=100*(i/(len(range(1,31))+1))
xuhao.append(i)
P.append(p)
# print(len(P))
mean_flow=np.mean(flow)
std_flow=np.std(flow)
Cv=std_flow/mean_flow
# 得Cv=0.65,假定Cs=2Cv,查K值表,得出对应于频率P的Kp值乘以平均流量得出相应Qp值
Kp1=list(df['Kp1'].dropna())
P1=list(df['P%'].dropna())
# print(Kp1)
Qp=[]
for q in Kp1:
qi=q*mean_flow
Qp.append(qi)
# print(Qp)
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文
# 为了坐标轴负号正常显示。matplotlib默认不支持中文,设置中文字体后,负号会显示异常。需要手动将坐标轴负号设为False才能正常显示负号。
matplotlib.rcParams['axes.unicode_minus'] = False
x=P
y=flow_sort
plt.scatter(x,y,label='经验频率')
plt.scatter(P1,Qp)
plt.plot(P1,Qp,label='理论频率')
plt.text(x= 81,y= 3500,s="Cv=0.65\nCs=2Cv", bbox=dict(facecolor="white" ,alpha=0.5) )
plt.title('配线结果',fontsize=10)
plt.xlabel('频率%',fontsize=10)
plt.ylabel('流量(m3/s)',fontsize=10)
plt.legend()
plt.grid()
plt.show()
实例2 非均匀格纸(添加海森格纸)
导入需要的库:
from scipy.special import gdtrix, ndtri #引入伽马累积分布函数的反函数与正态分布的分位数,
import matplotlib.pylab as plt
import numpy as np
import pandas as pd
定义概率密度计算函数与统计参数计算函数:
def xtrans(plist): # plist传入的是一个p值列表数据,plist必须是概率值,返回的xplist也是一个列表数据
xzero = ndtri(0.0001)
xplist = []
for i in range(len(plist)):
xplisti = ndtri(plist[i] / 100)
xplisti -= xzero
xplist.append(xplisti)
return xplist
def jlxs(plist, cs):
aa = 4 / cs ** 2 #即公式中的阿尔法值
tp = [] # 为求离均系数fp,tp是过渡
fp = []
for i in range(len(plist)): # 离均系数fp
tpi = round(gdtrix(1, aa, 1 - plist[i] / 100), 3) # 采用了标准伽马分布,a=1
fpi = round(cs * tpi / 2 - 2 / cs, 3)
tp.append(tpi)
fp.append(fpi)
return fp # 返回的fp也是一个列表数据
读取数据:
df=pd.read_excel('shixianshuju.xlsx')
Q=list(df['Flow(m3/s)'])
绘制坐标轴,建立海森格纸:
pstandard = [0.01,0.05, 0.1, 0.2, 0.5, 1.0, 2.0, 3.0, 5.0, 10.0, 20.0,30.0, 40.0, 50.0, 60.0, 70.0,80.0, 90.0, 95.0, 97.0, 99.0, 99.5, 99.9]
x_axis = [str(i) + '' for i in pstandard]
x = xtrans(pstandard)
y_axis = np.linspace(0, round(max(Q) * 1.2, 2), 10, dtype=np.float32)
绘制原始数据的散点图:
qj = np.mean(Q)
qcv = np.std(Q) * np.sqrt(len(Q) / (len(Q) - 1)) / qj # 无偏估计的cv值,标准差除均值
Q.sort(reverse=True)
# print(Q)
pq = [(i + 1) *100/ (len(Q) + 1) for i in range(len(Q))] # Q的经验频率 P=m/(n+1),通过期望公式,见书本P50
# print(pq)
pqx = xtrans(pq)
plt.scatter(pqx, Q)
绘制预测的概率曲线,需要知道Cs、Cv以及均值:
n = 2 # 是自定义值
cs = n * qcv
qpredict = [qj * (qcv * m + 1) for m in jlxs(pstandard, cs)]
最后绘图:
plt.plot(x, qpredict, 'r', '-')
font2={
'family':'SimHei','size':16,'color':'k'}
plt.title('P-III曲线拟合',fontdict=font2)
plt.xlabel('频率(%)',fontdict=font2)
plt.ylabel('流量(m^3/s)',fontdict=font2)
plt.text(x=5, y=2200, s="mean_value={:.2f}\nCv=0.65\nCs=2Cv".format(qj,cs, qcv), size = 15, family = "Times New Roman", color = "black", weight = "normal",bbox = dict(facecolor = "w", alpha = 1))
plt.show()
结果如下图所示:
完整代码如下:
from scipy.special import gdtrix, ndtri #引入伽马累积分布函数的反函数与正态分布的分位数,
import matplotlib.pylab as plt
import numpy as np
import pandas as pd
def xtrans(plist): # plist传入的是一个p值列表数据,plist必须是概率值,返回的xplist也是一个列表数据
xzero = ndtri(0.0001)
xplist = []
for i in range(len(plist)):
xplisti = ndtri(plist[i] / 100)
xplisti -= xzero
xplist.append(xplisti)
return xplist
def jlxs(plist, cs):
aa = 4 / cs ** 2 #即公式中的阿尔法值
tp = [] # 为求离均系数fp,tp是过渡
fp = []
for i in range(len(plist)): # 离均系数fp
tpi = round(gdtrix(1, aa, 1 - plist[i] / 100), 3) # 采用了标准伽马分布,a=1
fpi = round(cs * tpi / 2 - 2 / cs, 3)
tp.append(tpi)
fp.append(fpi)
return fp # 返回的fp也是一个列表数据
df=pd.read_excel('shixianshuju.xlsx')
Q=list(df['Flow(m3/s)'])
# 坐标轴的绘制
# pstandard = [0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1.0, 2.0, 3.0, 5.0, 10.0, 20.0, 25.0,30.0, 40.0, 50.0, 60.0, 70.0, 75.0, 80.0, 90.0, 95.0, 97.0, 99.0, 99.5, 99.9]
pstandard = [0.01,0.05, 0.1, 0.2, 0.5, 1.0, 2.0, 3.0, 5.0, 10.0, 20.0,30.0, 40.0, 50.0, 60.0, 70.0,80.0, 90.0, 95.0, 97.0, 99.0, 99.5, 99.9]
x_axis = [str(i) + '' for i in pstandard]
x = xtrans(pstandard)
y_axis = np.linspace(0, round(max(Q) * 1.2, 2), 10, dtype=np.float32)
#print(x_axis, y_axis, sep='\n')
# print(x)
# 建立海森图纸张,需要知道Q的最大值来确定横坐标的上限
fig = plt.figure(figsize=(12,6))
ax1 = fig.add_subplot(111)
for i in range(len(x)):
plt.vlines(x[i], 0, round(max(Q) * 1.2, 2), 'blue', '--')
for j in range(len(y_axis)):
plt.hlines(y_axis[j], 0, max(y_axis), 'blue', '--')
plt.xticks(x, x_axis, color='black', rotation=0)
plt.yticks(y_axis, y_axis, color='black', rotation=0)
plt.ylim(0, round(max(Q) * 1.2, 2))
plt.xlim(0, round(max(x) + 0.1, 2))
plt.tick_params(labelsize=10)
# 绘制原始数据的散点图
qj = np.mean(Q)
qcv = np.std(Q) * np.sqrt(len(Q) / (len(Q) - 1)) / qj # 无偏估计的cv值,标准差除均值
Q.sort(reverse=True)
# print(Q)
pq = [(i + 1) *100/ (len(Q) + 1) for i in range(len(Q))] # Q的经验频率 P=m/(n+1),通过期望公式,见书本P50
# print(pq)
pqx = xtrans(pq)
plt.scatter(pqx, Q)
# 绘制预测的概率曲线,需要知道cs,cv,qj(均值)
n = 2 # 是自定义值
cs = n * qcv
qpredict = [qj * (qcv * m + 1) for m in jlxs(pstandard, cs)]
plt.plot(x, qpredict, 'r', '-')
font2={
'family':'SimHei','size':16,'color':'k'}
plt.title('P-III曲线拟合',fontdict=font2)
plt.xlabel('频率(%)',fontdict=font2)
plt.ylabel('流量(m^3/s)',fontdict=font2)
plt.text(x=5, y=2200, s="mean_value={:.2f}\nCv=0.65\nCs=2Cv".format(qj,cs, qcv), size = 15,\
family = "Times New Roman", color = "black", weight = "normal",\
bbox = dict(facecolor = "w", alpha = 1))
plt.show()
Mann-Kendall
文章浏览阅读1.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态
文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境
文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn
文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker
文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机
文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk
文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入
文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。 Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。
文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动
文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计
文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;gt;Jni-&amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图
文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法