热门标签 | 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 定义变量为全局变量

推荐阅读
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
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社区 版权所有