MATLAB绘图基础4:MATLAB函数

参考书:《 M A T L A B {\rm MATLAB} MATLAB与学术图表绘制》(关东升)。



4.函数
4.1 定义函数
  1. 创建新函数文件

    % 1.函数文件:
    % 1.1 函数文件包含一个或多个函数的定义;
    % 1.2 函数文件包含函数头,用于指定函数名称和输入参数,如:function output = function1(input);
    % 1.3 函数文件中的代码用于执行特定任务,并通常包含在函数体中;
    % 1.4 函数文件允许我们封装和组织功能性代码,以重复使用和模块化;
    % 1.5 函数文件通常具有与其函数名称相同的文件名,如:function1.m;% 2.脚本文件:
    % 2.1 脚本文件包含一系列MATLAB命令和语句,通常没有函数定义;
    % 2.2 脚本文件的代码从上到下的顺序依次执行;
    % 2.3 脚本文件用于执行特定的任务或操作,但不封装在函数中;
    % 2.4 脚本文件通常用于进行数据处理、可视化、分析等任务,而不是定义函数;
    % 2.5 脚本文件的文件名通常反映其目的或内容,但不需要与其中的代码相匹配;
    
  2. 编写函数头

    % 编写函数头的语法:
    function output = function1(input1, input2)% function:MATLAB关键字,用于定义函数;
    % output:函数的输出参数,可以定义一个或多个输出参数;
    % function1:函数的名称;
    % input1,input2,...:函数的输入参数,可以定义零个或多个输入参数;
    
  3. 编写函数体及返回结果

    % 编写函数体语法:% 函数体
    % 编写执行任务的代码% 示例:
    % num1、num2:输入参数;
    % addFunction:函数名称;
    % result:输出参数;
    function result = addFunction(num1, num2)		% 定义函数头;result = num1 + num2;							% 定义函数体;
    
  4. 保存文件:保存文件时,确保文件名和函数名称匹配;

  5. 调用函数

  6. 函数示例:

    % 函数名应见名知义,此处为示例不求细节;
    % ch04_01function.m
    function result = ch04_01function(num1, num2)result = num1 + num2;
    
    % ch04_01.m
    % 调用自定义函数;
    iNumber1 = 100;
    iNumber2 = 200;addResult = ch04_01function(iNumber1,iNumber2);
    addResult% ch04_01.m结果:
    % addResult =%   300
    
4.2 变量作用域
  • M A T L A B {\rm MATLAB} MATLAB中,变量的作用域指的是变量在代码中可见和可访问的范围;
  • M A T L A B {\rm MATLAB} MATLAB分为局部变量作用域和全局变量作用域:
    • 局部变量作用域:局部作用域中的变量称为局部变量,只在其定义的函数或脚本内部可见和访问;
    • 全局变量作用域:全局作用域中的变量称为全局变量,在整个 M A T L A B {\rm MATLAB} MATLAB工作环境中可见和可访问;
  • M A T L A B {\rm MATLAB} MATLAB中变量作用域遵循的规则:
    • 在函数内部定义的变量通常为局部变量,只能在该函数内部访问;
    • 在函数外部定义的变量通常为全局变量,可以在整个 M A T L A B {\rm MATLAB} MATLAB工作环境中访问;
    • 函数可以访问全局变量,但频繁使用全局变量可能会引起命名冲突和代码维护问题;
    • 某些情况下,可以使用 g l o b a l {\rm global} global关键字将全局变量引入函数的局部作用域中,但需要谨慎使用;
4.3 嵌套函数
  • 嵌套函数是在一个 M A T L A B {\rm MATLAB} MATLAB函数内定义的函数,通常用于帮助组织和封装代码,提高代码的可读性和可维护性;

  • 嵌套函数主要作用:

    • 模块化代码:嵌套函数使代码更具模块化,将大型函数分解为更小、更易管理的部分,有助于降低代码的复杂性,使代码更易于理解和维护;
    • 隐藏实现细节:嵌套函数的作用范围限于包含它的主函数,即它的实现细节对外部代码是隐藏的,有助于保护函数的私有数据和实现细节,同时提供公共接口供外部使用;
    • 避免全局变量:嵌套函数可以访问其父函数的变量,不必使用全局变量,有助于减少全局变量的使用,提高代码的封装性和可维护性;
    • 代码重用:嵌套函数可以在同一文件中被多个函数调用,从而促进代码重用,减少重复编写相同代码;
    • 提高代码可读性:使用嵌套函数,可以将相关的功能和操作组织成逻辑单元,提高代码的可读性,每个嵌套函数可以专注于执行特定任务,使代码更易理解;
    • 降低命名冲突的风险:嵌套函数的作用范围有限,可以使用与其函数相同的名称而不引起命名冲突;
  • 嵌套函数特点:

    • 嵌套函数定义在包含它的外部函数内;
    • 内部函数可以访问外部函数的局部变量和输入参数;
    • 内部函数可以独立于外部函数进行测试和调试;
  • 嵌套函数示例:

    % ch04_02function.m
    % 函数名应见名知义,此处为示例不求细节;% 外部函数定义;
    function ch04_02function(iNum1,iNum2)% 外部函数的局部变量iResult1 = iNum1 + iNum2;% 嵌套函数定义function iResult2 = innerFunction1(iNum3,iNum4)% 内部函数访问外部函数的局部变量ziResult2 = iNum3 + iNum4 + iResult1;endfunction iResult3 = innerFunction2(iNum5,iNum6)iResult3 = iNum5 + iNum6 - iResult1;end% 调用嵌套函数innerResult1 = innerFunction1(100, 200);innerResult2 = innerFunction2(100, 200);disp(['外部函数的结果:' num2str(iResult1)]);disp(['嵌套函数1的结果:' num2str(innerResult1)]);disp(['嵌套函数2的结果:' num2str(innerResult2)]);
    end
    
    % ch04_02function函数调用结果:
    外部函数的结果:300
    嵌套函数1的结果:600
    嵌套函数2的结果:0
    
