MATLAB中函数的详细使用

一、函数基本知识

function语法: function [,...,] = myfun(,...,), 其中[,...,]为输出量,myfun为函数名,(,...,)为函数输入量。

有效的函数名称字母字符开头,并且可以包含字母、数字或下划线。

注意事项:

注意事项一:函数的保存位置与命名规则

1、函数文件 (Function File)​

规则​: 只包含函数定义的函数文件中。文件的名称应与文件中其函数的名称一致。

创建一个新的 .m文件,这个文件只包含一个函数 的定义。这个文件的名字必须和函数的名字完全相同

示例 ​: 定义了一个函数:function myFunction(input) ... end

那么必须将这个函数保存为一个名为 myFunction.m的文件。

当在命令行或其他脚本中调用 myFunction时,MATLAB 会自动去寻找 myFunction.m文件来执行。

**代码演示1:**简单加法函数

定义函数 ​(保存为 addNumbers.m):

function sumResult = addNumbers(a, b) % ADDNUMBERS 计算两数之和

sumResult = a + b;
end

调用函数​(在命令行或脚本中):

result = addNumbers(3, 5); % 返回 8

disp(result);

**代码演示2:**多输入输出函数

定义函数 ​(保存为 circleCalc.m):

function [area, circumference] = circleCalc(radius) % CIRCLECALC 计算圆的面积和周长

area = pi * radius^2;

circumference = 2 * pi * radius;
end

在其他.m的脚本文件中调用函数​:

a, c\] = circleCalc(2); % 输出结果: a = 12.566, c = 12.566

2、脚本文件 (Script File)

规则 ​: 包含命令和函数定义的脚本文件中。函数必须位于该文件的末尾。脚本文件不能与文件中的函数具有相同的名称。

示例:正确的脚本文件结构 (myScript.m)​

% ============ 主脚本代码部分 ============

% 这里是主要的执行逻辑

% 计算圆的面积和周长

radius = 5;

area, circ\] = calculateCircle(radius); % 调用局部函数 fprintf('半径: %.2f\\n', radius); fprintf('面积: %.2f\\n', area); fprintf('周长: %.2f\\n', circ); % 可以继续添加更多脚本代码.. ........ % ============ 局部函数部分 (必须放在末尾) ============ function \[area, circumference\] = calculateCircle(r) % CALCULATECIRCLE 计算圆的几何属性 area = pi \* r\^2; circumference = 2 \* pi \* r; end % 可以添加更多局部函数... function volume = calculateSphere(r) % CALCULATESPHERE 计算球体体积 volume = (4/3) \* pi \* r\^3; end

关键解释​:

文件命名 ​:脚本保存为 myScript.m(而非 calculateCircle.m

执行顺序​:MATLAB 从上到下执行,先运行主脚本,再定义函数

函数调用 ​:主脚本中可以调用 calculateCirclecalculateSphere

注意事项二:多函数与 end关键字的使用

规则 ​: "文件可以包含多个局部函数或嵌套函数。为提高可读性,可使用 end关键字来表示文件中每个函数的末尾。

  • 局部函数 (Local Functions)​​: 并列放在主函数或主脚本后面的多个函数。•

  • 嵌套函数 (Nested Functions)​​: 定义在另一个函数内部的函数。

示例 (函数文件中的多个局部函数)​​:

% 保存为 MyMath.m脚本文件

function mainOutput = MyMath(input)

output1 = addFive(input);

mainOutput = squareNumber(output1);
end

% 局部函数 1

function out = addFive(in)

out = in + 5;
end % 此处建议使用 end,如果是嵌套函数或脚本中则必须使用

% 局部函数 2

function out = squareNumber(in)

out = in * in;
end % 此处建议使用 end,如果是嵌套函数或脚本中则必须使用

二、matlab创建一个子函数,在主函数中调用该子函数

1.子函数必须与主函数位于同一个 .m 文件中,且定义在主函数之后。子函数的作用域仅限于该文件,外部无法直接调用。

步骤 1:创建主函数与子函数(同一 .m 文件)​

% 主函数(文件保存为 mainFunction.m)
function [sum_result, product_result] = mainFunction(a, b)

% 调用子函数 calculateSum

sum_result = calculateSum(a, b);

% 调用子函数 calculateProduct

product_result = calculateProduct(a, b);
end

% 子函数 1:计算两数之和
function sum_val = calculateSum(x, y)

sum_val = x + y;
end

% 子函数 2:计算两数之积
function product_val = calculateProduct(x, y)

product_val = x * y;
end

步骤 2:调用主函数

在命令行或脚本中直接调用主函数:

% 调用示例

sum_result, product_result\] = mainFunction(3, 4); disp(\['和: ', num2str(sum_result)\]); % 输出 7 disp(\['积: ', num2str(product_result)\]); % 输出 12

