- 27
- 0
- 约7.62千字
- 约 40页
- 2017-01-07 发布于北京
- 举报
% 函数文件 myfun5.m function f=myfun5(n) if (n=1) f=1; else f=n*myfun5(n-1); end % main.m % 计算 s=1!+2!+3!+4!+5! % clear; s=0; for i=1:5 s=s+myfactor(i); end fprintf( s=%g \n,s) 例:利用函数的递归调用计算 n! 递归函数举例 函数所传递的参数具有可调性,Matlab 用两个永久变量 nargin 和 nargout 分别记录调用该函数时的输入实参和输出实参的个数。 参数的可调性举例 function out=ex4argin(a,b) if (nargin==1) out=a; elseif (nargin==2) out=a*b; end function [p,q]=ex4argout(a,b) if (nargout==1) p=a+b; elseif (nargout==2) p=a+b; q=a-b; end 函数通过输入和输出参数与其它 M 文件进行数据传递。 当函数调用完毕后,该函数文件中定义的所有局部变量都将被释放,即全部被清除。 如果在若干个 M文件中,都把某个变量定义为全局变量,则这些函数将公共使用这一变量。所有函数都可以对它进行存取和修改操作。 函数文件中的变量都是局部的,即一个函数文件中定义的变量不能被另一个函数文件或其它 M 文件使用。 全局变量与局部变量 定义全局变量是 M文件间传递信息的一种手段。 变量名列表中的各个变量用空格隔开,不能用逗号! 全局变量给函数间的数据传递带来了方便,但却破坏了函数对变量的封装,降低了程序的可读性,因而在结构化程序设计中,全局变量是不受欢迎的。特别是当程序较大,子程序较多时,全局变量将个程序调试和维护带来不便,故不提倡使用全局变量。 global 变量名列表 全局变量的定义 在使用全局变量的所有M文件中,都要对其所使用的全局变量进行定义。 程序示例 % 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) 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 会首先检查该函数是否为一个子函数。 子函数 function [avg, med] = mysubfun(x) % 主函数 n = length(x); avg = mean(x, n); med = median(x, n); function a = mean(x, n) % 子函数,计算平均值 a = sum(x)/n; function m = median(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 编程练习 编写一个使用循环计算 n! 的函数。 当输入一个参数时,计算它的平方 当输入两个参数时,计算它们的平方的和 当输入参数超过三个时,输入错误信息,并返回 编写一个函数,要求实现以下功能: 首先由计算机随机产生一个 [1,100] 之间的一个整数,然后由用户猜测所产生的这个数。根据用户猜测的情况给出不同的提示,如果猜测的数大于产生的数,则显示 High ,小于则显示 Low ,等于则显示 You win!,同时退出游戏。用户最多有 7 次机会。 编程练习 猜数游戏 复习:Matlab 编程 Matlab 编程简介 Matlab 作为一种广泛应用于科学计算的工具软件,不仅具有强大的数值计算、符号计算、矩阵运算能力和丰富的绘图功能,同时也具有和 C、FORTRAN 等高级语言一
原创力文档

文档评论(0)