4.4 函数句柄
  • M A T L A B {\rm MATLAB} MATLAB的函数句柄是一种数据类型,用于表示函数的引用;

  • 函数句柄允许我们将函数作为参数传递给其他函数,或将函数存储在变量中供稍后调用;

  • M A T L A B {\rm MATLAB} MATLAB函数句柄包括:普通函数句柄和匿名函数句柄;

    • 普通函数句柄:用于引用已经存在的、具有显式名称的函数;
    • 匿名函数句柄:没有显式函数名称的函数,通常用于简单的、一次性的任务,通过@符号创建;
  • 普通函数句柄示例:

    % ch04_03function.m
    % 函数名应见名知义,此处为示例不求细节;% 创建一个函数,计算输入值的平方和;
    function result = ch04_03function(iNum1, iNum2)result = iNum1^2 + iNum2^2;
    end
    
    % ch04_03.m% 创建一个名为squareHandle的函数句柄,指向ch04_03function函数;
    % 通过@符号创建函数句柄,通过squareHandle可以调用ch04_03function函数;
    squareHandle = @ch04_03function;% 使用函数句柄squareHandle调用函数,以inputNumber作为输入参数;
    inputNumber = 100;
    calResult = squareHandle(inputNumber, inputNumber);disp(['函数输入值为:' num2str(inputNumber)]);
    disp(['函数句柄调用结果为:' num2str(calResult)]);% ch04_03.m执行结果:
    % 函数输入值为:100
    % 函数句柄调用结果为:20000
    
  • 匿名函数句柄示例:

    % ch04_04.m
    clear;
    clc;% 创建匿名函数,计算两个数的平方和;
    squareAdd = @(iNum1, iNum2) iNum1^2 + iNum2^2;% 调用匿名函数;
    calResult = squareAdd(100, 200);
    disp(['平方和计算结果:' num2str(calResult)]);% ch04_04.m计算结果:
    % 平方和计算结果:50000
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/51777.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

掌握测试的艺术:深入探索Python的pytest库

文章目录 **掌握测试的艺术:深入探索Python的pytest库**背景:为什么选择pytest?pytest是什么?如何安装pytest?5个简单的库函数使用方法1. pytest.main()2. pytest.skip()3. pytest.mark.parametrize()4. pytest.raises…

python 地理抠图

