- Matlab 教程
- MATLAB - 首页
- MATLAB - 概述
- MATLAB - 特性
- MATLAB - 环境设置
- MATLAB - 编辑器
- MATLAB - 在线
- MATLAB - 工作区
- MATLAB - 语法
- MATLAB - 变量
- MATLAB - 命令
- MATLAB - 数据类型
- MATLAB - 运算符
- MATLAB - 日期和时间
- MATLAB - 数字
- MATLAB - 随机数
- MATLAB - 字符串和字符
- MATLAB - 文本格式化
- MATLAB - 时间表
- MATLAB - M 文件
- MATLAB - 冒号表示法
- MATLAB - 数据导入
- MATLAB - 数据输出
- MATLAB - 数据标准化
- MATLAB - 预定义变量
- MATLAB - 决策
- MATLAB - 决策语句
- MATLAB - If End 语句
- MATLAB - If Else 语句
- MATLAB - If…Elseif Else 语句
- MATLAB - 嵌套 If 语句
- MATLAB - Switch 语句
- MATLAB - 嵌套 Switch
- MATLAB - 循环
- MATLAB - 循环
- MATLAB - For 循环
- MATLAB - While 循环
- MATLAB - 嵌套循环
- MATLAB - Break 语句
- MATLAB - Continue 语句
- MATLAB - End 语句
- MATLAB - 数组
- MATLAB - 数组
- MATLAB - 向量
- MATLAB - 转置运算符
- MATLAB - 数组索引
- MATLAB - 多维数组
- MATLAB - 兼容数组
- MATLAB - 分类数组
- MATLAB - 元胞数组
- MATLAB - 矩阵
- MATLAB - 稀疏矩阵
- MATLAB - 表格
- MATLAB - 结构体
- MATLAB - 数组乘法
- MATLAB - 数组除法
- MATLAB - 数组函数
- MATLAB - 函数
- MATLAB - 函数
- MATLAB - 函数参数
- MATLAB - 匿名函数
- MATLAB - 嵌套函数
- MATLAB - 返回语句
- MATLAB - 空函数
- MATLAB - 局部函数
- MATLAB - 全局变量
- MATLAB - 函数句柄
- MATLAB - 滤波器函数
- MATLAB - 阶乘
- MATLAB - 私有函数
- MATLAB - 子函数
- MATLAB - 递归函数
- MATLAB - 函数优先级顺序
- MATLAB - 映射函数
- MATLAB - 平均值函数
- MATLAB - 结束函数
- MATLAB - 错误处理
- MATLAB - 错误处理
- MATLAB - Try...Catch 语句
- MATLAB - 调试
- MATLAB - 绘图
- MATLAB - 绘图
- MATLAB - 绘制数组
- MATLAB - 绘制向量
- MATLAB - 条形图
- MATLAB - 直方图
- MATLAB - 图形
- MATLAB - 2D 线形图
- MATLAB - 3D 图形
- MATLAB - 格式化图形
- MATLAB - 对数坐标轴图形
- MATLAB - 绘制误差线
- MATLAB - 绘制 3D 等值线图
- MATLAB - 极坐标图
- MATLAB - 散点图
- MATLAB - 绘制表达式或函数
- MATLAB - 绘制矩形
- MATLAB - 绘制频谱图
- MATLAB - 绘制网格曲面
- MATLAB - 绘制正弦波
- MATLAB - 插值
- MATLAB - 插值
- MATLAB - 线性插值
- MATLAB - 2D 数组插值
- MATLAB - 3D 数组插值
- MATLAB - 多项式
- MATLAB - 多项式
- MATLAB - 多项式加法
- MATLAB - 多项式乘法
- MATLAB - 多项式除法
- MATLAB - 多项式的导数
- MATLAB - 变换
- MATLAB - 变换
- MATLAB - 拉普拉斯变换
- MATLAB - 拉普拉斯滤波器
- MATLAB - 高斯-拉普拉斯滤波器
- MATLAB - 逆傅里叶变换
- MATLAB - 傅里叶变换
- MATLAB - 快速傅里叶变换
- MATLAB - 2D 逆余弦变换
- MATLAB - 向坐标轴添加图例
- MATLAB - 面向对象
- MATLAB - 面向对象编程
- MATLAB - 类和对象
- MATLAB - 函数重载
- MATLAB - 运算符重载
- MATLAB - 用户定义类
- MATLAB - 复制对象
- MATLAB - 代数
- MATLAB - 线性代数
- MATLAB - 高斯消元法
- MATLAB - 高斯-约旦消元法
- MATLAB - 简化行阶梯形
- MATLAB - 特征值和特征向量
- MATLAB - 积分
- MATLAB - 积分
- MATLAB - 二重积分
- MATLAB - 梯形法则
- MATLAB - 辛普森法则
- MATLAB - 杂项
- MATLAB - 微积分
- MATLAB - 微分
- MATLAB - 矩阵的逆
- MATLAB - GNU Octave
- MATLAB - Simulink
- MATLAB - 有用资源
- MATLAB - 快速指南
- MATLAB - 有用资源
- MATLAB - 讨论
MATLAB - 函数
函数是一组执行特定任务的语句。在 MATLAB 中,函数在单独的文件中定义。文件和函数的名称应相同。
函数在其自己的工作区(也称为局部工作区)中操作变量,该工作区与您在 MATLAB 命令提示符下访问的工作区(称为基本工作区)分开。
函数可以接受多个输入参数,并且可以返回多个输出参数。
函数语句的语法如下:
function [out1,out2, ..., outN] = myfun(in1,in2,in3, ..., inN)
示例
以下名为mymax的函数应写入名为mymax.m的文件中。它将五个数字作为参数,并返回这些数字中的最大值。
创建一个名为 mymax.m 的函数文件,并在其中键入以下代码:
function max = mymax(n1, n2, n3, n4, n5) %This function calculates the maximum of the % five numbers given as input max = n1; if(n2 > max) max = n2; end if(n3 > max) max = n3; end if(n4 > max) max = n4; end if(n5 > max) max = n5; end
函数的第一行以关键字function开头。它给出函数的名称和参数的顺序。在我们的示例中,mymax函数有五个输入参数和一个输出参数。
紧跟在函数语句之后的注释行提供了帮助文本。当您键入以下内容时,将打印这些行:
help mymax
MATLAB 将执行上述语句并返回以下结果:
This function calculates the maximum of the five numbers given as input
您可以像这样调用函数:
mymax(34, 78, 89, 23, 11)
MATLAB 将执行上述语句并返回以下结果:
ans = 89
匿名函数
匿名函数类似于传统编程语言中的内联函数,在单个 MATLAB 语句中定义。它由单个 MATLAB 表达式和任意数量的输入和输出参数组成。
您可以在 MATLAB 命令行或函数或脚本中定义匿名函数。
这样,您就可以创建简单的函数,而无需为它们创建文件。
从表达式创建匿名函数的语法为
f = @(arglist)expression
示例
在这个例子中,我们将编写一个名为 power 的匿名函数,它将接收两个数字作为输入,并返回第一个数字的第二个数字次幂。
创建一个脚本文件,并在其中键入以下代码:
power = @(x, n) x.^n; result1 = power(7, 3) result2 = power(49, 0.5) result3 = power(10, -10) result4 = power (4.5, 1.5)
运行该文件时,它将显示:
result1 = 343 result2 = 7 result3 = 1.0000e-10 result4 = 9.5459
主函数和子函数
除匿名函数之外的任何函数都必须在文件中定义。每个函数文件都包含一个必需的主函数(首先出现)和任意数量的可选子函数(出现在主函数之后并由其使用)。
主函数可以从定义它们的外部文件(从命令行或其他函数)调用,但子函数不能从命令行或其他函数(在函数文件外部)调用。
子函数仅对定义它们的函数文件中的主函数和其他子函数可见。
示例
让我们编写一个名为 quadratic 的函数,它将计算二次方程的根。该函数将接收三个输入,二次系数、线性系数和常数项。它将返回根。
函数文件 quadratic.m 将包含主函数quadratic和子函数disc,后者计算判别式。
创建一个函数文件quadratic.m,并在其中键入以下代码:
function [x1,x2] = quadratic(a,b,c) %this function returns the roots of % a quadratic equation. % It takes 3 input arguments % which are the co-efficients of x2, x and the %constant term % It returns the roots d = disc(a,b,c); x1 = (-b + d) / (2*a); x2 = (-b - d) / (2*a); end % end of quadratic function dis = disc(a,b,c) %function calculates the discriminant dis = sqrt(b^2 - 4*a*c); end % end of sub-function
您可以从命令提示符下调用上述函数,如下所示:
quadratic(2,4,-4)
MATLAB 将执行上述语句并返回以下结果:
ans = 0.7321
嵌套函数
您可以在另一个函数的主体中定义函数。这些称为嵌套函数。嵌套函数包含任何其他函数的任何或所有组件。
嵌套函数在另一个函数的作用域内定义,并且它们共享对包含函数的工作区的访问权限。
嵌套函数遵循以下语法:
function x = A(p1, p2) ... B(p2) function y = B(p3) ... end ... end
示例
让我们重写上一个示例中的quadratic函数,但是这次disc函数将是一个嵌套函数。
创建一个函数文件quadratic2.m,并在其中键入以下代码:
function [x1,x2] = quadratic2(a,b,c) function disc % nested function d = sqrt(b^2 - 4*a*c); end % end of function disc disc; x1 = (-b + d) / (2*a); x2 = (-b - d) / (2*a); end % end of function quadratic2
您可以从命令提示符下调用上述函数,如下所示:
quadratic2(2,4,-4)
MATLAB 将执行上述语句并返回以下结果:
ans = 0.73205
私有函数
私有函数是仅对有限数量的其他函数可见的主函数。如果您不想公开函数的实现,则可以将其创建为私有函数。
私有函数驻留在具有特殊名称private的子文件夹中。
它们仅对父文件夹中的函数可见。
示例
让我们重写quadratic函数。但是这次,计算判别式的disc函数将是一个私有函数。
在工作目录中创建一个名为 private 的子文件夹。将以下函数文件disc.m存储在其中:
function dis = disc(a,b,c) %function calculates the discriminant dis = sqrt(b^2 - 4*a*c); end % end of sub-function
在您的工作目录中创建一个函数 quadratic3.m,并在其中键入以下代码:
function [x1,x2] = quadratic3(a,b,c) %this function returns the roots of % a quadratic equation. % It takes 3 input arguments % which are the co-efficient of x2, x and the %constant term % It returns the roots d = disc(a,b,c); x1 = (-b + d) / (2*a); x2 = (-b - d) / (2*a); end % end of quadratic3
您可以从命令提示符下调用上述函数,如下所示:
quadratic3(2,4,-4)
MATLAB 将执行上述语句并返回以下结果:
ans = 0.73205
全局变量
全局变量可以由多个函数共享。为此,您需要在所有函数中将变量声明为全局变量。
如果您想从基本工作区访问该变量,则在命令行中声明该变量。
全局声明必须在函数中实际使用变量之前发生。最好对全局变量的名称使用大写字母,以将其与其他变量区分开来。
示例
让我们创建一个名为 average.m 的函数文件,并在其中键入以下代码:
function avg = average(nums) global TOTAL avg = sum(nums)/TOTAL; end
创建一个脚本文件,并在其中键入以下代码:
global TOTAL; TOTAL = 10; n = [34, 45, 25, 45, 33, 19, 40, 34, 38, 42]; av = average(n)
运行该文件时,它将显示以下结果:
av = 35.500