当前位置: 首页 > news >正文

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)

%此函数用于计算
%输入五个数字
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)

%此函数返回
%二次方程。
%它需要3个输入参数
%x2,x和
%常数项
%它返回根
d = disc(a,b,c);
x1 = (-b + d) / (2a);
x2 = (-b - d) / (2
a);
end % end of quadratic

function dis = disc(a,b,c)
%函数计算判别式
dis = sqrt(b^2 - 4ac);
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 %嵌套函数
d = sqrt(b^2 - 4ac);
end % 结束函数disc

disc;
x1 = (-b + d) / (2a);
x2 = (-b - d) / (2
a);
end %结束函数 quadratic2
您可以从命令提示符处调用上述函数,如下所示:

quadratic2(2,4,-4)
MATLAB将执行上述语句并返回以下结果-

ans = 0.73205
私有函数
私有函数是仅对有限的一组其他函数可见的主函数。如果不想公开函数function(s)的实现,可以将它们创建为私有函数。

私有函数位于具有特殊名称 Private 的子文件夹中。

它们仅对父文件夹中的函数可见。

实例
让我们重写quadratic函数。不过,这一次,disc函数计算判别式,将是一个私有函数。

在工作目录文件夹中创建一个名为 private 的子文件夹,在其中存储以下函数文件 disc.m

function dis = disc(a,b,c)
%函数计算判别式
dis = sqrt(b^2 - 4ac);
end %子函数结束
在您的工作目录中创建一个函数 quadratic3.m ,并在其中输入以下代码-

function [x1,x2] = quadratic3(a,b,c)

% 这个函数返回
% 一元二次方程。
它需要3个输入参数
% 它们是 x2,x 和
% 常数项
% 它返回根
d = disc(a,b,c);

x1 = (-b + d) / (2a);
x2 = (-b - d) / (2
a);
end %结束 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

http://www.lryc.cn/news/343885.html

相关文章:

  • spring高级篇(七)
  • 根据token获取了username后,能否在其他地方使用这个获取的username,或者在其他地方如何获取username?
  • 值模板参数Value Template Parameters
  • Splashtop 荣获 TrustRadius 颁发的“2024年度最受欢迎奖”
  • 使用python将`.mat`文件转换成`.xlsx`格式的Excel文件!!
  • python基础 面向练习学习python1
  • Ubuntu安装Docker和Docker Compose
  • 【linux软件基础知识】-死锁问题
  • C#面:简要谈对微软.NET 构架下 remoting 和 webservice 两项技术的理解以及实际中的应用
  • 《21天学通C++》(第十九章)STL集合类(set和multiset)
  • CSDN上是不是有机器人点赞和收藏?
  • 头歌C语言课程实验(递归函数、嵌套函数)
  • 树莓派的几种登录方式、及登录失败解决方式
  • 数据库中视图的知识点
  • aardio封装库) 微软开源的js引擎(ChakraCore)
  • LeetCode-hot100题解—Day6
  • 【Linux】gcc/g++的使用
  • 2024-5-3学习笔记 虚拟继承原理
  • C语言什么是“野指针”?
  • LeetCode--所有质数、质数对
  • JavaScript异步编程——05-回调函数
  • JAVA基础之jsp标准标签
  • VM16激活码以及连接centos7过慢的问题
  • MySQL 迁移到 Oracle 需要注意的问题
  • 【数字经济】上市公司供应链数字化数据(2000-2022)
  • 通过AOP实现项目中业务服务降级功能
  • LeetCode:盛最多水的容器
  • 阿里云 OSS桶对象存储攻防
  • 外网禅道配置
  • MM模块学习一(供应商创建,物料类型的定义及功能)