前言
今年9月份要搞数学建模国赛了,我们学校也组织了同学参加,在这之前,学校也组织了一次校级赛。因为学校水平的原因,题目也不算难,各位大佬如果有好的建议,欢迎指出,小弟不胜感激。
这个比赛一共有ABC三道题
开始
题目中已知,我们需要在中国海事服务网中去查询潮汐数据,由于题目所需的数据量较大(40天)手动查询不现实,于是我采用PHP爬虫的方式,请求json数据。采用三层for循环,拿到数据,进行数据清洗以后,存入数据库,再从数据库导出(比较懒,没有用PHPExcel)
代码如下
这些就是为了判断月份和天数
前期分析,这个网站通过请求一个对应日期的json文件来获取数据,那我就请求这个json文件。因为还不会什么高阶用法,这里全部都是面向过程的语法,因为也只需要爬一次嘛,也不会重复利用。
数据抓下来之后,处理,格式化就是这个样子了。
数据分析
抓到数据之后,就可以完成第一个问了,之后呢就是分析数据,去拟合函数。这里我选择的是matlab,之前并没有接触过matlab,但我想,都是处理数据的编程语言,肯定有共同性,变量声明,语法,函数这些都大差不差,简单学习之后,便投入实战
首先,肯定是要将excel里的数据导入matlab中,然后使用matlab自带的非线性拟合工具cftool进行拟合,这里有一个坑,cftool不能识别cell类型的数据而我当时导入的日期是cell数组,自然不能作为自变量,需要去进行数据类型转换
这里我采取的是for循环,将cell数组转换成string类型,再将string类型转换成数值时间戳。导入cftool中进行函数拟合。
将cftool拟合出的函数保存到工作空间,输入2019-12-11~2019-12-14日的时间戳得出结果
可以看出还是有不小的误差,但是时间基本具有可用性,由此,第二问完成。
第三问
根据之前分析的数据,发现潮汐是个周期函数,而给出旅游建议这种题,更多的的就是潮汐的大小,潮汐的时间,高潮每十天左右,到达最高,低潮每40天左右达到最高,那么就在最高潮和最低潮之间,风平浪静,平稳,旅游是最好的。
总结
作为自己的数学建模初体验,发现很多还是需要数学的基础,线性代数,这些,函数拟合也需要数学,以后会更加关注这些。加油。!如果有更好的建议,欢迎各位大佬来评论哦,谢谢大家