拓展:上面代码放在一个脚本中

将文件重命名(例如改为 myCalculator.m),确保文件名不与内部的任何函数名相同。

% myCalculator.m (这是一个脚本文件)
% 主程序脚本代码
a = 3;
b = 4;

sum_result, product_result\] = mainFunction(a, b); disp(\['和: ', num2str(sum_result)\]); % 输出 7 disp(\['积: ', num2str(product_result)\]); % 输出 12 % --- **局部函数定义必须放在脚本代码的后面** --- function \[sum_result, product_result\] = mainFunction(a, b) % 调用子函数 calculateSum sum_result = calculateSum(a, b); % 调用子函数 calculateProduct product_result = calculateProduct(a, b); end % 子函数 1:计算两数之和 function sum_val = calculateSum(x, y) sum_val = x + y; end % 子函数 2:计算两数之积 function product_val = calculateProduct(x, y) product_val = x \* y; end

2.多文件调用(非子函数)

若需跨文件调用函数,需将函数保存为独立 .m 文件,并确保文件在 MATLAB 搜索路径中:

步骤1.​创建独立函数文件

% 文件:calculateSum.m

function sum_val = calculateSum(x, y)

sum_val = x + y;

end

步骤2 .​主文件中调用

% 文件:mainScript.m

a = 3; b = 4;

result = calculateSum(a, b); % 直接调用外部函数

%这里可以调用前面的子函数

sum_result, product_result\] = mainFunction(3, 4); disp(\['和: ', num2str(sum_result)\]); % 输出 7 disp(\['积: ', num2str(product_result)\]); % 输出 12

相关推荐
yongui478343 小时前
基于MATLAB/Simulink的单机带负荷仿真系统搭建
网络·matlab
桃源学社(接毕设)8 小时前
基于MATLAB的运动模糊图像修复方法研究(LW+源码+讲解+部署)
图像处理·深度学习·计算机视觉·matlab·毕业设计·图像滤波去噪
Evand J1 天前
【MATLAB例程】水下机器人长基线(LBL)定位,用于三维轨迹,使用EKF滤波,融合LBL和IMU,4个锚点(长基线基站数=4),附下载链接
开发语言·matlab·机器人
Aiah.2 天前
数字图像处理(一)
开发语言·计算机视觉·matlab·数字图像处理
躺平都躺不明白2 天前
数学建模-线性规划(LP)
数学建模·matlab
rit84324992 天前
基于粒子滤波的运动目标跟踪MATLAB实现
人工智能·matlab·目标跟踪
stbomei3 天前
基于 MATLAB 的信号处理实战:滤波、傅里叶变换与频谱分析
算法·matlab·信号处理
我找到地球的支点啦3 天前
Matlab系列(005) 一 归一化
人工智能·机器学习·matlab·信息与通信
yueyuebaobaoxinx3 天前
MATLAB 与 Simulink 联合仿真:控制系统建模与动态性能优化
开发语言·matlab·性能优化