MATLAB学习笔记(五)

来源:互联网 发布:oppo心理软件 编辑:程序博客网 时间:2024/06/16 00:16

MATLAB自定义函数

1.创建单输入/输出和多输入/输出自定义函数
2.在工具箱中保存或调用自定义函数
3.创建和使用匿名函数
4.创建和使用函数句柄
5.创建和使用子函数和嵌套函数

1.创建函数的M文件

1)创建自定义函数
如图所示,在新建选项中选择新建函数
这里写图片描述

输入以下脚本,保存为poly.m

function  output  = poly( x )%UNTITLED 此处显示有关此函数的摘要%   此处显示详细说明output = 3 * x .^ 3 + 5 * x ^ 2 - 2 * x + 1;end

注意:调用函数前,必须将函数的文件先保存到当前目录中,为了便于查找,文件名必须和函数名相同。函数的命名应该遵循前面介绍过的MATLAB的命名规则。

调用函数执行:

>> poly(4)ans =   265

2)注释
创建函数:

function output = tag( number )%这个函数是一个自定义函数%   我的自定义函数tagoutput = number * number + 2 * number * 4;end

使用help命令可以输出函数的注释内容

>> help tag 这个函数是一个自定义函数    我的自定义函数tag

3)多输入输出函数
定义函数motion.m

function [ dist,vel,accel ] = motion( t )% UNTITLED4 此处显示有关此函数的摘要% 此处显示详细说明accel = 0.5 .* t;vel = accel .* t;dist = vel .* t;end

执行:

>> [accel,vel,dist] = motion(10)accel =   500vel =    50dist =     5

若调用motion时没有指定全部三个输出变量,则只输出第一个变量

>> motion(10)ans =   500 

4)没有输入或输出变量的函数
大部分函数都至少有一个输入或输出变量,但有的函数没有输入或输出变量。
例如:MATLAB函数clock没有输入变量但有输出变量

>> A = clockA =   1.0e+03 *    2.0150    0.0050    0.0180    0.0100    0.0520    0.0310

5)确定输入/输出变量的数目
函数nargin可以确定输入变量的数目,函数nargout可以确定输出变量的个数。

>> nargin('sin')ans =     1>> nargin('rem')ans =     2 

有些函数的输入变量个数是不确定的,这时函数会输出负数

>> nargin('surf')ans =    -1 

6)局部变量
函数的M文件中的所有变量都称为局部变量。工作区与函数之间进行交互的唯一方式是利用输入变量和输出变量,在函数体中定义的所有变量仅允许函数自己使用。

7)全局变量
与局部变量不同,全局变量是整个程序的变量,但一般情况下不定义全局变量。在命令窗口或脚本M文件定义的变量都是全局变量,为了避免用户无意中使用全局变量,要求在函数中使用全局变量时必须进行特殊申明。
函数:

function output = tag( number )global Goutput = number * G;end

调用:

>> global G>> G = 9G =     9>> tag(4)ans =    36 

2.创建函数工具箱

调用MATLAB函数时,首先在当前路径中查找该函数,如果没有找到,则按照预先设定的搜索路径查找函数名。设置搜索路径的方法是在主菜单中点击File- Set path,或者输入命令pathtool
随着程序中函数数量的增加,通常会把相关文件存放在用户的个人工具箱中,并设置相应的搜索路径。录入把前面的函数保存在My_function目录中。
在对话框中单击ADD Folder来添加文件夹,即可将自己的目录添加进去。
MATLAB先在当前路径中查找函数,然后,再根据修改后的搜索路径查找。
除非设置成永久路径,否则修改的路径只能在当前对话中有效。
在路径设置工具中可以采用交互式的方法修改MATLAB的搜索路径,使用函数addpath可以添加新的搜索路径。使用函数help addpath可以查看addpath的使用方法。

3.匿名函数和函数句柄

匿名函数是一种简单的函数构造方法。用户可以直接在命令窗口或脚本M文件中定义和使用匿名函数,匿名函数看起来更像是一个变量,只要不清空工作区,匿名函数都是有效的

>> ln = @(x) log(x)ln =     @(x)log(x)>> ln(4)ans =    1.3863

匿名函数ln当做变量用以下语句保存和使用:

>> save ln_function ln>> load ln_function

4.复合函数

绘图函数fplot就是MATLAB中的内置复合函数,它要求有两个输入参数:一个输入参数是函数或函数句柄,另外一个输入参数是函数的取值范围。

>> lnln =     @(x)log(x)>> fplot(ln,[0.1,10])

这里写图片描述

如果不使用函数句柄,则可以直接使用字符串表示函数名:

>> fplot('log(x)',[0.1,10]) 

运行效果如上图。

【example】
在上面的例子中,使用函数句柄的优越性并没有体现出来。但是,如果匿名函数是计算五阶多项式的值:

>> poly5 = @(x) -5*x .^ 5 + 400 * x .^ 4 + 3 * x .^ 3 + 20 * x .^ 2 - x * 5 poly5 =     @(x)-5*x.^5+400*x.^4+3*x.^3+20*x.^2-x*5>> fplot(poly5,[-30,90])

这里写图片描述

5.子函数

在同一个文件中,除了主函数外还可以创建多个子函数。子函数智能被主函数调用,因此子函数的使用时受限制的。使用子函数有利于程序的模块化,能够使程序的可读性增强。
每一个MATLAB的M文件只能有一个子函数,并且M文件名必须和主函数名相同。因此存储在M文件my_function.m中的主函数名必须是my_function。主函数之后可以定义任何合法的子函数,子函数的命名规则与变量的命名规则相同。

function [add_result,sub_result] = myfunction(x,y)add_result = add(x,y);sub_result = sub(x,y);endfunction result = add(x,y)result = x + y;endfunction result = sub(x,y)result = x - y;end
>> [addres,subres] = myfunction(10,3)addres =    13subres =     7
0 0