热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Maltab中有关的函数知识,你都知道吗?

Maltab中有关的函数知识,你都知道吗?文章目录Maltab中有关的函数知识,你都知道吗?Maltab中函数的通用模板定义

Maltab中有关的函数知识,你都知道吗?




文章目录

    • Maltab中有关的函数知识,你都知道吗?
      • Maltab中函数的通用模板
      • 定义函数
        • 函数的保存和使用
        • 可变数量的参数
      • 辅助函数
      • 全局变量
      • 小结

本博客会讨论:如何定义函数;如何将数据传递到函数;如何返回数据,包括多个结果;如何在函数中加入仅能用作帮助的其他函数;

Maltab中函数的通用模板

通用模板:

function ()

对于大部分函数来说,中是返回结果的名称,后面紧跟一个等号(=),如果返回结果的数量大于1,这些结果被放在一个向量的中,类似[outputArg1,outputArg2,...]。如果函数没有返回结果,可以省略列表和等号。是函数名,但需注意命名规则。是传递到函数的数据名称的列表,各种数据名称之间用逗号隔开,例如:(inputArg1,inputArg2) ;是一行或多行注释,描述了函数的功能和调用方法。

定义函数

在matlab语言中,函数必须保存为一个单独的文件,该文件保存在任何脚本或函数都可以调用的目录中。如果函数名称为function_name,那么包含该函数的文件名必须是.m.

例如:
这里定义了,一个名为get_cylinder的函数,用于计算圆柱的体积

function volume = get_cylinder(height,radius)
% 计算圆柱体积的函数
base = pi* radius^2;
volume = base*height;
end

实现:
在这里插入图片描述
使用help get_cylinder直接可以显示函数的帮助文档,就是你定义函数是写的注释内容。

函数的保存和使用

创建自定义Matlab函数和创建.m文件中的脚本是一样的。创建的文件被保存为一个M文件,M文件的名称必须与函数的名称相同。
例如,我刚刚创建了一个名为get_cylinder的函数,函数就必须保存在一个名称为get_cylinder.m的文件文件一但保存,用户就可以可以调用了。

调用的方式是:在命令行窗口,脚本或其他函数中输入函数的名称和形式、数量准确的参数就可以了,如果没有将函数的调用结果复制给其他变量,它将被赋值给变量ans.

可变数量的参数

虽然参数个数通常时固定的,但是大部分编程语言(包括Matlab)都能够处理可变数量的参数,无论是输入常数还是返回常数。内置函数nargin可以计算用户调用函数时实际提供的参数个数。

例如:
前面那个例子中,可以使用nargin查看函数所需提供参数的个数
在这里插入图片描述
如果函数中含有nargin,用户调用该函数时,只要提供一些他认为重要的值,而那些不重要的值则会使用函数的默认值。

function c = addme(a,b)switch nargincase 2c = a + b;case 1c = a + a;otherwisec = 0;end
end

演示:
在这里插入图片描述
使用nargout函数,可以计算用户实际提供的存储变量的个数。
例如:
在这里插入图片描述
使用varargin的函数输入:确定使用 varargin 的函数可接受多少个输入。

例如:

function num = sum1(a,b,varargin)
num = a+b+varargin{:};
end

我们再调用函数nargin看看,负号表示第三个输入是 varargin。
在这里插入图片描述
再调用一下sum1的函数,发现varargin确实可以支持多参数输入
在这里插入图片描述

###返回多个结果
很多语言都能通过参数名称来返回函数的多个结果,但Maltab是其中比较特别的。matlab的多个结果用变量名的 “向量” 来表示
例如:

function [area,volume] = cylinder5_2(height,radius)
%计算圆柱体体积的函数
%usage:[area,volume] = cylinder(height,radius)
base = pi .* radius.^2;
volume = base .* height;
area = 2 * pi * radius .* height + 2* base;
end

这里显示了一个能调用返回多个结果的函数。
常规方法是使用变量的名称来获取向量中的结果。该名称可以为任何有效的变量名,而值是按照定义的结果顺序来返回的。如果返回的结果数少于全部结果(或根本没有),则按照从左到右的顺序返回所有结果中的前几个。
例如:
在这里插入图片描述
这里如果只想要第二个结果值,必须在第一个位置放一个‘~’标记。

辅助函数

因为Maltab 语言使用文件名来识别函数,所有,正常情况下,每个函数都应该保存为一个单独的M文件。可是,有时候,执行M文件的主函数中包括的算法时,需要使用到辅助函数(有时候可称为“帮助函数”)。如果某个辅助函数只应用于主函数或其帮助函数可以将该辅助函数与其调用函数写在同一个文件,辅助函数写在主函数的后面。

function result = volume(radius,height)
result = get_are(radius)*height;
end
function ares = get_are(radius)
ares = radius^2*pi;
end

全局变量

由于matlab总是将输入数据复制到函数的工作空间中,所有有时会非常低效地将大数据集输入和输出函数。为了避免传递大量数据,我们可以使用全局变量。全局变量必须同时再调用脚本和使用关键词global的函数中定义。
例如:

function change_num(num)
global number
number = num + 4;
end

结果:

但是,必须谨慎使用全局变量,因为任何具有全局访问权限的函数都有权更改该数据。

小结


  1. 函数必须在同名文件中定义,关键词function可以将其区别于脚本。
  2. 参数被依次复制到函数中,并赋值给相应的形参。
  3. 通过将结果赋值给返回变量,结果被返回给调用方
  4. 除非被声明为全局变量,否则函数内的变量只能再函数的代码块中访问
  5. 辅助函数只能被同一个文件中的函数(可以添加到主函数的下面)访问,否则需遵守与主函数相同的规则。

特殊字符、保留字和函数

特殊字符、保留字和函数含义
help调用函数
function将M文件标识为函数
nargin确定函数调用者提供的输入参数的数量
natgout确定函数调用者请求的输出参数的数量
global 定义变量为全局变量

推荐阅读
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
author-avatar
houjiajun
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有