使用MATLAB查找多天90%的温度超标

时间:2013-08-26 14:44:28

标签: matlab percentile

我正在开展一个项目,我正在努力寻找温度超过90%的多日活动。

我正在使用61年的数据并尝试根据6月至8月之间的每个月计算百分位数。换句话说,使用prctile函数,我想计算6月,7月和8月的第90个百分点,并根据当月的第90个百分位值比较每个月的每日温度值。

最终,我希望程序能够找到温度超过第90个百分位值的天数(2天,3天,4天,5天等),基于该月的值。

以下是我目前的代码:

fprintf('Loading the data...\n')
    load file_name.txt
    year=file_name(:,1);
    month=file_name(:,2);
    day=file_name(:,3);
    temax=file_name(:,6);
    temin=file_name(:,9);

    molen=[30 31 31];

    for y=1:61
        for m=6:8
            for k=1:molen
                g1=find(year==y+1950&month==m&day==k&temax>-99);
                g2=find(year==y+1950&month==m&day==k&temin>-99);
            end
            temaxpct=prctile(temax(g1),90);
            teminpct=prctile(temin(g2),90);
        end
        clear g*
    end
    exceedence=find(year&month&day&temax>=temaxpct&temin>=teminpct); 

我不知道如何让该计划计算每个月的第90个百分点(而不是6月至8月的整个3个月范围)。

此外,我不知道如何让程序找到温度超过90%的天数,特别是因为4天的活动还包括3天的活动和2天的活动。

我知道需要有一些if / else语句,但我不确定如何设置它。

1 个答案:

答案 0 :(得分:0)

只是阅读你的问题(没有深入研究代码),这里有两个指点:

  1. 如果你知道如何获得某个数据集的百分位数,你可以简单地循环几个月,每次只为你的函数提供那个月的数据。然后计算并存储该月的分位数。
  2. 如果您知道如何找到温度高于阈值的n天延伸,这是找到所有延伸的一种相当不优雅的方式:
    • 查找所有最大长度的延伸,将所有找到的值标记为已完成
    • 查找最大长度的所有延伸 - 1,仅使用未标记的值,将所有找到的值标记为已完成
    • 继续,直至达到最低要求
  3. 希望这可以让你走上正轨。