数学软件Matlab Matlab编程(函数) 1
1 数学软件 Matlab —— Matlab 编程(函数)
本讲主要内容 ■什么是函数文件 ■如何编写函数文件 ■j 递归函数 ■函数参数的可调性 ■局部变量与全局变量 ■子函数 ■函数句柄、内联函数、匿名函数 2
2 本讲主要内容 什么是函数文件 如何编写函数文件 递归函数 函数参数的可调性 局部变量与全局变量 子函数 函数句柄、内联函数、匿名函数
Matlab编程 口M文件根据调用方式的不同可以分为两类: ● Script:脚本文件/命令文件 ●直接输入文件名即可运行 ●Function:函数文件 ●供其它M文件调用,通常带输入参数和输出参数 3
3 M 文件根据调用方式的不同可以分为两类: Script:脚本文件/命令文件 Function:函数文件 Matlab 编程 直接输入文件名即可运行 供其它M文件调用,通常带输入参数和输出参数
函数文件 ▣函数文件一般格式 function输出形参列表=函数名(形参列表) %注释说明部分(可选) 函数体语句(必须) ●第一行为引导行,表示该M文件是函数文件 ●函数名的命名规则与变量名相同(必须以字母开头) 。当输出形参多于一个时,用方括号括起来 ● 函数文件名必须与函数名一致 函数必须是一个单独的M文件 4
4 function 输出形参列表=函数名(形参列表) % 注释说明部分(可选) 函数体语句(必须) 第一行为引导行,表示该 M文件是函数文件 函数名的命名规则与变量名相同 ( 必须以字母开头 ) 当输出形参多于一个时,用方括号括起来 函数文件 函数文件一般格式 函数文件名必须与函数名一致 函数必须是一个单独的 M文件
编程示例 例:将华氏温度转化为摄氏温度: C= 9f-32) ●脚本文件(E2cs.m): clear; f=input('Please input f:'); c=5*(f-32)/9; ●函数文件(E2cf.m): function c f2cf(f) c=5*(f-32)/9;
5 函数文件(f2cf.m): 5 ( 32) 9 例:将华氏温度转化为摄氏温度: c f = − 编程示例 clear; f=input('Please input f:'); c=5*(f-32)/9; 脚本文件 (f2cs.m): function c = f2cf(f) c=5*(f-32)/9;
函数文件举例 例:交换两个变量的值myswap.m function [a,b]myswap(x,y) % swap x and y a =y5 b xj 。有两个输入参数和两个输出参数 6
6 函数文件举例 function [a,b] = myswap(x,y) % swap x and y a = y; b = x; 例:交换两个变量的值 myswap.m 有两个输入参数和两个输出参数
函数文件举例 例:打印杨辉三角形printyh,m function printyh(n) %打印杨辉三角形,本函数没有输出参数 yh 1;disp(yh); if n==1,return;end yh [1,1];disp(yh); for k =3 n yh_old yh;k2 ceil(k/2); for i 2 k2 yh(i)=yh_old(i-1)+yh_old(i); end yh(k2+1:k)=yh(k-k2:-1:1);disp(yh)j end ●可以没有输入参数或输出参数 7
7 function printyh(n) % 打印杨辉三角形, 本函数没有输出参数 yh = 1; disp(yh); if n==1, return; end yh = [1,1]; disp(yh); for k = 3 : n yh_old = yh; k2 = ceil(k/2); for i = 2 : k2 yh(i) = yh_old(i-1) + yh_old(i); end yh(k2+1:k) = yh(k-k2:-1:1); disp(yh); end 函数文件举例 例:打印杨辉三角形 printyh.m 可以没有输入参数或输出参数
函数调用 口函数调用的一般格式 输出实参列表=函数名(输入实参列表) ●函数调用时,实参的顺序应与函数定义时形参的顺序一致 ●实参与形参之间的结合是通过值传递实现的 ·函数可以嵌套调用,即一个函数可以被其它函数调用, 甚至可以被它自身调用,此时称为递归调用 ●函数所传递的参数具有可调性,Matlab用两个永久变量 nargin和nargout分别记录调用该函数时的输入实参 和输出实参的个数 8
8 函数调用的一般格式 输出实参列表=函数名(输入实参列表) 函数调用时,实参的顺序应与函数定义时形参的顺序一致 实参与形参之间的结合是通过值传递实现的 函数可以嵌套调用,即一个函数可以被其它函数调用, 甚至可以被它自身调用,此时称为递归调用 函数所传递的参数具有可调性,Matlab 用两个永久变量 nargin 和 nargout 分别记录调用该函数时的输入实参 和输出实参的个数 函数调用
递归函数举例 例:利用函数的递归调用计算! 1, n=1 =:n-g3》 %函数文件myfactor.m function y=myfactor(n) if(n<=1) y=1; else y=n*myfactor(n-1)3 end 9
9 1, 1 ! ( 1)!, 1 n n nn n = = ⋅− > % 函数文件 myfactor.m function y=myfactor(n) if (n<=1) y=1; else y=n*myfactor(n-1); end 例:利用函数的递归调用计算 n! 递归函数举例
递归函数举例 例:计算1!+2!+.+10! % main.m % clear; s=0; n=10; for i =1:n s =s myfactor(i); end fprintf('s=‰g\n',s) 10
10 % main.m % clear; s = 0; n = 10; for i = 1 : n s = s + myfactor(i); end fprintf(' s=%g \n',s) 例:计算 1! + 2! + … + 10! 递归函数举例