M函数文件

还记得前面榨汁机的例子吧, 那个不是特别切合的比喻至少告诉我们函数的几个基本要素:

输入变量---用于给函数处理提供材料;

函数语句---函数处理的机制, 就像榨汁机的内部工作部分;

输出变量---函数的作用就是完成特定的工作, 给我们提供结果.


值得一提的是, 这个世界啊, 千奇百怪, Matlab中也有些特殊的函数不不完全具备以上三个要素, 甚至还有函数既没有输入变量, 又没有输出变量, 但是它就长着函数的样子, 只能划入'广义的函数'了. 就像那鸵鸟, 太胖, 飞不起来了, 可就是没办法啊, 它也是'广义的鸟'啊.


函数的特点不仅在于它的外表, 它一个非常重要的实质在于函数有自己独立的workspace, 和matlab 系统的workspace互不干扰. 也就是说, 当函数运行, 除非在函数中执行了keyboard命令, 从外部无法窥视函数运行过程中workspace的情况, 比较安全, 呵呵.(别说不记得workspace是个啥了, 通俗讲它就是用来装各个变量的仓库, 变量又像容器, 里面装数据)

m 函数基本结构

形式主义害死人, 不过对于电脑这种笨笨的机器来说, 形式往往助于它理解. script和function文件的扩展名都是m, 要让matlab明白当前这个m文件是script还是function, 就要遵循Matlab内部规定的函数文件的结构. 一个函数文件大概是这样的.

    function[输出变量列表]=函数名(输入变量列表)
    %传说中的H1 line, 填写关于本函数的最重要的注释, 差点忘了, Matlab中注释语句以%开始, 一直到该行结尾.
    %之后可以跟很多行的详细注释说明, 所有注释结束后留一个空行(建议而已, 非必须)

    语句块, 中间若遇上 return, 则函数执行完毕, 返回输出变量数值
    end

变量列表都要使用逗号隔开变量; 当然, 如果只有一个输出变量, 方括号是不需要了; 如果根本没有输出变量, 包括等号在内的都不需要了; 如果没有输入变量, 函数名后面的括号可有可无; 另外一个比较BT的问题, 函数名一般和文件名相同, Matlab调用本函数文件时, 是以文件名为准的, 所以这种情况下, m文件中的函数名无论变成什么都没有影响. (但是如果要作嵌套函数就要小心了)

一个例子

函数中的语句块都是由基本表达式以及之前讲过的控制语句组成, 当然语句多了, 函数会很复杂. 这里举个非常简单的例子, 编写一个函数, 用于计算变量的平方.将下面的Matlab源代码保存在一个叫做'mysqr.m'的文件中

    function xSquare=mysqr(x)
    %第一行说明语句, 执行lookfor命令时会搜索这句话
    %未空行的说明语句, 执行'help mysqr'时可以显示到这些注释内容

    %已经空行过的注释, help命令不会显示

    xSquare=x.*x;
    end

保存完毕后, 只要Matlab的当前目录下有mysqr.m这个文件, 我们可以通过调用: mysqr(变量名), 来计算变量的平方值, 如果你希望无论Matlab当前路径如何改变都可以调用到mysqr.m这个文件, 那么就将这个文件所在的目录假如Matlab的搜索路径中吧. (第一部分有讲怎么添加)

查看Matlab内部函数

Matlab里很多函数都是m文件的形式, 我们可以用这个语句: edit(which('想查看的函数名称')) (或者直接用,edit ...想查看的函数名称)来查看相应的函数. 例如: edit(which('fsolve'))(或者 edit fsolve)
当然, 里面很多m函数比较复杂, 不过, 看看可以获得一点感性认识.性认识.

你可能感兴趣的:(文件)