[初学笔记]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)嵌套的 主函数 和 子函数







你可能感兴趣的:(Matlab学习)