matlab未定义函数或变量_2020五一建模 经验总结(四)Matlab编程实现

44d85bccee6ca1d70c7d617fcf7c7001.png

我们终于进入到了最关键的环节,也是建模竞赛必不可少的环节——编程实现。

如果最后编程实现不了,哪怕之前的选题选的再合适,读题读的再仔细,建模建的再精细都没有用,难以获得好的奖项。

为什么是获得不了好的奖项呢,难道可以获奖么?是的,也是能够获奖的。如果真的没有能力实现模型,但是论文将建模思想阐述的很清晰,最后罗列上一个人工判断的结果,也是可以获得一定奖项的。这样的论文如果是国赛,可以拿省二,个别可以到省一,如果是美赛,可以拿S奖,个别能到H和M奖。

如果大家想要的不止于此,那么模型的编程实现就十分必要。而在数学建模竞赛中,最常用的编程软件非Matlab莫属,Matlab的适用范围也十分广阔,夸张一点地说,没有哪一个建模问题是用Matlab解决不了的。所以我们今天就以C题的部分程序为例和大家分享一下使用Matlab进行编程实现的经验和技巧。

今日共分享以下三点:

变量名和函数名的确定

程序编写的顺序

Matlab函数的编写

一、变量名和函数名的确定

在模型建立时,最好根据变量的真实含义,选取合适的变量名,如下图的符号说明所示,每一个变量都是使用相关英文单词的首字母作为变量名。

fa75e63bd56c73a9df0f6ed979b7b27f.png

这样做的好处就是在编程时的变量名可以直接参照符号说明中的变量名,而且容易记忆。

对于函数名而言,要达到自己一看到函数名就能知道函数功能的程度。例如下面是C题所有Matlab代码的目录,我一眼可以看出quesX.m一定是各个问题的主函数,calkinship.m一定是计算亲缘度的函数,spend.m一定是计算加工费用的函数。

14c10470948d9199a4fdfc0099364e5a.png

如果是学计算机专业的同学就更能明白这一点——函数名和变量名要有意义。

二、程序编写的顺序

程序根据与解决问题关系的远近可以分为各问题的主函数与辅助函数。

我们编写程序时要培养自顶向下的编程思想,重视程序的重用性、灵活性和扩展性。

所谓自顶向下编程,可以类比于分治算法的思想,就是将一个大的问题分解成很多小的、容易理解的子问题。

第一步,把要解决的问题划分成子问题。

第二步,将子问题继续分解,直至细小到我们能够轻松解决。

第三步,编写主问题的代码,将所有子问题作为子函数,逐层进行实现。此时我们需要定义好每个子函数的输入变量和输出变量,完成每个子函数中解决问题的算法。

以上三步做完之后,问题基本就解决了。至于程序的可靠性完全可以通过对每个子函数进行测试来保证。

下面我通过运用自顶向下的思想做一个水果奶油蛋糕,让大家对这个思想有个更清晰的认识。

问题:做一个水果奶油蛋糕分解问题:水果准备、奶油调制、蛋糕准备水果准备可分解为:
①买水果;
②洗水果;
③切水果。奶油调制可分解为:
①买鸡蛋;
②买牛奶;
③买糖;
④将鸡蛋蛋清蛋黄分离,取鸡蛋清放入碗中;
⑤向蛋清中加入牛奶,糖后用筷子搅拌,直至蛋清用筷子能挑起。蛋糕胚准备又可分解为:(蛋糕胚自己烤太复杂了,容我买一个)(๑> <๑)
①买蛋糕胚编程实现:只需编写买东西的函数,洗东西的函数,切东西的函数,搅拌的函数。
最后在做蛋糕的主函数中调用这些子函数就可以了。

与之相反的还有自底向上的编程思想。先解决小问题,然后利用小问题编写的函数解决最终问题。

我推荐大家使用自顶向下编程的方式,可以使自己的程序更加简洁明了,逻辑更顺畅,而且能很方便地修改和替换解决子问题的函数,利于模型的优化。

三、Matlab函数的编写

Matlab中的每个函数最好都包含注释、函数头、输入参数、返回值、函数主体这几部分。

ad1e650977d4f908806949123bb4613f.png

注释包括功能简介、参数、返回值、主要思路、其它备注等。注释是越清楚越好的,良好的注释可以帮助你快速回忆起函数内容,学会如何使用。

函数头需要确定有几个输入参数、几个返回值以及函数名,函数名可以使用除第一个单词首字母小写外其他单词首字母大写的驼峰式写法,如“keyVariables”。

输入参数只使用实现函数功能最必要的变量,如果输入参数数量较多,可以采用“结构”这种数据类型。输入参数是可以省略的,如rand函数。

返回值需要根据函数的功能进行选择,不要返回无用的数据。

函数主体就是实现函数功能的程序语句。

通过今天的分享,希望大家能领会自顶向下编程思想的精髓,熟知matlab函数包含的主要部分,能规范地对函数和变量进行命名。这样就能迅速地编码出可读性高且十分可靠的matlab程序了。

最后,编程能力的提升是没有止境的,我们现在做数学建模编写的程序比之一个完整的商业程序还有很大的差距。不过我们可以通过持续不断的学习,逐渐积累相关知识,提升编程的能力,直到你可以用计算机的语言指挥计算机帮你干活。这将是后互联网时代的最强竞争力。

五一建模的经验总结就到这里,之后将与大家一起学习一下数学建模的常用算法及其编程实现。


建模相关文章:

KeepLearn:【数学建模】美赛O奖得主的自述——建模给了我力量​zhuanlan.zhihu.com
af17afdc47ab6f09ea5ba12155aefa38.png
KeepLearn:史上最棒的数学建模模版(让小白也能写论文的模版)​zhuanlan.zhihu.com
cef6f0f62a7f07e30a76084ceb40c39f.png

五一建模相关文章:

KeepLearn:2020五一建模:A题 煤炭价格预测问题​zhuanlan.zhihu.com
c8691ce9fcaa94878f8b90d377aa29b9.png
KeepLearn:2020五一建模:B题 基于系统性风险角度的基金资产配置策略分析​zhuanlan.zhihu.com
6c2436681b500bce0754e18b63bbcd70.png
KeepLearn:2020五一建模:C题 饲料混合加工问题​zhuanlan.zhihu.com
d11e468726fc400620bb81f5b76dae4a.png
KeepLearn:2020五一建模:C题 饲料混合加工编程实现​zhuanlan.zhihu.com
d11e468726fc400620bb81f5b76dae4a.png

经验总结系列文章:

KeepLearn:2020五一建模 经验总结(一)选题​zhuanlan.zhihu.com
57d0b0920fafb284cf792120b2a96fa2.png
KeepLearn:2020五一建模 经验总结(二)读题​zhuanlan.zhihu.com
57d0b0920fafb284cf792120b2a96fa2.png
KeepLearn:2020五一建模 经验总结(三)模型的选择与建立​zhuanlan.zhihu.com
57d0b0920fafb284cf792120b2a96fa2.png
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值