目录
1 语法
2 举例说明
2.1 包含一个输出的函数
2.2 包含多个输出的函数
2.3 脚本文件中的函数
【#|一文讲透Matlab中function】2.4 函数文件中的多个函数
2.5 带参数验证的函数
文章图片
1 语法
function [y1,...,yN] = myfun(x1,...,xM)
说明2 举例说明 2.1 包含一个输出的函数
function [y1,...,yN] = myfun(x1,...,xM)
声明名为myfun
的函数,该函数接受输入x1,...,xM
并返回输出y1,...,yN
。此声明语句必须是函数的第一个可执行代码行。有效的函数名称以字母字符开头,并且可以包含字母、数字或下划线。
您可以将函数保存在以下位置:
文件可以包含多个局部函数或嵌套函数。为提高可读性,可使用 end 关键字来表示文件中每个函数的末尾。以下情况下需要
- 只包含函数定义的函数文件中。文件的名称须与文件中第一个函数的名称一致。
- 包含命令和函数定义的脚本文件中。函数必须位于该文件的末尾。脚本文件不能与文件中的函数具有相同的名称。R2016b 或更高版本的脚本中支持函数。
end
关键字:
- 文件中有任意函数包含嵌套函数。
- 该函数是函数文件中的局部函数,并且文件中有局部函数使用
end
关键字。
- 该函数是脚本文件内的局部函数。
在名为
average.m
的文件中定义一个函数,该函数接受一个输入向量,计算各个值的平均值,然后返回单个结果。function ave = average(x)
ave = sum(x(:))/numel(x);
end
从命令行调用该函数。
z = 1:99;
ave = average(z)%============%
ave =
50
2.2 包含多个输出的函数
在名为
stat.m
的文件中定义一个函数,该函数返回输入向量的均值和标准差。function [m,s] = stat(x)
n = length(x);
m = sum(x)/n;
s = sqrt(sum((x-m).^2/n));
end
从命令行调用该函数。
values = [12.7, 45.4, 98.9, 26.6, 53.1];
[ave,stdev] = stat(values)%======================%
ave =
47.3400
stdev =
29.4124
2.3 脚本文件中的函数
在名为
integrationScript.m
的文件中定义一个脚本,以计算被积函数在 文章图片
处的值,并计算曲线下方从 0 到
文章图片
的面积。包括一个局部函数,用于定义被积函数
文章图片
。
注意:在脚本中包括函数需要安装 MATLAB? R2016b 或更高版本。
% Compute the value of the integrand at 2*pi/3.
x = 2*pi/3;
y = myIntegrand(x)% Compute the area under the curve from 0 to pi.
xmin = 0;
xmax = pi;
f = @myIntegrand;
a = integral(f,xmin,xmax)%数值积分function y = myIntegrand(x)
y = sin(x).^3;
end
y =0.6495a =1.3333
2.4 函数文件中的多个函数
在名为
stat2.m
的文件中定义两个函数,其中第一个函数调用第二个函数。function [m,s] = stat2(x)
n = length(x);
m = avg(x,n);
s = sqrt(sum((x-m).^2/n));
endfunction m = avg(x,n)
m = sum(x)/n;
end
函数
avg
是局部函数。局部函数仅可供同一文件中的其他函数使用。从命令行调用函数
stat2
。values = [12.7, 45.4, 98.9, 26.6, 53.1];
[ave,stdev] = stat2(values)%===========%
ave =
47.3400
stdev =
29.4124
2.5 带参数验证的函数
定义一个函数,该函数将输入限制为不包含
Inf
或 NaN
元素的数值向量。此函数使用 arguments
关键字,该关键字在 MATLAB? 版本 R2019b 及更高版本中为有效关键字。function [m,s] = stat3(x)
arguments
x (1,:) {mustBeNumeric, mustBeFinite}
end
n = length(x);
m = avg(x,n);
s = sqrt(sum((x-m).^2/n));
endfunction m = avg(x,n)
m = sum(x)/n;
end
在
arguments
代码块中,(1,:)
表示 x
必须为向量。验证函数 {mustBeNumeric, mustBeFinite}
将 x
中的元素限制为非 Inf
或 NaN
的数值。有关详细信息,请参阅函数参数验证。如果调用函数时所带的向量包含
NaN
元素,则违反了输入参数声明。此违规会导致 mustBeFinite 验证函数引发错误。values = [12.7, 45.4, 98.9, NaN, 53.1];
[ave,stdev] = stat3(values)%==========================================================%
Invalid input argument at position 1. Value must be finite.
推荐阅读
- #|送给她一朵漂亮的百合花(Matlab代码实现)
- MATLAB|[MATLAB学习笔记]采用快速傅里叶变换求时间序列的周期项
- matlab|【无标题】Matlab_字符(串)操作(函数)
- Matlab系列案例|matlab 滤波器设计代码样例
- #|【java基础】子线程任务发生异常,主线程事务如何回滚()
- 数字信号处理|实验一 序列的傅里叶变换和离散傅里叶变换及其关系
- #|归一化(Layer Normalization、Batch Normalization)
- 区块链|暴涨30%!马斯克突然杀入推特(当上最大股东!)
- #|【进阶篇】全流程学习《20天掌握Pytorch实战》纪实 | Day02 | 图片数据建模流程范例