-1

我正在做一个项目,我试图找到温度超过 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 语句,但我不确定如何设置它。

4

1 回答 1

0

只需阅读您的问题(无需深入研究代码),这里有两个指针:

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

希望这能让你走上正轨。

于 2013-08-26T15:34:02.103 回答