还记得前面榨汁机的例子吧, 那个不是特别切合的比喻至少告诉我们函数的几个基本要素:
输入变量---用于给函数处理提供材料;
函数语句---函数处理的机制, 就像榨汁机的内部工作部分;
输出变量---函数的作用就是完成特定的工作, 给我们提供结果.
值得一提的是, 这个世界啊, 千奇百怪, Matlab中也有些特殊的函数不不完全具备以上三个要素, 甚至还有函数既没有输入变量, 又没有输出变量, 但是它就长着函数的样子, 只能划入'广义的函数'了. 就像那鸵鸟, 太胖, 飞不起来了, 可就是没办法啊, 它也是'广义的鸟'啊.
函数的特点不仅在于它的外表, 它一个非常重要的实质在于函数有自己独立的workspace, 和matlab 系统的workspace互不干扰. 也就是说, 当函数运行, 除非在函数中执行了keyboard命令, 从外部无法窥视函数运行过程中workspace的情况, 比较安全, 呵呵.(别说不记得workspace是个啥了, 通俗讲它就是用来装各个变量的仓库, 变量又像容器, 里面装数据)
形式主义害死人, 不过对于电脑这种笨笨的机器来说, 形式往往助于它理解. script和function文件的扩展名都是m, 要让matlab明白当前这个m文件是script还是function, 就要遵循Matlab内部规定的函数文件的结构. 一个函数文件大概是这样的.
变量列表都要使用逗号隔开变量; 当然, 如果只有一个输出变量, 方括号是不需要了; 如果根本没有输出变量, 包括等号在内的都不需要了; 如果没有输入变量, 函数名后面的括号可有可无; 另外一个比较BT的问题, 函数名一般和文件名相同, Matlab调用本函数文件时, 是以文件名为准的, 所以这种情况下, m文件中的函数名无论变成什么都没有影响. (但是如果要作嵌套函数就要小心了)
函数中的语句块都是由基本表达式以及之前讲过的控制语句组成, 当然语句多了, 函数会很复杂. 这里举个非常简单的例子, 编写一个函数, 用于计算变量的平方.将下面的Matlab源代码保存在一个叫做'mysqr.m'的文件中
保存完毕后, 只要Matlab的当前目录下有mysqr.m这个文件, 我们可以通过调用: mysqr(变量名), 来计算变量的平方值, 如果你希望无论Matlab当前路径如何改变都可以调用到mysqr.m这个文件, 那么就将这个文件所在的目录假如Matlab的搜索路径中吧. (第一部分有讲怎么添加)
Matlab里很多函数都是m文件的形式, 我们可以用这个语句: edit(which('想查看的函数名称')) (或者直接用,edit ...想查看的函数名称)来查看相应的函数. 例如: edit(which('fsolve'))(或者 edit fsolve)
当然, 里面很多m函数比较复杂, 不过, 看看可以获得一点感性认识.性认识.