爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4582|回复: 2

[程序设计] 从小白到入门之EOF

[复制链接]

新浪微博达人勋

发表于 2018-2-28 14:37:32 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
写在前面
在气象家园已经学习了半年多,逐渐从一个小白慢慢入门。首先要感谢气象家园的各位大神们,每一个程序都让我受益颇多。然后我想说一下在气象家园学习半年多来最大的感受,就是在很多时候,对一个程序,小白和气象家园上各位大神的关注点是不同的,很多时候,小白会卡在很多其他人看来完全没有问题的地方,而这些地方通常也不会有很详细的注释,这就给小白对于程序的理解造成了非常大的阻碍。鉴于此,我打算对一些常用的气候统计方法的程序做一个比较详细的注释和解读,这些注释和解读是基于我半年多的学习所产生的困惑,作为一个小白,我觉得我的困惑应该会跟广大小白有很大一部分的共通性。程序都是我自己一句一句理解,自己编写出来的,并不是简单借鉴家园上大神的程序,希望能给努力的你提供一点帮助。


  从小白到入门之EOF
一、准备工作 在阅读程序前你需要:
   (1)理解EOF。家园上可参考的帖子:(http://bbs.06climate.com/forum.php?mod=viewthread&tid=7389)、(http://bbs.06climate.com/forum.p ... &extra=page%3D1)、可参考的教材:《现在气候统计诊断与预测技术》,魏凤英编著。如果你时间充裕,建议你好好再复习一下线性代数及统计学这两本本科必修书。
   (2)掌握matlab的基础操作。重点掌握以下函数的用法:find函数、reshape函数、矩阵的转置(fliplr、flipud、')、isnan函数、nanmean函数、eig函数。掌握nc格式数据的读取,家园上可参考的帖子:(http://bbs.06climate.com/forum.p ... &extra=page%3D1)、详细阅读二爷的系列教学帖。阅读市面上任意一本matlab教材的基础部分。
   (3)理解时空转化的意义。
   (4)掌握如何去季节循环。家园上可参考的帖子:(http://bbs.06climate.com/forum.php?mod=viewthread&tid=13857)。

二、重难点 你可能会感到困惑的是:
    (1)nc格式数据读取。解决办法:阅读帮助文档。自己操作理解。家园上可参考的帖子:(http://bbs.06climate.com/forum.p ... &extra=page%3D1 )。
    (2) reshape函数。解决办法:阅读帮助文档,自己操作理解,理解matlab如何读取矩阵内的数据。
    (3)剔除NaN值后(EOF分解不能有NaN值)如何恢复NaN值。(理解什么是NaN值)家园上可参考的帖子:(http://bbs.06climate.com/forum.php?mod=viewthread&tid=27887)、(http://bbs.06climate.com/forum.p ... p;extra=&page=2)、(http://bbs.06climate.com/forum.p ... p;extra=&page=1)。

三、总结
    (1)在尝试去季节循环的过程中,我发现了一个比较有意思的事情。首先我先将我的几种尝试分享给大家。
在编程一开始,我尝试去做季节循环的程序为
qjj=reshape_sst-mean(reshape_sst,2)*ones(1,360);
juping=qjj;
结果此据此计算出的方差贡献率为百分之九十多,一般原始矩阵才会有如此大的值,在经过深深大神的指点后,我将去季节循环程序变为:
aa=reshape_sst';
reshape_aa=reshape(aa,[12,9240]);
qjj=reshape_aa-nanmean(reshape_aa,2)*ones(1,9240);
juping=reshape(qjj,[360,308]);
x=juping';
后来发现此段程序存在一个严重错误,reshape后的矩阵,每行确实为每月的数据,但并不是同一空间点的,最后将程序改为
aa=reshape_sst';
reshape_a=reshape(aa,[12,30,308]);
ssp_mean=nanmean(reshape_a,2);
qjj=zeros(12,30,308);
for i=1:308
    qjj(:,:,i)=reshape_a(:,:,i)-ssp_mean(:,:,i)*ones(1,30);
end

juping=reshape(qjj,[308,360]);
不过运行程序后,发现一个有意思的事情,就是用后两个去季节循环得出的方差贡献率是一样的。。。我暂时还没有想清楚问题所在。
    (2)NaN至值我自己一直没有解决,完全参考了Aires大神的程序,(http://bbs.06climate.com/forum.p ... &extra=page%3D1[/url])


最后,此程序还是非常不完整的,缺少显著性检验,且只考虑了时空转化的情况。因为是本小白自己编写的,仅当作理解用,如果要做研究啥的家园有很多成熟的程序,大家可以参考,哈哈哈哈。

eofzaishiyan.m

1.77 KB, 下载次数: 8, 下载积分: 金钱 -5

评分

参与人数 1金钱 +10 贡献 +5 收起 理由
二爷名声在外 + 10 + 5

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-3-4 17:21:39 | 显示全部楼层
漂亮,赞,
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2018-3-6 10:48:53 | 显示全部楼层
{:5_213:}
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表