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

推荐阅读
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
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社区 版权所有