选课类别:计划内与自由选修 | 教学类型:理论实验课 |
课程类别:本科计划内课程 | 开课单位:地球和空间科学学院 |
课程层次:专业选修 | 学分:3.0 |
苏振鹏老师的《科学计算与程序设计》课程主要教授Fortran语言进行科学计算和IDL软件进行数据分析与绘图。Fortran部分课程内容包括基础语法、模块化编程、数值算法(如RK4、一元方程求根、数值积分等),并涉及并行计算。IDL部分则集中于数据读取和各种绘图操作,涉及基本语法、画图注意事项和读取数据方式等内容。
苏老师年轻且幽默,课程内容讲解清晰,课堂气氛较为轻松。但也有学生指出,苏老师在考试中有时会考察类似阅读理解的问题,使得考试难度增大。
近年来作业量有所增加,Fortran和IDL两部分均有频繁的编程作业,同时还会有上机实验以实际操作和巩固所学内容。学期内一般会安排五次上机实验,题目可能会有一定难度,但对学生调试和实际操作能力有很大帮助。
考试形式灵活,老师会与同学商定具体的比例(如平时作业占30%,两次考试各占40%和30%)。考核内容主要集中在数值算法的实现,强调速度和准确度。上机考试完全开卷,但谁首先完成任务、提交报告将影响分数高低。学生建议提前准备好编程模板和文档以提高考试效率。
一直以来,给分情况并不算特别宽松,优秀率大约在20%至30%之间,平时成绩和上机表现影响较大。虽然作业量有所增加,但平时表现积累的额外加分(如活动Bonus)或课堂互动机会都会对总评成绩有所帮助。一般来说,只要认真学习,拿到3.7并不困难,但要取得4.0甚至更高的成绩可能需要在考试中表现优异。
这是地空学院部分专业的必修课,适合大二以上的学生。如果希望通过这门课提高科学计算与绘图能力,这门课是很有价值的。不过其他专业的学生需要审慎考虑,如同学所述,计算物理类课程可能会介绍更多内容而且难度更深。
Fortran和IDL的学习资源较少。同学们可以参考一些提供的在线资源和官方手册来辅助学习。这些资源在面对IDL特别有帮助,比如IDLCoyote.com和国内博客代码库等。
这门课主要教授用Fortran科学计算,以及用IDL数据分析(画图)
Fortran部分:前几章作业很少,基本是为了第十章的常用算法做铺垫,其中主要涉及了:数值积分,一元方程求根,RK4,偏微分方程数值格式。其中后三者考察的居多,建议写好通用性强的程序以便实验和考试时使用,偏微分方程数值格式要求看到求解格式的表达式能够转换为代码。并行运算那一章也比较重要,很有可能会让你写一个并行程序比较与串行执行效率差异。
这里附上我个人学习Fortran的一些网站:FORTRAN,Fortran资源。
IDL部分:相对来说比较简单,不要求用IDL做计算(因为很慢),只需要掌握如何画图就行了。我个人总结画图步骤就是这几点:1.读取数据,2.设置输出eps图像,3.设置色表,4.设置全局变量,5.画图,6.补充colorbar和图例等,7.关文件,结束。是一个非常套路的过程。
相对来说,IDL的网络学习资源较少,这里附上我个人学习IDL的一些网站:
http://www.idlcoyote.com/index.html,前IDL工程师的学习指南。
http://blog.sina.com.cn/s/articlelist_1984634525_11_1.html,国内一个博客,IDL代码库。
https://www.harrisgeospatial.com/docs/idl_programming.html,官方手册,直接搜索查代码含义。
https://malagis.com/search/IDL/,https://malagis.com/tag/IDL/,麻辣GIS网,分享GIS有关讯息的网站。
本学期三次实验和两次考试各占比50%,其实这个比例是同学和老师商量出来的,原定是三七开,老师还戏称商量的同学为“谈判专家”,总之在考察方式上面老师是有一定的灵活性的,同学们有什么要求和想法可以及时提出。平时有一些活动会有bonus,总评加1到5分的样子。(包括但不限于介绍其他语言,翻译并行程序手册等等)
但今年的优秀率只有20%左右,没有调分,卡绩也没有管。得知自己84的时候还是有一点难过,但是最后一次考试实在是挺崩的,而且这么一点小的差异平均来看影响也没那么大,每次被卡我都这样安慰自己(笑)。
如果有什么问题欢迎私信我,希望能够帮到你。:D
如其他同学所述,这门课主要讲述的是 Fortran 语言和 IDL 软件的使用,前者主要负责进行“科学计算”,后者主要用于读取数据&制图/视频等,考完试也来写一下自己的心得体会,希望能帮到有需要的同学。
课程内容-Fortran部分:
可以以分为几部分,结构化程序设计(基本语法、顺序、逻辑、循环结构)、程序数组化、模块化程序设计(函数与过程,模块的使用)以及解决实际问题(输入输出与文件,并行初步,求解问题时用到的一些方法——求方程的根、积分、极值、ODE-set【常用到Runge-Kutta 4】、PDE、插值),看老师的PPT即可,也可参考教材:彭国伦:《Fortran95程序设计》.中国电力出版社.
此处奉上我的 Fortran 复习笔记(字丑勿嫌弃):Fortran_Note.pdf
课程内容-IDL部分:
这部分主要就是读取数据与画图,课程主要分为 【起步(基本语法)】-【画图注意事项】-【读取数据方式】-【一些编程基础】,其中第一部分为基础,第二部分为重点,第三部分...就本课程而言会读取Fortran生成的无格式顺序存储的文件即可,第四部分...能看懂 pro 开头的过程(比如说老师和助教发的文件)其实也就可以了,这部分要求并不是很高(对比Fortran来说),实在不会的记得看Help手册(很有用!)。
此处奉上我的 IDL 复习笔记(字丑勿嫌弃):IDL_Note.pdf
课程安排与作业:
课程是理论和实践结合的,上课的进度基本上是4月中下旬 Fortran 就能讲完,然后三个星期左右 IDL 也就能讲完了的样子,上课会点一些同学回答问题(莫慌,问的问题不难,且老师还是很友善的,只是为了保证同学们不要走神而已)。
课程平时的作业也不多,一般是写一些以后可能用得上的Tool(如随机函数,正态分布函数等),以及课程上不时提到的一些问题(如调研如何利用语句生成文件夹、如何利用IDL制作.gif文件)。当Fortran讲得差不多的时候就开始安排上机实验,两次课为一次的上机实验,本学期一共3次上机,做了3个题目,是往年的一些考试题,有一些难度,比较考验Debug能力--但我认为这是科研工作上所必需的吧,起码对空物学生来说我觉得苏老师的题目难度适中,相关的要求也不高的。
课程考试:
学期初老师和同学们会商量考试形式,是笔试+机考,还是以机考作为考试成绩,以及机考的次数。本学期机考2次,都是开卷的,分别在6.16和6.20下午1:00-5:00考(日期&时间也是投票出来的,这一点非常好啊~可就是有点困了......),需要提交.f90(Fortran程序), .pro(IDL代码), .eps(IDL画的矢量图)以及 .pdf(报告)文件。
老师对考试的要求是:准确度>=速度>=美观度,但假如大家都没做好,快一点交卷会有点优势(有点吧,但也不是很多)。本学期两次考试情况是,第一次的题确实有难度(后来我才发现我错了一个很沙雕的错误,比如说1.0/(4.0*5.0)我漏了个括号...看来对着公式直接码会有很大风险出错啊),第二题是并行求方程,给定alpha求lambda和给定lambda求alpha并将其对比。我觉得两次考试,第一次考难度,第二次考速度,所以其实难题当前,慢一点做稳一点就行,简单的题当前,就快一点比较好。
以下是我个人的考试建议(也是自己的做法)是:考前把相关的接口/Readme file写好,放在一个文件夹里,考试的时候直接copy改一些量用了,报告的话我是用latex写的,考前把模版准备好,考试写完程序就可以直接编译了。报告里还要简单写一下自己对题目的理解、编程的思路和结果的合理性分析,也就几句话吧,考试的时候留几分钟比较好。
另外还有Fortran和IDL的编程模版——Fortran就是Module Global(变量)+Module Routine(函数&过程)+Program Main(主程序),IDL就是设置变量-读取文件-转载颜色-画图(包括设置系统变量,这部分就是Plot语句和Contour语句及相关的关键字参数要设置好,用到就直接Copy然后稍微改一下)-关闭文件,Windows里面可以用GSview(助教会发安装包)查看.eps文件,Mac系统里面直接点空格键预览即可(因为需要调整边框及比例等)。
关于课程给分:
本学期的给分是:平时分30,两次考试40+30,不会调分(--其实考试有点压力),平时的话还会有回答问题&小测试比较快交的同学可得1~2分的Bonus,演讲介绍其他语言的同学也有1~5分的Bonus。最后,老师给的优秀率和去年差不多(也是20%左右),但反过来我会想真的是老师的问题嘛?--我看也不全是,毕竟...其实同学们平时编程的机会&实践也不多的(据我观察),这时候啊就会觉得是“早进组早搬砖早享福”--毕竟老板可能会让你码一下代码搞点东西,不知不觉编程能力就上来了(个人感想)。
欢迎有兴趣的同学和我交流~~
2023春学生。2024春助教。
个人认为这是地空本科最有价值的选修课。
顺带一提:在一个全是自己同班同学的班上当助教真是一种奇特的体验~
事实上,这是我第三年踏进这个班级了。
大二上的时候提前选修了这门课,然而后面学的一团糟放弃选修跑路了。
但是对于空间物理的同学来说本质是一门必修课,不然学分修不够(按照我们这年仍然如此)。
于是去年正常选了这门课,然而后面由于身体原因学期中休学回家,再次没上完。
今年复学办完手续进来看到老师他的第一反应是:我认识你!
很夸张。
说回课程,由于我连续修读了三年该课程,对于从20年至22年的发展是有一个大概认知的。既然前面的同学对于这门课的内容说的已经比较明白,我就不多加赘述了,单纯讲讲三年来的变化。
20年的课程作业量非常低,且没有助教,不知道是因为线上授课的原因还是因为没有助教工作量太大,当时前半学期的作业老师没有要求学生提交,最后上机次数也不算多。授课顺序是先讲完fortran再讲idl。
21年课程有了两位助教,作业略有提升,但总的来说也是从fortran部分第十章开始才成规模地要求提交作业,上机报告要求也并不严格。进行了三次上机两次考试。授课顺序与20年一致。给分应该是平时分30第一次考试40第二次考试30来给。但是21年最后给分并不好,听我的同学说最后优秀率不到20。
22年课程同样是两位助教,不过今年作业量大幅提升了。从fortran第一部分就开始要求提交作业,对于上机报告的提交也更为严格了。总的来说,今年大约交了11次作业和5次上机报告,每次作业由2到4段fortran和idl程序组成。作业量相对于3学分的课时来说是很大的。但是由于同学的要求,今年只进行了一次考试,最后给分是按照平时作业(含五次上机)40、考勤10、期末考试上机50的比例来给。按照老师的说法,今年优秀率约30,75以上约60。同时,今年调整了课程的顺序,可能是因为隔壁薛老师的空间探测前半部分会涉及idl的内容,所以今年再讲完fortran数组部分后就先讲了idl部分,有意思的是薛老师也收到了学生反馈,今年将idl放到了学期末讲,有点双向奔赴的意思。
感觉作业量上升像是大势所趋一般,今年所有课都比去年作业多了不少。
idl部分其实有很多还不错的工具书,优于老师提供的help文档,但是却不太好找,希望老师明年能给同学提供一些参考,感觉会好很多。可惜的是,这些工具书我也是考试前一天才发现的。
本文采用fortran的注释方法23333
给八分吧。
!引言
这门课教的是fortran和idl
苏老师人非常年轻,也非常幽默2333333
但是考试经常考语文题(阅读理解
考试一不小心跪了一两次就会gg了2333
作业蛮多的,每周做的都挺痛苦,而且经常get不到助教的给分点Orz
!给分
给分不是特别好
班上70~人
只有一个4.3
两三个(三四个?)4.0
不过优秀率还是给满了,一大把3.7
所以只要认真学了,拿个3.7不是什么难事(我就是3.7)
!考试
考试是五次上机和一次笔试
考试是效率优先,就是谁先做出来谁分高……
所以随机性很大,哪天不小心脑抽筋了就玩脱了……
上机考试完全开卷,除了相互讨论干什么都行(包括上网查)(查到算我输——苏振鹏)(← ←我杜撰的)
平心而论考试不是很难,但是每次都很难get到苏老师的梗……所以经常要花很长时间理解……所以每次都很绝望……
于是我就跪了两次Orz
如果要拿4.0+的话考试最多只能跪一次……
emmmm
大家掂量一下吧2333
!关于选课
这是地空学院空间物理和大气物理专业大三下的专业课
建议大二选,因为这门课只需要用到计算方法和数理方程的一点点知识(不需要掌握,知道就好了)
就是runge-kutta算法和gamma函数什么的!其中计算方法比较重要
大二选说不定还可以考的好明年给同学做助教呢233
不建议大一选,因为计算方法和数理方程都没学
不过这学期有几个大一的dalao选了,而且拿了优秀,太强了……
!收获?
这门课收获不如想象中的大,不过还是不错的
掌握了一点点fortran和idl!并且让我忘了怎么写C了……
因为同时在上计算方法课,所以计算方法课的大作业也是用fortran写的,算是现学现用吧
!其他
平心而论考试不是很难,就是很难get到老师的点……
所以很气……
最后拿了3.7,也不算很差
就是有点不爽吧╮(╯▽╰)╭
首先给分就是按开学说好的比例,到时候会根据实际情况调整,总体来说也蛮正常的。
作业的话呈逐年减少的趋势,稳步趋向正常水平。
考核只考各种数值算法,上机考试是看谁做得快,就算做出来但是很慢的话分数也还是很低很低,所以介意这一点的慎选。
个人而言,收获还挺多的,首先掌握了一门很古老的编程语言,讲道理,现在基本没有课专门讲Fortran了,但很多时候你必须学,因为有很多很优秀的古董代码是用Fortran写的。画图的话,听说下个学期开始强制使用IDL。其实IDL跟MATLAB差不多吧,就这门课而言,问题不大,还能学会一门冷门的制图软件,毕竟IDL的学习资源是非常少的,有人指导还是很好的。还有会讲一点并行程序设计,这挺好的,之前我一点都不懂,学了之后感觉很有帮助。
总之,空间物理的最好选,其他专业的看需求吧,只是想学数值算法,像计算物理等等会介绍更多的东西,没必要选,这门课讲的东西仅仅是用Fortran实现《计算方法B》这门课的东西,比较浅,像经典的有限差分、有限元方法都没讲,想刷成绩的慎重考虑,考试基本不比正确率和代码的高明,主要看速度,不确定性挺大的。