Maltab中有关的函数知识,你都知道吗?

Maltab中有关的函数知识,你都知道吗?


本博客会讨论:如何定义函数;如何将数据传递到函数;如何返回数据,包括多个结果;如何在函数中加入仅能用作帮助的其他函数;

Maltab中函数的通用模板

通用模板

function <return info> <founction name> (<paramters>)
<doucumentation>
<code body>

对于大部分函数来说,<return info>中是返回结果的名称,后面紧跟一个等号(=),如果返回结果的数量大于1,这些结果被放在一个向量的中,类似[outputArg1,outputArg2,...]。如果函数没有返回结果,可以省略列表和等号。<function name>是函数名,但需注意命名规则。<parameters>是传递到函数的数据名称的列表,各种数据名称之间用逗号隔开,例如:(inputArg1,inputArg2) ;<documentation>是一行或多行注释,描述了函数的功能和调用方法。

定义函数

在matlab语言中,函数必须保存为一个单独的文件,该文件保存在任何脚本或函数都可以调用的目录中。如果函数名称为function_name,那么包含该函数的文件名必须是<function_name>.m.

例如:
这里定义了,一个名为get_cylinder的函数,用于计算圆柱的体积

function volume = get_cylinder(height,radius)
% 计算圆柱体积的函数
base = pi* radius^2;
volume = base*height;
end

实现:
在这里插入图片描述
使用help get_cylinder直接可以显示函数的帮助文档,就是你定义函数是写的注释内容。

函数的保存和使用

创建自定义Matlab函数和创建.m文件中的脚本是一样的。创建的文件被保存为一个M文件,M文件的名称必须与函数的名称相同。
例如,我刚刚创建了一个名为get_cylinder的函数,函数就必须保存在一个名称为get_cylinder.m的文件文件一但保存,用户就可以可以调用了。

调用的方式是:在命令行窗口,脚本或其他函数中输入函数的名称和形式、数量准确的参数就可以了,如果没有将函数的调用结果复制给其他变量,它将被赋值给变量ans.

可变数量的参数

虽然参数个数通常时固定的,但是大部分编程语言(包括Matlab)都能够处理可变数量的参数,无论是输入常数还是返回常数。内置函数nargin可以计算用户调用函数时实际提供的参数个数。

例如:
前面那个例子中,可以使用nargin查看函数所需提供参数的个数
在这里插入图片描述
如果函数中含有nargin,用户调用该函数时,只要提供一些他认为重要的值,而那些不重要的值则会使用函数的默认值。

function c = addme(a,b)
    switch nargin
        case 2
            c = a + b;
        case 1
            c = a + a;
        otherwise
            c = 0;
    end
end

演示:
在这里插入图片描述
使用nargout函数,可以计算用户实际提供的存储变量的个数。
例如:
在这里插入图片描述
使用varargin的函数输入:确定使用 varargin 的函数可接受多少个输入。

例如:

function num = sum1(a,b,varargin)
num = a+b+varargin{:};
end

我们再调用函数nargin看看,负号表示第三个输入是 varargin。
在这里插入图片描述
再调用一下sum1的函数,发现varargin确实可以支持多参数输入
在这里插入图片描述

###返回多个结果
很多语言都能通过参数名称来返回函数的多个结果,但Maltab是其中比较特别的。matlab的多个结果用变量名的 “向量” 来表示
例如:

function [area,volume] = cylinder5_2(height,radius)
%计算圆柱体体积的函数
%usage:[area,volume] = cylinder(height,radius)
base = pi .* radius.^2;
volume = base .* height;
area = 2 * pi * radius .* height + 2* base;
end

这里显示了一个能调用返回多个结果的函数。
常规方法是使用变量的名称来获取向量中的结果。该名称可以为任何有效的变量名,而值是按照定义的结果顺序来返回的。如果返回的结果数少于全部结果(或根本没有),则按照从左到右的顺序返回所有结果中的前几个。
例如:
在这里插入图片描述
这里如果只想要第二个结果值,必须在第一个位置放一个‘~’标记。

辅助函数

因为Maltab 语言使用文件名来识别函数,所有,正常情况下,每个函数都应该保存为一个单独的M文件。可是,有时候,执行M文件的主函数中包括的算法时,需要使用到辅助函数(有时候可称为“帮助函数”)。如果某个辅助函数只应用于主函数或其帮助函数可以将该辅助函数与其调用函数写在同一个文件,辅助函数写在主函数的后面。

function result = volume(radius,height)
result = get_are(radius)*height;
end
function ares = get_are(radius)
ares = radius^2*pi;
end

全局变量

由于matlab总是将输入数据复制到函数的工作空间中,所有有时会非常低效地将大数据集输入和输出函数。为了避免传递大量数据,我们可以使用全局变量。全局变量必须同时再调用脚本和使用关键词global的函数中定义。
例如:

function change_num(num)
global number
number = num + 4;
end

结果:

但是,必须谨慎使用全局变量,因为任何具有全局访问权限的函数都有权更改该数据。

小结

  1. 函数必须在同名文件中定义,关键词function可以将其区别于脚本。
  2. 参数被依次复制到函数中,并赋值给相应的形参。
  3. 通过将结果赋值给返回变量,结果被返回给调用方
  4. 除非被声明为全局变量,否则函数内的变量只能再函数的代码块中访问
  5. 辅助函数只能被同一个文件中的函数(可以添加到主函数的下面)访问,否则需遵守与主函数相同的规则。

特殊字符、保留字和函数

特殊字符、保留字和函数 含义
help 调用函数
function 将M文件标识为函数
nargin 确定函数调用者提供的输入参数的数量
natgout 确定函数调用者请求的输出参数的数量
global <var> 定义变量<var>为全局变量
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章