MATLAB中文论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 7613|回复: 104|关注: 0

[我分享] 【参与有奖】讨论:你更习惯用MATLAB脚本还是MATLAB函数?

  [复制链接]

MATLAB 基础讨论
板块优秀回答者

173

主题

928

帖子

32

最佳答案
  • 关注者: 342
发表于 2016-11-3 17:18:48 | 显示全部楼层 |阅读模式
MATLAB将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言的编辑模式,代表了当今国际科学计算软件的先进水平。与其他计算机语言相比,MATLAB更加接近人们书写计算公式的思维方式,其程序编写就像是在演算纸上列出公式进行求解的过程,这使人们摆脱了许多重复、复杂的机械性的编程细节,把注意力集中在创造性问题上,用尽可能短的时间得到有价值的结果。MATLAB还具有编程简单,节省时间,提高效率,易学易懂,功能强大,适用范围广,移植性和开放性强等特点,是在校大学生继续进行科学研究必须掌握的基本技能。

本次话题:
  • 你更习惯用MATLAB脚本还是MATLAB函数?
  • 该满足那些要求呢?哪些是你关注的重点呢?
  • 你觉得MATLAB基础知识应该分为几部分,那一部分是最重要的?

清华大学出版社近期出版了《MATLAB程序设计基础与应用》一书,是一本很实用的图书,本次活动便是以此为契机,和各位MATLAB算法爱好者就相关话题展开讨论,欢迎大家踊跃发言。

活动时间:
2016年11月1日 - 2016年11月30日

活动奖品:

                               
登录/注册后可看大图

《MATLAB程序设计基础与应用》刘帅奇  李会雅  赵杰  编著
书号:978-7-302-44918-8
定价:49.80元

图书试读:
《MATLAB程序设计基础与应用》前言
《MATLAB程序设计基础与应用》目录
《MATLAB程序设计基础与应用》第一章
《MATLAB程序设计基础与应用》第二章


更多书籍信息,请至《MATLAB程序设计基础与应用》版块查看。

获奖用户

3楼  wuyou136
13楼  qibbxxt
21楼  -_簡單de倖鍢
27楼  kastin
29楼  钻天鹞子
49楼  王成墨
77楼  function
75楼  绝尘敬尘
96楼   tim1893
102楼  zhoucoolqi


因为参与用户超级积极,5个名额实在很难挑选~
出版社决定追加5本奖品书籍,所以一共有10位获奖的小伙伴!
~撒花祝贺~

请获奖的各位MATLABer在两周内联系 —> 清华大学出版社,告知邮寄地址,新鲜出炉的书就会直接寄到你家~


图书购买链接:
京东
当当
亚马逊
天猫

(已经购买此书的会员请点击论坛上方【书码验证】进行验证,验证之后享受作者有问必答服务;在验证过程中遇到问题,请联系管理员)



论坛优秀回答者

8

主题

773

帖子

134

最佳答案
  • 关注者: 19
发表于 2016-11-3 18:21:47 | 显示全部楼层
本帖最后由 matlabzhanghu 于 2016-11-3 18:29 编辑

我更习惯用MATLAB脚本,MATLAB函数一般都是带输入需返回参数时才会用,我也看到不少是直接不带参数的函数,还没研究过。听说同样的程序,函数比脚本快些,具体原因也各有各的猜测。
我现在对matlab底层的实现比较感兴趣,比如内置函数的实现,编译过程。因为最近在做界面的过程发现,同样的代码在不同版本上不一定能顺利运行。想找出具体原因。
既然是基础知识那就应该包含一些基本的对matlab的使用及基本的运算和程序举例,还有一些简单的绘图介绍,我觉得基础知识还应该包含对matlab内部机理的介绍,几乎没有这样的书籍,导致基础不扎实,到程序规模稍大时容易出现意想不到的问题。还可以介绍一些编程经验,比如良好的编程风格和编程技巧,让新学matlab的同学少走弯路。

论坛优秀回答者

权威

3145 麦片

财富积分



16

主题

3367

帖子

684

最佳答案
  • 关注者: 247
发表于 2016-11-3 18:27:18 | 显示全部楼层
关于脚本文件和函数文件,我现在已经完全放弃脚本文件的使用,所有程序都是在函数文件里面完成。使用函数文件有两个好处:
第一是编程效率的提高:
MATLAB 里面比较麻烦的一点就是,如果采用脚本函数编程,每次要使用一个函数,都需要新建一个 m 文件放在搜索路径,而不能像 C++ 一样,直接在一个文件里面完成。如果使用函数文件,就能够采用嵌套函数的形式,直接在同一文件写子函数:
  1. function main
  2. ...

  3. function mainFcn
  4. ...
复制代码
第二是运行效率的提高:
http://www.ilovematlab.cn/forum.php?mod=viewthread&tid=483013
比如说这个帖子的例子,在循环中申明匿名函数,使用函数文件的运行效率明显远高于脚本文件。



