matlab中.m内的子函数和.m函数 |
您所在的位置:网站首页 › gui的m文件怎么写子函数 › matlab中.m内的子函数和.m函数 |
一、.m内部的子函数:
在一个m文件中写多个函数,每个函数都以function开始,结束可以带end,也可以不带(这种情况下,出现另一个function或者到达文件结尾表明前一个function结束). 案例1:如果文件开头有 function + 名字;即每个子函数都不带end,即 function + name function name …… …… function sub_main clc clear all; % 声明全局变量a,b,c global a b c %变量赋值 a=1; b=2; c=3; d=10; disp(10); e=add(d) function w=add(d) %函数内也要声明全局变量 global a global b global c w=(a+b+c)/d;归根结底,毕竟是一个函数,在此文件运行完之后,函数生命周期结束,所有的变量都会消失;个人不建议采用这种方式; 如下所示: 如果文件开头没有 function + 名字;即每个子函数都为: function name …… …… end % function sub_main clc;clear all; % 声明全局变量a,b,c global a b c %变量赋值 a=1; b=2; c=3; d=10; disp(10); e=add(d) function w=add(d) %函数内也要声明全局变量 global a global b global c w=(a+b+c)/d; end脚本运行完毕后,脚本中函数的变量会显示:
第一个函数作为主函数,可以从该m文件外部调用,其它函数都是局部函数,只能被m文件中的函数调用。主函数命名最好和m文件名相同,如果不同,则调用时应该使用m文件名(不带扩展名)。 案例1:函数内部存在子函数,并且在外部调用.m文件!主调函数: clear;clc;close all; %调用其他.m文件,必须是.m的保存名!而不是.m内部的函数名; %例如此例中:function sub_main test_function;被调函数: function sub_main % clc;clear all; % 声明全局变量a,b,c global a b c %变量赋值 a=1; b=2; c=3; d=10; disp(10); e=add(d) function w=add(d) %函数内也要声明全局变量 global a global b global c w=(a+b+c)/d;即:必须写:test_function; 写function sub_main 是错误的! 需要注意的是,调用的外部文件,如果文件内部,存在调用子函数的情况,则文件内的主调函数和被调函数有两种形式,但是必须统一,如下所示: 方式1 方式2 function name function name …… …… …… …… end subfunction name subfunction name …… …… …… …… end 2、嵌套定义:存在的问题就是:一定要注意变量的命名,避免出现问题。 方式1 方式2 function mainFunc() function mainFunc() …… …… a = myfunc1(); a = myfunc1(); function myfunc1() ... ... end end function myfunc1() …… ... end end三、脚本文件和函数文件 1、脚本文件: 脚本文件可以理解为简单的M文件,脚本文件中的变量都是全局变量。函数文件是在脚本文件的基础之上多添加了一行函数定义行,其代码组织结构和调用方式与对应的脚本文件截然不同。 脚本文件只是将一系列相关的代码结合封装,没有输入参数和输出参数,即不自带参数,也不一定要返回结果。而多数函数文件一般都有输入和输出变量,并见有返回结果。 M脚本文件创建的每个变量都会保存到Matlab工作区, 2、函数文件:函数文件是以函数声明行“function...”作为开始的,其实质就是用户往MATLAB函数库里边添加了子函数,函数文件中的变量都是局部变量,除非使用了特别声明。函数运行完毕之后,其定义的变量将从工作区间中清除(声明周期结束)。 M函数文件只有输出结果才保存到Matlab工作区中; 注意: (1)函数文件的命名要使用文件内主函数声明的名称,否则出错。现在高版本matlab中文件命名可以与主函数名不一样。 (2)函数内部可以嵌套子函数并为该文件的主函数调用,只需将子函数写在主函数代码后面。 (3)一个函数可以有多个输入输出。如function [y1,y2]=myfun(x1,x2,x3) 一般来说matlab中执行同样的任务使用函数文件比脚本文件的效率高。 参考: 如何在1个Matlab m文件中定义多个函数直接运行 (Matlab基本知识----连载之六)M脚本文件和M函数文件、函数句柄(转,介绍的不错 Matlab中函数和脚本的区别 matlab中同一文件定义子函数的方法(zhuan) |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |