函数——是编程的核心概念之一,是能够完成相对独立功能的代码封装成的模块。

在主程序中通过函数名和实参调用它,通过接口(即函数的输入、输出参数)来实现“通讯”。所以在调用函数时,你只要知道“被调用的函数是用来做什么的”,以及“如何对应它的输入、输出参数”就行了。

关于形参(形式参数)和实参(实际参数):函数定义中的参数就是形参,只是用来限定函数所接收的数据类型的,“泛指该数据类型下任一元素”;函数调用中的参数就是实参,是“特指的具体数值”来代入函数体执行代码。例如(C语言):

其中,x,y是形参,2, 3,a, b是实参。

使用函数的好处:增加程序的可读性(函数可独立放在主程序之外)和重用性(一个函数可以多次被调用)。

Matlab的自定义函数,常用的有:m文件定义函数、inline(内联)函数、匿名函数。

1. Matlab函数的基本结构

说明:function:表示编写的是一个函数;

输出形参表,即函数的返回值,各返回值间用逗号隔开;(不需要像C语言那样,通过return到返回值来赋值,outp_args相应的参数可以直接使用)

函数名:需要和m文件名保持一致

输入形参列表:即函数的各输入参数,用逗号隔开;

函数体:完成函数的具体功能,是根据具体需要编写的;通过使用“函数的输入参数”、“自定义变量”、“流程控制结构”来实现;

end:表示此函数结束,也可省略。

2. 函数调用

定义完的函数保存为同函数名的m文件,放置在Matlab的当前路径之下(或修改当前路径为m-函数文件所在路径),然后就和使用Matlab自带的函数一样,直接在命令窗口或程序代码中使用该函数就是调用它了。调用函数时,只需要知道函数是完成什么功能的,以及它的输入参数、输出参数。

函数调用的一般格式为:

[输出实参表]=函数名(输入实参表)

注1:函数中遇return语句时,将退出函数体,此函数调用结束;

注2:函数体里面也可以定义一个或几个函数,称为子函数;注意:子函数只能存在于主函数体内,不独立存在;子函数在主函数体内的位置可以任意,不影响使用;子函数只能被主函数以及其他位于同一主函数体下的子函数调用,但子函数“句柄”例外;

注3:在调用函数时,Matlab用两个永久变量nargin和nargout分别记录调用该函数时的输入实参和输出实参的个数。只要在函数文件中包含这两个变量,就可以准确地知道该函数文件被调用时的输入输出参数个数,从而决定函数如何进行处理。

例1 函数(子函数)定义与调用示例,求向量的最大、最小值。

编写m-函数文件:max_min_values.m

运行结果: m = 56

可以让用户编写简单的函数而不需要创建M文件。语法格式:

f=inline('函数表达式', '变量1', '变量2', ……)

调用方式:y=f(实参列表)

注意:实参列表顺序应与inline()定义中形参列表的顺序一致。

这种函数定义方式是将它作为一个内部函数调用。好处是,它是基于Matlab的数值运算内核的,所以它的运算速度较快,程序效率更高。缺点是,该方法只能对数值进行代入,不支持符号代入,且对定义后的函数不能进行求导等符号运算。

内联函数示例:

运行结果: f = Inline function: f(x,y) = x^2 + y

1.匿名函数基本语法

匿名函数具有内联的所有优点,并且效率比更高。匿名函数的主要功能是:

(1)可以代替“将函数编写为单独的m-文件”;

(2)可以实现符号函数的赋值运算;

(3)很方便地对含参变量函数进行操作。

基本格式:

f=@(参数1, 参数2, …) 函数表达式

其中,@为句柄操作符,可以定义指向函数的句柄,函数句柄,可以理解成函数的“代号”,适用于函数名比较长,用“代号”代替函数操作更方便。

匿名函数示例:

运行结果: ans = 13

ans = 26.1000 20.2000 18.3000 20.4000 26.5000

也可以定义二重匿名函数:例如,

f=@(a, b) @(x) a*x+b;

其中,“a, b”是外层变量,“x”是内层变量。

这样理解:每个“@”符号后面括号里的变量的作用域一直到表达式的结尾。例如对于“a=2, b=3”, f(2, 3)是以x为变量的匿名函数:

(f(2, 3))(x)=2*x+3

类似的可以定义多重匿名函数。

2. 匿名函数的应用

(1) 求解参数方程

例2 对带参数a的参数方程:

要求针对a在[0,2]上的不同取值求解方程,并绘制方程的解x与a的关系的图像。

注:f(x)只能接受标量的自变量x,arrayfun函数对f做向量化处理使得f作用到向量自变量X上得到F(X). 语法:

F=arrayfun(f, X)

相当于用f作用到向量X的每个分量上。示例:

输出:ans = 2 4 6 8

(2) “显式”表示隐函数

隐函数一般无法给出显式表达式,但借助匿名函数和求根函数fzero()可以实现“已知隐函数表达式,对于给定的自变量x,通过数值方法求出因变量y”。

例4 “显式”表示下列隐函数:

z=@(x,y) fzero(@(z) z-sin((z*x-0.5)^2+2*x*y^2-z/10) *exp(-((x-0.5-exp(-y+z))^2+y^2-z/5+3)),rand);

z(2,0.5) %求x=2, y=0.5时的z值

%绘制z(x,y)的图像

[X,Y]=meshgrid(-1:0.1:7,-2:0.1:2);

Z=arrayfun(@(x,y) z(x,y),X,Y);

surf(X,Y,Z)

xlabel('x')

ylabel('y')

zlabel('z')