当然,使用函数文件最大的问题就是它会单独开辟一块工作空间,在程序运行完毕之后,workspace 当中不会保存任何变量,这可以通过以下方法解决。新建一个脚本文件,fcnEnd:
  1. %% 将所有函数工作区间变量添加到 base 区间
  2. fcnVal = who;
  3. for ii = 1:numel(fcnVal)
  4.     varLoop = fcnVal{ii};
  5.     assignin('base',varLoop,eval(varLoop));
  6. end
复制代码
这样,我们只需要在函数文件的末尾添加一句 fcnEnd 就能将变量添加到工作空间:
  1. function main
  2. ...
  3. fcnEnd
复制代码
另外,对于脚本文件习惯在开头用 clear 清除变量,在函数文件里面也可以实现同样的操作。同 fcnEnd 一样,只需要建立一个 fcnBegin 脚本放在函数开头:
  1. evalin('base','clear');
  2. close all;
复制代码
这样,我们使用函数文件时,采用以下形式,就能做到和脚本文件完全一致的功能:
  1. function main
  2. fcnBegin
  3. %%
  4. % 代码填写在此处
  5. %%
  6. fcnEnd
复制代码


最后再说一个小技巧,我们可以在输入法的个性词库当中,将:
  1. function main
  2. fcnBegin
  3. %%

  4. %%
  5. fcnEnd
复制代码
这一整段代码添加至词库,就可以通过拼写轻松输出这5行代码,使用起来相当方便。

fcnBegin.m

36 Bytes, 下载次数: 36

fcnEnd.m

159 Bytes, 下载次数: 30

论坛优秀回答者

中级

613 麦片

财富积分


5001500


6

主题

3150

帖子

135

最佳答案
  • 关注者: 51
发表于 2016-11-3 18:29:27 来自手机 | 显示全部楼层
我基本上先写脚本 之后调试好程序之后,将功能模块打包为函数,提供调用接口 主程序来调用,可以两层的函数关系甚至是多层,最终以最少代码,最合理的逻辑作为整个程序的设计出发点…仅仅是脚本的话,比较大的项目,逻辑组织很难,仅仅是函数的话,也得有外部调用才可以…单独一方面的偏向都是不合理的…
来自: 微社区

新手

10 麦片

财富积分


050


0

主题

11

帖子

0

最佳答案
发表于 2016-11-3 18:44:53 | 显示全部楼层
由于对matlab函数不是很熟悉,更喜欢用脚本,最近在学习使用函数提高运行效率.

入门

67 麦片

财富积分


50500


117

主题

216

帖子

0

最佳答案
  • 关注者: 191
发表于 2016-11-3 19:33:57 | 显示全部楼层
matlabzhanghu 发表于 2016-11-3 18:21
我更习惯用MATLAB脚本,MATLAB函数一般都是带输入需返回参数时才会用,我也看到不少是直接不带参数的函数, ...

很好的建议,我们会在后续出版物中采纳。

入门

67 麦片

财富积分


50500


117

主题

216

帖子

0

最佳答案
  • 关注者: 191
发表于 2016-11-3 19:35:59 | 显示全部楼层
wuyou136 发表于 2016-11-3 18:27
关于脚本文件和函数文件,我现在已经完全放弃脚本文件的使用,所有程序都是在函数文件里面完成。使用函数文 ...

例子很好额,欢迎多多发表见解。

新手

10 麦片

财富积分


050


0

主题

2

帖子

0

最佳答案
发表于 2016-11-4 10:19:29 | 显示全部楼层
毕业了就没有来过论坛了,微博居然给推荐了,才发现老账号都给清空了(可惜),个人的话还是喜欢脚本,毕竟大多数时候只是为了解决当前的问题,并不需要保留输入输出参数的函数,自然,MATLAB自带的函数有很多可用的,很给力

MATLAB 基础讨论
板块优秀回答者

4

主题

263

帖子

45

最佳答案
  • 关注者: 6
发表于 2016-11-4 11:25:28 | 显示全部楼层
现在脚本文件和.mlx文件都可以附带函数了,很方便,所以现在实现简单的功能肯定是在脚本文件中编写,附属功能用脚本内函数实现。
单纯使用函数文件,文件太多,好乱。

新手

14 麦片

财富积分


050


2

主题

15

帖子

2

最佳答案
发表于 2016-11-4 11:26:07 | 显示全部楼层
按需要来。
如果需要检查各个变量的信息,就会选择脚本文件,这样方便查错,函数报错再检查只有输入和输出不会出现中间变量。运行脚本文件检查方便,可以根据中间步骤产生的变量知道具体是哪一步出的问题。
函数的话主要在程序已经没有太大的问题,只有固定的输入需要变化,这个时候就会选择函数,这个时候函数的好处就是直接代用函数就可以了,而脚本文件还需要对脚本进行修改。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系我们|版权保护|小黑屋|Archiver|手机版|MATLAB中文论坛 ( 苏ICP备08100737号

GMT+8, 2017-1-24 21:08 , Processed in 0.267488 second(s), 89 queries , Xcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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