matlab全局变量和局部变量和子函数

全局变量和中间变量

函数文件中的变量都是局部的,即一个函数文件中定义的变量不能被另一个函数文件或其它 M 文件使用
当函数调用完毕后,该函数文件中定义的所有局部变量都将被释放,即全部被清除
函数通过输入和输出参数与其它 M 文件进行数据传递。
如果在若干个 M文件中,都把某个变量定义为全局变量,则这些函数将公共使用这一变量。所有函数都可以对它进行存取和修改操作。
全局变量的作用域是整个MATLAB工作空间,即全程有
效。定义全局变量是 M文件间传递信息的一种手段。

global 变量名列表

变量名列表中的各个变量用空格隔开,不能用逗号
在使用全局变量的所有M文件中,都要对其所使用的全局变量进行定义
全局变量给函数间的数据传递带来了方便,但却破坏了函数对变量的封装,降低了程序的可读性,因而在结构化程序设计中,全局变量是不受欢迎的。特别是当程序较大,子程序较多时,全局变量将个程序调试和维护带来不便,故不提倡使用全局变量。
例 全局变量应用示例
先建立函数文件wadd.m,该函数将输入的参数加权相加。

function f=wadd(x,y)
global ALPHA BETA
f=ALPHA*x+BETA*y;

在命令窗口中输入:

global ALPHA BETA
ALPHA=1;
BETA=2;
s=wadd(1,2)
% ex4global.m
clear; 
global a b
a=1; b=3;
y=mysquaresum(a,b);
fprintf(' a=%g, b=%g \n',a,b);
z=myproduct(a,b);
fprintf(' a=%g, b=%g\n',a,b);
% mysquaresum.m
function square_sum=mysquaresum(x,y)
global a
square_sum=x^2 + y^2; a=x+y;
% myproduct.m
function product=myproduct(x,y)
global a
product=x*y; a=x+y;

子函数

函数文件中可以含有一个或多个子函数
子函数由 function 语句引导
主函数必须位于最前面,子函数出现的次序任意
子函数只能被主函数和位于同一个函数文件中的其它子函数调用
除了用 global 定义的全局变量外,子函数中的变量都是局部变量,子函数与主函数及其它子函数之间通过输入、输出参数进行数据传递
调用一个函数时,Matlab 会首先检查该函数是否为一个子函数。

例子

% ex4subfun.m
function [avg, med] = ex4subfun(x) % 主函数 
n = length(x);
avg = mymean(x, n);
med = mymedian(x, n);

function a = mymean(x, n) % 子函数,计算平均值
a = sum(x)/n;

function m = mymedian(x, n)% 子函数,计算中值(中位数)
x = sort(x);
if rem(n, 2) == 1
   m = x((n+1)/2);
else
   m = (x(n/2)+x(n/2+1))/2;
end

函数文件举例

function printyh(n)
% 打印杨辉三角形, 本函数没有输出参数
yh=1; disp(yh); 
if n==1, return; end
yh=[1,1]; disp(yh);
if n==2, return; end
for k=3:n
  yh_old=yh;  k2=ceil(k/2);
  for l=2:k2
     yh(l)=yh_old(l-1)+yh_old(l);
  end % 只需计算前一半元素,后一半倒序赋值即可
  yh(k2+1:k)=yh(k-k2:-1:1); disp(yh);
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值