当前位置: 首页 > article >正文

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)
            % 内部函数访问外部函数的局部变量z
            iResult2 = iNum3 + iNum4 + iResult1;
        end
        
        function 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.kler.cn/a/291904.html

相关文章:

  • 蓝桥杯备赛(持续更新)
  • 问:说说SpringDAO及ORM的用法?
  • 谷粒商城のRedisESRabbit MQ集群
  • 了解 Solon MVC 的参数注入规则
  • SpringBoot使用AspectJ的@Around注解实现AOP全局记录接口:请求日志、响应日志、异常日志
  • Vue3 provide 和 inject的使用
  • WEB服务器-Tomcat
  • PhpStorm中配置调试功能
  • golang学习笔记02——gin框架及基本原理
  • 【生日视频制作】星空木屋霓虹灯爱心形照片AE模板修改文字软件生成器教程特效素材【AE模板】
  • 2024国赛数学建模A题思路模型
  • 学习记录:js算法(二十一):字符串的排列、替换后的最长重复字符
  • C# 去掉字符串最后一个字符的5种方法
  • vue动画特效
  • webpack加载器、demo和核心工作原理
  • 一个专门解决信创加密的方案:信创沙箱
  • 【代码随想录训练营第42期 Day46打卡 - 回文问题 - LeetCode 647. 回文子串 516.最长回文子序列
  • AI短剧时代来临,用ai生成短剧的工具?AI文字生成短视频工具系统搭建开发,AI前景趋势怎么样?
  • HTTP和HTTPS的区别?哪一个更适合你的网站?
  • 快速理解Hashtable与HashMap的区别(超简单)
  • 基于udp的socket网络编程
  • TypeScript关键词Parameters和ReturnType
  • Spring Coud Spring Clou Alibaba
  • dp练习【4】
  • HarmonyOS 延迟加载(lazy import)
  • 利用智能外呼机器人,重塑营销版图