爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 7638|回复: 16

[经验总结] fortran编程之算法篇

[复制链接]

新浪微博达人勋

发表于 2013-9-9 13:32:11 | 显示全部楼层 |阅读模式

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

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

x
前几天在论坛发表了一个帖子,强调了输入输出在程序解决实际问题中的重要作用。
http://bbs.06climate.com/forum.php?mod=viewthread&tid=16909&extra=&page=1
然而正如@颜深深在回复里提到的那样,那个小老头不仅仅说输入输出是基础,更是强调算法是程序的灵魂。但是说到算法这个问题,我是有点虚,一本书都说不清的问题,我一个帖子肯定不可能说清楚。但是这个问题怎么破?但是我想从另一个角度来说一下这个问题。

算法与想要解决的问题,想要得到的结果密切相关。正如大气动力学里有尺度分析一样,算法也存在类似的问题。一句话,具体问题具体分析。

比如,你要用百分位阈值法分析极端温度,那么就要用排序,但是翻一下书,就知道排序算法好多好多,但是,大气科学领域内的数据,不会有很长样本量的数据,沉降法就是一个很适用的算法,关键一点,算法很好理解。的确有很多算法,可以减少代码,但是算法本身不容易被理解,理解这样一个算法,已经可以编好几次的沉降法。科研领域对于程序算法的首要要求就是简单易于实现,节省时间空间都是其次要考虑的。

如果你善于使用网络资源(PS:如果你能够看到这个帖子,就证明你已经奔跑在朝向光明的大道上),可能会发现好多程序网上都有,很多前辈也都以各种方式共享了无数的代码。eof、svd、各种相关、emd、积分微分,等等。这个时候你最重要的问题,是如何使用这些代码。首先最重要的是要可选择移植性强的代码,举个例子说明一下,eof,网上流传的大体有两个版本,一个是浑然一体的,program eof end program,一个是以子程序形式展现的,subroutine eof()  end... 优先选择的是什么?肯定是以子程序形式展现的。(PS:所以,我想呼吁大家,就像在上一个帖子说少用continue一样,自己编程尽量以子程序形式呈现,易于后人使用你的程序,改进提高。)所以,不擅长编程的人,除输入输出之外,首先要学会的是使用子程序。

但是有的时候,要解决的问题是一个新问题,别人可能做过,但是google,baidu都不能帮助你。这个你最需要的是,将这个问题破解,破解成网络上有的一个个子程序,然后用适当的代码串起来。这个时候循环和IF语句就会派上大用场。这就是为什么我在上个帖子里,别的什么也没说,唯独提了循环和IF语句。至于怎么破解问题,这是你科研能力的展现。

PS:
程序的第一行加一个implicit none,即程序中使用的每一个变量都要定义;
变量参与计算前要赋初值,特别是累加之类的运算。

另外,下一篇想讲,程序调试。


评分

参与人数 1威望 +4 金钱 +20 贡献 +5 体力 +80 收起 理由
言深深 + 4 + 20 + 5 + 80 很给力!

查看全部评分

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

新浪微博达人勋

发表于 2013-9-9 13:38:03 | 显示全部楼层
帮你艾特一下@言深深
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2013-9-9 13:45:45 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-9-9 13:51:08 | 显示全部楼层
楼主可以当老师了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-9-9 17:57:17 | 显示全部楼层
爆哥威武
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-3-19 18:44:21 | 显示全部楼层
嗯, 其实是模块化编程, 把应用程序的功能分成模块, 每个模块负责且只负责单独的一个功能
这样, 就像组装机械零件一样, 首先, 某一个模块会像螺丝钉一样可以到处去用, 非常节约开发的时间, 其次, 出了问题, 可以很容易地一个模块一个模块地调试, 在复杂的系统可以减轻处理问题的难度

关键字:面向对象编程, 设计模式, 模块开发, 请自行百度
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-7-12 21:32:21 | 显示全部楼层
{:5_213:}{:5_213:}
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2014-7-13 12:29:02 | 显示全部楼层
继续,很期待
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-9-10 10:33:20 | 显示全部楼层
”如果你能够看到这个帖子,就证明你已经奔跑在朝向光明的大道上“~得到鼓励了。。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-5-28 16:03:24 | 显示全部楼层
学习了,准备好好学习fortran
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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