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

推荐阅读
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • 本题探讨了在一个有向图中,如何根据特定规则将城市划分为若干个区域,使得每个区域内的城市之间能够相互到达,并且划分的区域数量最少。题目提供了时间限制和内存限制,要求在给定的城市和道路信息下,计算出最少需要划分的区域数量。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 本次考试于2016年10月25日上午7:50至11:15举行,主要涉及数学专题,特别是斐波那契数列的性质及其在编程中的应用。本文将详细解析考试中的题目,并提供解题思路和代码实现。 ... [详细]
  • 本文详细介绍了如何在 Windows 环境下使用 node-gyp 工具进行 Node.js 本地扩展的编译和配置,涵盖从环境搭建到代码实现的全过程。 ... [详细]
  • 本文将深入探讨如何在不依赖第三方库的情况下,使用 React 处理表单输入和验证。我们将介绍一种高效且灵活的方法,涵盖表单提交、输入验证及错误处理等关键功能。 ... [详细]
  • 本文介绍了一种从与src同级的config目录中读取属性文件内容的方法。通过使用Java的Properties类和InputStream,可以轻松加载并获取指定键对应的值。 ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • 本文将详细探讨Linux pinctrl子系统的各个关键数据结构,帮助读者深入了解其内部机制。通过分析这些数据结构及其相互关系,我们将进一步理解pinctrl子系统的工作原理和设计思路。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • PostgreSQL 10 离线安装指南
    本文详细介绍了如何在无法联网的服务器上进行 PostgreSQL 10 的离线安装,并涵盖了从下载安装包到配置远程访问的完整步骤。 ... [详细]
  • 本文介绍如何在Linux Mint系统上搭建Rust开发环境,包括安装IntelliJ IDEA、Rust工具链及必要的插件。通过详细步骤,帮助开发者快速上手。 ... [详细]
  • 哈密顿回路问题旨在寻找一个简单回路,该回路包含图中的每个顶点。本文将介绍如何判断给定的路径是否构成哈密顿回路。 ... [详细]
  • C语言基础入门:7个经典小程序助你快速掌握编程技巧
    本文精选了7个经典的C语言小程序,旨在帮助初学者快速掌握编程基础。通过这些程序的实践,你将更深入地理解C语言的核心概念和语法结构。 ... [详细]
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社区 版权所有