[初学笔记]matlab中主函数和次函数的建立和调用(嵌套与不嵌套),全局变量global与子函数的使用

1 全局变量和子函数

使用全局变量的话,那么无论在主函数和子函数中,都是通用的一个定义的变量。并且global所定义的全局变量应当现在主函数中进行定义。

如果使用了global,那么主函数和子函数应当分开在两个m文件里头,二者不能同时放在一个m文件,不然无法调用

使用了global的主函数,其格式中并不需要有function


对了为了区分其他的变量,全局变量一般是用大写的


下面是之前做倒计时的时候看到的一个例子,现在继续引用。当时也想不明白为什么要分开两个m文件,后来看到易百教程里面的例子也是一样的

这大概就是global的使用方法吧

因此使用global的时候,我都会称呼其为主程序和子程序。。。。毕竟书上并没有把全局变量的内容划分到主函数和子函数的章节里面。。。也有可能我参考的书有点太旧了。。。


% 主程序
nowt = num2cell(fix(clock));
addt = cell(1,6);
addt = {0,0,0,0,0,0 };
addt{1,6} = input('\n\n count down from____sec\n\n'); %% 通过input你想要倒数的秒数,即可以倒数
a = cell2mat(nowt);
b = cell2mat(addt);
count = a + b; %% 这里的count最后会用于下面的倒数,是double格式
global Endtime
Endtime=[count];
t = timer('StartDelay', 0,'Period',0.05,'TasksToExecute', 10000,...
          'ExecutionMode','fixedRate');
t.TimerFcn = {@mycallback}; %% 引入function 子函数
start(t)


%子函数
function mycallback(t,events,arg_str)
%mycallback.m
global Endtime
Lefttime=etime(Endtime,clock);
if Lefttime<0
   stop(t);
   disp('Times up!!')
   return
end
LeftMillionSeconds=round(rem(Lefttime,1)*1000);
LeftSeconds=floor(rem(Lefttime,60));
LeftMinutes=floor(rem(Lefttime/60,60));
% r=sprintf('剩余时间:%d分%d秒%d',LeftMinutes,LeftSeconds,LeftMillionSeconds);
% disp(r)


在易百教程上的例子是这样的

先创建一个m文件

function avg = average(nums)
global TOTAL
avg = sum(nums)/TOTAL;
end


然后再在新的script里面输入

global TOTAL;
TOTAL = 10;
n = [34, 45, 25, 45, 33, 19, 40, 34, 38, 42];
av = average(n)


然后run

第二个script里头的东西,global TOTAL


可见在子函数中定义了global的变量,然后在主程序中又调用了子函数,因此只要用global就可以直接跑两个程序了




2 主函数 和 子函数

主函数和子函数是写在同一个m文件中的。那网站上也有人提供了如果二者不在同一个m文件的话,addpath就可以了。addpath(genpath(pwd))


主函数和子函数的调用又分为嵌套型的和不嵌套型的


(1)非嵌套的 主函数和子函数



(2)嵌套的 主函数 和 子函数







  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值