title('函数z(x,y)的图像')

张志涌,精通Matlab2011a, 北京航空航天大学出版社

吴鹏, MATLAB高效编程技巧与应用25个案例分析, 北京航空航天大学出版社

本文来自:知乎

识别关注!

数模乐园

matlab写函数教程,【Matlab基础】 自定义函数相关推荐

  1. php基础教程 第九步 自定义函数

    自定义函数 在之前的课程我们有使用到php的系统函数,这些函数由系统定义.在开发中,有时候系统自带的函数满足不了我们开发时(或其它情况),我们可以自定义函数.顾名思义,自定义函数就是自己定义函数. 自 ...

  2. C语言中的函数(重点介绍自定义函数)

    C语言中的函数分为库函数和自定义函数,本篇重点介绍自定义函数中的函数调用 函数由一个或多个语句块组成,负责完成某项特定任务, 相较于其他代码,具有相对的独立性,一般会有返回值和输入参数,提供对过程的封 ...

  3. 【C语言函数】 - 库函数、自定义函数、函数参数、函数调用、嵌套调用链式访问、递归与迭代、缓冲区

    目录 一.函数是什么 二.C语言中函数的分类 1.如何学会使用库函数 1.1.strcpy 1.2.memset 2.自定义函数 2.1.与库函数的区别 2.2.写一个函数可以找出两个整数的最大值 2 ...

  4. php 自定义 引用函数,php总结6——自定义函数、引用传值

    6.1 自定义函数 function 函数名称(参数[=默认值],参数[=默认值]...){ 函数体 [return val]; } 1) 无参数无返回 2) 有参数无返回 3) 有参数有返回 函数中 ...

  5. c语言函数详解1——自定义函数

    这篇文章理论性知识比较多,不过对于初学者对于函数的理解会有更深层次的帮助 目录 c语言的函数--子程序 自定义函数 c语言的函数--子程序 *是大型程序中的某部分代码,由一个或者多个语句组成,她负责完 ...

  6. oracle自定义函数获取省份,oracle 自定义函数 方法 基本例子

    核心提示:函数用于返回特定数据.执行时得找一个变量接收函数的返回值; 语法如下: create or replace function function_name ( argu1 [mode1] da ...

  7. R语言dplyr包summarise_at函数计算dataframe数据中多个数据列(通过向量指定)的计数个数、均值和中位数、使用list函数指定函数列表并指定自定义函数名称

    R语言dplyr包summarise_at函数计算dataframe数据中多个数据列(通过向量指定)的计数个数.均值和中位数.使用list函数指定函数列表并指定自定义函数名称 目录

  8. MATLAB函数判断绝对素数,自定义函数,找出 以内所有素数(质数)并计算它们的和,matlab...

    C++,VC2008,问题是 编写一个函数,找出3~1000之内,所有的素数.求高手!我在线等 #include#includevoidf(){//筛法charprime[1001];memset(p ...

  9. matlab解方程教程,MATLAB程序设计教程(7)—MATLAB解方程与函数极值

    第7章 MATLAB解方程与函数极值 7.1 线性方程组求解 7.2 非线性方程数值求解 7.3 常微分方程初值问题的数值解法 7.4 函数极值 7.1 线性方程组求解 7.1.1 直接解法 1.利用 ...

  10. python函数自定义教程_Python中自定义函数的教程

    在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 我们以自定义一个求绝对值的my_abs函数 ...

最新文章

  1. 资源 | 阿里发布免费深度学习课程:感知机梳理(附链接)
  2. SAX解析xml (遍历DOM树各节点)
  3. 松开手,你可以拥有更多
  4. Python中的partial便函数的理解
  5. Windows API CreateWaitableTimer和SetWaitableTimer
  6. C# WPF:把文件给我拖进来!!!
  7. java numberformat 方法_java.text.NumberFormat用法
  8. gui卡顿 python_视频下载神器(youget),在 Python 中怎么使用?
  9. FastAPI + Vue 前后端分离 接口自动化测试工具 apiAutoTestWeb
  10. 为什么我离开了管理岗位
  11. python中33个保留字的含义_Python的保留字。这是什么意思?
  12. 1瓦功耗,5GHz频率:全球最快Risc-V芯片出世,效率超越苹果M1
  13. JAVA项目中枚举和字典表,枚举与字典表的选择
  14. matlab powergui在哪儿,powergui模块在哪
  15. 大数据时代BI平台何去何从
  16. java学校举行运动会,百米赛跑跑入10 秒内的学生有资格进决赛,根据性别分别进入男子组和女子组使用if条件语句
  17. PLETL的主谓宾 定状补模式 命令 已经设计更新并执行成功如图 中节点 的m_ID 输出已经出现 ,已经开源
  18. mongodb 用命令导入导出数据库,用命令在Robo3T 上查询。
  19. POJ1324 Holedox Moving(BFS)
  20. Failed connect to github-production-release-asset-2e65be.s3.amazonaws.com:443; 连接超时

热门文章

  1. 虚假新闻识别检测分类
  2. Lind.DDD.Domain领域模型介绍
  3. 微信小程序学习笔记(1)基础入门
  4. php验证手机号码 函数,php手机号码验证判断函数
  5. 能出声的计算机软件,​聊聊DAW、VST、MaxMSP Jitter之类 和一切计算机上能出声的东西...
  6. C++ BMI指数(身体质量指数) 计算程序
  7. 微信小程序获取数据库的数据返回空数组
  8. fastadmin实现导出Excel和导入Excel数据
  9. 如何查询Lancome生产及保质期
  10. PS 中的7种投影技