MATLAB社区

MATLAB,社区等

天气预报-你能走多远?

今年夏天,我岳母在新罕布什尔州租了一套湖边的房子。我妻子看了看日历,说:“从十天的天气预报看,下星期湖边会很热。”这导致了对十天预报优点的更广泛的讨论。

湖

有趣的是,我们可以根据对天气的长期预测来做出决定,尽管我们很少回头去验证预测是否正确。不知何故,预测的存在本身就赋予了它价值。我一直在思考这个问题:我们应该在多大程度上相信十天的预测?碰巧,我有一些数据在这里可能有用。一段时间以来,我一直在收集有关资料时尚的:马萨诸塞州纳蒂克(MathWorks的家乡)的十天天气预报。让我们计算一些数字。

趋势如下:马萨诸塞州纳蒂克的十天预报高点

该趋势每天收集10个数据点:今天的高温和未来9天的预测高温。在MATLAB中,我们将使用一个矩阵,每天一行,十列。

让我们把数据输入MATLAB,这样我们就可以处理它了。我可以检索(你也可以)数据从新潮作为一个JSON对象使用以下调用:

//www.tatmou.com/matlabcentral/trendy/trends/1655/trend_data.json

为了把这个读入MATLAB,我要用Joe Hicklin的JSON解析器

url =“//www.tatmou.com/matlabcentral/trendy/trends/1655/trend_data.json”;Json = url (url);raw = json .parse(json);
T = 0(长度(原始),1);D = 0(长度(原始),10);I = 1:长度(raw) t(I) = raw{I}{1};预测= raw{i}{2};J = 1:10 d(i, J) = str2num(预测{J});结束结束firstTenRows = d(1:10,:)
firstTenRows = 44 51 59 66 46 48 53 50 51 54 50 58 63 49 48 52 48 46 57 54 59 61 49 47 53 49 48 43 41 48 62 49 48 54 49 39 39 44 47 46 49 48 54 50 40 38 39 47 51 54 47 55 50 39 40 48 52 53 53 53 54 50 40 39 48 53 54 52 52 50 49 40 38 50 55 54 56 56 53 49 40 39 50 56 54 52 56 54 47 43 39 50 55 55 55 59 58 40 41 46

现在我有一个这样结构的温度预测矩阵。

天气预报

我想对这个矩阵重新排序,这样每一行都能显示某一天的预测轨迹。这意味着去掉上面图表中突出显示的对角线。让我们写一些代码来做这个移位。我将得到两个新的矩阵,d1和d2

rowIndex = 1:10;colIndex = 10:-1:1;Sz =大小(d);Len = (size(d,1)-10);D1 = 0 (len,10);D2 = 0 (len,10);T1 = 0 (len,1);i = 1:len ind = sub2ind(sz,rowIndex+i-1,colIndex);趋势= d(ind);D1 (i,:) =趋势;D2 (i,:) = trend-trend(end);T1 (i) = t(i+9);结束firstTenRows = d1(1:10,:)
firstTenRows = 54 57 43 39 38 40 39 38 39 39 54 41 44 39 48 48 50 50 50 49 48 47 47 52 53 55 56 55 54 57 46 51 53 54 54 54 55 55 57 58 54 53 52 56 52 55 57 57 60 58 53 52 56 56 59 59 61 63 63 64 50 53 54 58 45 42 45 44 44 43 49 47 40 39 37 42 43 43 43 43 43 41 41 42 44 48 47 49 48 47 46 44 48 49 46 52 51 50 49 48

在d1中,每一行是每天变化的温度预测。所以当我们画d1的第一行时,我们得到了去年11月13日的预测弧线。

I = 1;队的阴谋(9:0 d1(我,:))标题(sprintf (' %s的预测温度'datestr (t1 (i), 1)))包含(“预测时间(以天为单位)”) ylabel (“预测温度(华氏度)”

在d2中,我们只需从每一行中减去每一行的最后一个值。因为这个最后的值是最终的(大概是正确的)温度,这个差值给了我们10天内的预测误差。这是11月13日预测的误差。

I = 1;队的阴谋(9:0 d2(我,:))标题(sprintf (“%s的预测温度错误”datestr (t1 (i), 1)))包含(“预测时间(以天为单位)”) ylabel (“预测误差(F学位)”

注意,随着时间的推移,它会缩小到零。这很好!我们的预测越接近实际的日子越准确。但早期的预测误差高达18度。这是好还是坏?你告诉我。

现在让我们看看所有的日子。

队的阴谋(9:0 d2”,“颜色”,[0.5 0.5 1])标题(“预测温度错误”)包含(“预测时间(以天为单位)”) ylabel (“预测误差(F学位)”

很难得到误差分布的感觉。让我们用误差绝对值的直方图来结束。在该数据集中的240次测量中,10天预测的中位误差为6度。

嘘(abs (d2(: 1)), 1:25)标题(“十天预报误差直方图”)包含(错误(度数F)) ylabel (“样本数量”

看起来不错。大多数情况下,误差将小于华氏7度左右(或4摄氏度)。我可能不需要为周末去湖边带毛衣了。




发布与MATLAB®R2014a

|
  • 打印
  • 发送电子邮件

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。