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;

归根结底,毕竟是一个函数,在此文件运行完之后,函数生命周期结束,所有的变量都会消失;个人不建议采用这种方式;

如下所示:

案例2:

如果文件开头没有 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文件名相同,如果不同,则调用时应该使用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、非嵌套定义:

需要注意的是,调用的外部文件,如果文件内部,存在调用子函数的情况,则文件内的主调函数和被调函数有两种形式,但是必须统一,如下所示:

方式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)

  • 8
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值