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

相关推荐
机器学习之心1 天前
MATLAB基于改进云物元的模拟机协同训练质量评价
matlab·改进云物元
ytttr8731 天前
MATLAB实现经验模态分解(EMD)与希尔伯特变换获取能量谱
人工智能·python·matlab
t198751281 天前
基于多假设跟踪(MHT)算法的MATLAB实现
开发语言·matlab
机器学习之心2 天前
MATLAB多子种群混沌自适应哈里斯鹰算法优化BP神经网络回归预测
神经网络·算法·matlab
π同学2 天前
基于Matlab的递推最小二乘法参数估计
matlab·最小二乘法
小喵要摸鱼2 天前
【MATLBA】使用教程
matlab
listhi5202 天前
基于空时阵列最佳旋转角度的卫星导航抗干扰信号处理的完整MATLAB仿真
开发语言·matlab·信号处理
88号技师2 天前
2025年7月一区SCI优化算法-Logistic-Gauss Circle optimizer-附Matlab免费代码
开发语言·算法·数学建模·matlab·优化算法
yugi9878383 天前
基于MATLAB的心电信号去噪
开发语言·matlab
gihigo19983 天前
MATLAB使用遗传算法解决车间资源分配动态调度问题
算法·matlab