1.5.11.1. Maximum wind speed prediction at the Sprogø station

运动目标是预测每50年出现的最大风速,即使在这样的时期没有措施存在。现有数据仅在位于丹麦的Sprogø气象站21年内测量。首先,将给出统计步骤,然后用来自scipy.interpolate模块的函数进行说明。最后,感兴趣的读者被邀请从原始数据和一个略有不同的方法计算结果。

1.5.11.1.1. Statistical approach

年度最大值应该拟合正态概率密度函数。然而,这种函数不会被估计,因为它给出了从风速最大值的概率。找到每50年出现的最大风速需要相反的方法,结果需要从定义的概率中找到。这就是分位数函数的作用,运动的目的是找到它。在当前模型中,假设每50年出现的最大风速被定义为上2%分位数。

根据定义,分位数函数是累积分布函数的倒数。后者描述了年度最大值的概率分布。In the exercise, the cumulative probability p_i for a given year i is defined as p_i = i/(N+1) with N = 21, the number of measured years. 因此,可以计算每个测量的风速最大值的累积概率。从这些实验点,scipy.interpolate模块将非常有用的拟合分位数函数。最后,50年最大值将从2%分位数的累积概率进行评估。

1.5.11.1.2. Computing the cumulative probabilities

年度风速最大值已经计算并以numpy格式保存在文件examples/max-speeds.npy中,因此它们将通过使用numpy加载:

>>> import numpy as np
>>> max_speeds = np.load('intro/summary-exercises/examples/max-speeds.npy')
>>> years_nb = max_speeds.shape[0]

根据上一节的累积概率定义p_i,相应的值将是:

>>> cprob = (np.arange(years_nb, dtype=np.float32) + 1)/(years_nb + 1)

并假设它们适合给定的风速:

>>> sorted_max_speeds = np.sort(max_speeds)

1.5.11.1.3. Prediction with UnivariateSpline

在本节中,将通过使用UnivariateSpline类来估计分位数函数,该类可以表示点的样条。默认行为是构建度数为3的样条,点可以根据其可靠性具有不同的权重。变量是InterpolatedUnivariateSplineLSQUnivariateSpline,错误检查将在其上更改。在需要2D样条的情况下,提供BivariateSpline类族。所有这些用于1D和2D样条的类都使用FITPACK Fortran子程序,这就是为什么通过splrepsplev功能可以获得较低的库访问,分别表示和评估样条。此外,还提供不使用FITPACK参数的插值函数以用于更简单的使用(参见interp1dinterp2dbarycentric_interpolate等等)。

对于Sprogø最大值风速,将使用UnivariateSpline,因为3次样条似乎正确拟合数据:

>>> from scipy.interpolate import UnivariateSpline
>>> quantile_func = UnivariateSpline(cprob, sorted_max_speeds)

分位数函数现在将从全范围的概率进行评估:

>>> nprob = np.linspace(0, 1, 1e2)
>>> fitted_max_speeds = quantile_func(nprob)

在当前模型中,每50年出现的最大风速被定义为上2%分位数。结果,累积概率值将是:

>>> fifty_prob = 1. - 0.02

所以每50年发生的风暴风速可以通过以下方法猜出:

>>> fifty_wind = quantile_func(fifty_prob)
>>> fifty_wind
array(32.97989825...)

现在,结果是在Matplotlib图上收集的:

../../_images/sphx_glr_plot_cumulative_wind_speed_prediction_001.png

解决方案:Python源文件

1.5.11.1.4. Exercise with the Gumbell distribution

感兴趣的读者现在被邀请使用21年测量的风速进行练习。测量时间约为90分钟(原始时间约为10分钟,但文件大小已减少,使练习设置更容易)。数据以numpy格式存储在文件examples/sprog-windspeeds.npy中。在完成练习之前,不要查看绘图的源代码。

  • 第一步是通过使用numpy找到年度最大值,并将它们绘制为matplotlib条形图。
../../_images/sphx_glr_plot_sprog_annual_maxima_001.png

答案:Python源文件

  • The second step will be to use the Gumbell distribution on cumulative probabilities p_i defined as -log( -log(p_i) ) for fitting a linear quantile function (remember that you can define the degree of the UnivariateSpline). 绘制年度最大值与Gumbell分布的比较应该给出如下图。
../../_images/sphx_glr_plot_gumbell_wind_speed_prediction_001.png

解决方案:Python源文件

  • 最后一步是找到34.23 m / s的最大风速发生每50年。