python 地理抠图 在Python中进行地理抠图,可以使用geopandas库,它是基于pandas的地理空间数据处理库。以下是一个简单的例子,展示如何根据一个多边形区域来抠出该区域内的地理数据。 首先,安装必要的库(如果尚未安装&…

力扣1425.带限制的子序列和

力扣1425.带限制的子序列和 单调队列优化dp f[i] 表示在数组的前 i 个数中进行选择,并且恰好选择了第 i 个数,可以得到的最大和状态转移:f[i] max(max(f[j]) , 0) nums[i];单调队列优化:储存前K个f[i],并且单调&…

Go 语言生产服务故障案例精析

大多数 Go 开发者都停留在简单的增删改查层面,对 Go 语言本身掌握程度不够,对常用依赖或者开源组件掌握不够,在开发项目过程中总会不经意间引入一些千奇百怪的问题,并且在遇到线上问题时往往束手无策。下面列举一些线上问题以及相应的解决思路,希望大家能从这些问题中吸取…

Debian 安装 OpenSSH 服务器

Debian 安装 OpenSSH 服务器 先查看装了没安装 OpenSSH 服务器软件包启动 SSH 服务:查看服务状态修改 SSH 配置(测试机可跳过)连接测试文件收发 lrzsz 先查看装了没 apt-cache policy openssh-server安装 OpenSSH 服务器软件包 更新软件包列…

Notion 详细使用基础教程

1. 引言 什么是Notion? Notion是一款集笔记、任务管理、知识库和协作工具于一体的生产力应用。它被广泛用于个人和团队的日常工作和学习中。与传统的生产力工具不同,Notion提供了高度的自定义功能,允许用户根据自己的需求创建独特的工作流,…

(1)冒泡排序和其优化

一 冒泡排序 1.1 冒泡排序概念 冒泡排序(Bubble Sort)是一种交换排序,基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序记录位置。 假设要对无序数列{2,3,4,5,6,7,8,1}排序:…

VastBase——执行计划

一、SQL的执行过程 1.词法分析 从查询语句中识别出系统支持的关键字、标识符、运算符、终结符等,确定每个词固有的特性。 以如下这个查询为例: select name from test_0717 where id > 1; 该SQL语句可以划分的关键字、标识符、运算符、常量等…

深入理解linux内核hung_task机制,最全!原创!

背景 最近的一个项目里,发生的问题近乎多半都是hangdetect的问题,之前一直对这种问题总是一知半解,发现主要是因为对此种维测方案(hangdetect/hangtask/watchdog/hungdetect)的理解不够深刻,而更深层次的原因是对于内核的各种机(…

vue3 setup基本使用

1. 基本概念 在 Vue 3 中&#xff0c;setup 函数是在组件创建之前调用的&#xff0c;用于初始化组件的响应式数据、计算属性、方法等。setup 函数返回的对象会作为组件的上下文提供给模板&#xff0c;模板中可以直接访问返回的属性和方法。 <template><div><p…

【python学习】-在条件分支结构中错误使用or导致其他条件分支的代码跳过并不执行

在条件分支结构中错误使用or导致其他条件分支的代码跳过并不执行 bug的来源背景代码目标第一版代码第二版代码第三版代码 问题总结后语 bug的来源背景 由于课题更换的原因&#xff0c;最近去做实验搬砖工了&#xff0c;所以大半年没有写代码&#xff0c;这两天开始处理一些代码…

使用CMake组织构建QT项目

文章目录 定位Qt安装路径查找QT包设置自动MOC、UIC和RCC包含和链接Qt库处理资源文件调整编译器设置处理UI文件多平台支持高级编译选项在使用CMake来组织和构建Qt项目时,需要注意一系列的细节以确保项目的顺利编译和运行。这些细节涉及确保Qt和CMake之间的兼容性、处理UI文件和…

HTML详解

1. 文档结构标签 <!DOCTYPE html>&#xff1a;声明文档类型&#xff0c;告诉浏览器这是一个HTML5文档。<html>&#xff1a;HTML文档的根元素&#xff0c;包含整个HTML文档。<head>&#xff1a;包含文档的元数据&#xff08;metadata&#xff09;&#xff0c…

计算多图的等价无向图的邻接链表表示

计算多图的等价无向图的邻接链表表示 摘要:一、引言二、算法思路三、伪代码实现四、C代码实现五、算法分析六、结论摘要: 在图论中,多图(Multigraph)是一种允许边重复以及存在自循环边(即一个顶点到其自身的边)的图。给定一个多图的邻接链表表示,本文旨在探讨如何构造…

Git 忽略已经提交的文件

对于未提交过的文件直接用ignore文件即可,不再赘述 对于已经提交过的文件,但是实际上不需要的,可以用git rm --cached命令 比如下图这个 .vsconfig被我误提交了或者忘了在ignore里添加了 但是我实际上不想要这个文件,那么在项目根目录打开git bash ,输入 git rm --cached .vsc…

【QNX+Android虚拟化方案】107 - QNX NFS Server + Android NFS Client 完整配置

【QNX+Android虚拟化方案】107 - QNX NFS Server + Android NFS Client 完整配置 一、QNX 侧 NFS Server 修改:ip 为 192.168.1.21.1 配置拷贝 nfsd、rpcbind 到 /mnt 目录下1.2 配置 exports1.3 为NFS 共享目录挂载镜像1.4 修 startup.sh 开机自启动 nfsd Server1.5 关闭 QNX…

分歧时间估计与被子植物的年代-文献精读43

Ad fontes: divergence-time estimation and the age of angiosperms 回归本源&#xff1a;分歧时间估计与被子植物的年代 摘要 准确的分歧时间对于解释和理解谱系演化的背景至关重要。在过去的几十年里&#xff0c;有关冠被子植物推测的分子年龄&#xff08;通常估计为晚侏罗…

RabbitMQ中的死信交换机?(RabbitMQ延迟队列有了解过吗)

延迟队列 延迟队列:进入队列的消息会被延迟消费的队列。 延迟队列死信交换机 TTL&#xff08;过期时间&#xff09; 延迟队列的使用场景:超时订单、限时优惠、定时发布 死信交换机 当一个队列中的消息满足下列情况之一时&#xff0c;可以成为死信(dead letter): 消费者使…

wpf prism 《1》、区域 、模块化

安装prism.DryIoc 修改app.xaml <prism:PrismApplication x:Class"WpfApp3.App"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local"clr-namespace:W…

求职Leetcode题目(9)

1.通配符匹配 题解&#xff1a; 其中&#xff0c;横轴为string s&#xff0c;纵轴为pattern p 这个表第(m,n)个格子的意义是:【p从0位置到m位置】这一整段&#xff0c;是否能与【s从0位置到n位置】这一整段匹配 也就是说&#xff0c;如果表格的下面这一个位置储存的是T(True)…