第五讲 Matlab程序设计基础

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

M 文件
用 Matlab 语言编写的程序称为 M 文件。 M 文件以 .m 为扩展名。
M 文件是由若干 Matlab 命令组合在一起构成的,它 可以完成某些操作,也可以实现某种算法。事实上,Matlab 提供的内部函数以及各种工具箱,都是利用 Matlab 语言开 发的 M 文件。大家也可以结合自己的工作需要,开发自己 的程序或工具箱。
absx绝对值sqrtx开平方conjz共轭复数roundx四舍五入floorx舍去正小数ratx化为分数表示gcdxy最大公因数expx自然指数logxe为底的对数log10x10为底的对数anglez复数z的相角realz复数z的实部imagz复数z的虚部fixx舍去小数取整ceilx加入正小数取整signx符号函数remxy求x除以y的余数lcmxy最小公倍数pow2xmatlab常用函数介绍取整和求余函数modxyremxy当两操作数异号时remxymodxyymatlabmatlab编程入门matlabmatlab作为一种广泛应用于科学计算的工具软件不仅具有强大的数值计算符号计算矩阵运算能力和丰富的绘图功能同时也具有和cfortran等高级语言一样进行程序设计
function product=myproduct(x,y) global a product=x*y; a=x+y;
子函数
函数文件中可以含有一个或多个子函数 子函数由 function 语句引导 主函数必须位于最前面,子函数出现的次序任意 子函数只能被主函数和位于同一个函数文件中的其它子 函数调用 除了用 global 定义的全局变量外,子函数中的变量 都是局部变量,子函数与主函数及其它子函数之间通过输 入、输出参数进行数据传递 调用一个函数时,Matlab 会首先检查该函数是否为一个 子函数。
angle(z) real(z) imag(z) fix(x) ceil(x) sign(x) rem(x,y) lcm(x,y) pow2(x)
复数z的相角 复数z的实部 复数z的虚部 舍去小数取整 加入正小数取整 符号函数 求x除以y的余数 最小公倍数 以2为底的指数
log2(x) 以2为底的对数
% main.m % 计算 s=1!+2!+3!+4!+5! % s=0; for i=1:5 s=s+factor(i); end fprintf(' s=%g \n',s)
全局变量与局部变量
函数文件中的变量都是局部的,即一个函数文件中定 义的变量不能被另一个函数文件或其它 M 文件使用。 当函数调用完毕后,该函数文件中定义的所有局部变量 都将被释放,即全部被清除。
clear; % 清除当前工作空间中的变量 f=input('Please input Fahrenheit temperature:'); c=5*(f-32)/9; fprintf('The centigrade temperature is %g\n',c);
在命令窗口中输入 f2cs,即可执行该 M 文件。
函数文件举例
myfliplr.m
function y = myfliplr(x) % returns X with row preserved and columns % flipped in the left/right direction % % X = 1 2 3 becomes 3 2 1 % 4 5 6 6 5 4 % num_col=size(x,2); % 取 x 的列数 y = x(:,num_col:-1:1);
函数通过输入和输出参数与其它 M 文件进行数据传递。
如果在若干个 M文件中,都把某个变量定义为全局变量, 则这些函数将公共使用这一变量。所有函数都可以对它进行 存取和修改操作。 定义全局变量是 M 文件间传递信息的一种手段。
全局变量的定义
global 变量名列表 变量名列表中的各个变量用空格隔开,不能用逗号! 全局变量给函数间的数据传递带来了方便,但却破 坏了函数对变量的封装,降低了程序的可读性,因而 在结构化程序设计中,全局变量是不受欢迎的。特别 是当程序较大,子程序较多时,全局变量将个程序调 试和维护带来不便,故不提倡使用全局变量。
脚本文件运行后,文件中所产生的所有变量都驻留 在 Matlab 当前工作空间,可以用 whos 查看。
脚本文件练习
【例】脚本文件编辑与调用示例:求圆的面积
%脚本示例 且圆形面积 r_area.m r=3.33; % r为圆形面积 s=(r^2)*pi % s为圆形面积
函数文件
相对于脚本文件来说,函数文件稍显复杂。 从外观上看来,函数文件只是在对应脚本文件的基 础上,在文件中代码开始处多添加了一行函数定义 行, 函数文件都是以函数声明行“function…” 作为开始,其实质是:用户往MATLAB函数库里边 添加的子函数,即函数M文件中的变量都是局部变 量,而非全局变量(除非使用特别形式声明),但 是在函数运行期间失效,函数运行完毕之后,其定 义的变量将从工作区间中清除,对于这一点,大家 要注意和脚本文件的区别。
程序示例
clear; global a,b); fprintf(' a=%g, b=%g \n',a,b); z=myproduct(a,b); fprintf(' a=%g, b=%g\n',a,b); function square_sum=mysquaresum(x,y) square_sum=x^2 + y^2;
————MATLAB 常用函数————
MATLAB的函数
sin asin cos acos tan atan cot acot sec asec csc acsc 正弦函数 反正弦函数 余弦函数 反余弦函数 正切函数 反正切函数 余切函数 反余切函数 正割函数 反正割函数 余割函数 反余割函数 sinh asinh cosh acosh tanh atanh sech asech csch acsch coth acoth 双曲正弦函数 反双曲正弦函数 双曲余弦函数 反双曲余弦函数 双曲正切函数 反双曲正切函数 双曲正割函数 反双曲正割函数 双曲余割函数 反双曲余割函数 双曲余切函数 反双曲余切函数
函数文件可以包含输入变量,并把结果传送给输 出变量。
两者的简单介绍及区别如表所示。
M 文件的建立与打开
M 文件是一个文本文件,可以用任何文本编辑器来建 立和编辑,通常使用 Matlab 自带的 M 文件编辑器。 (1)新建一个 M 文件
菜单操作 ( File New M-File ) 命令操作 ( edit M 文件名 ) 命令按钮 ( 快捷键 )
(3)不论是函数文件还是脚本文件,其中的变量都必须遵守 前面所讲的有关变量的规定,函数文件中的变量除特别声明外, 都是局部变量。 (4)函数文件名必须与函数名一致 (5)函数文件包含输入参数和输出参数,但在调用函数文件时, Matlab只允许比文件标定的个数少的输入、输出函数。
函数调用
函数调用的一般格式
(2)打开已有的 M 文件
菜单操作 ( File Open ) 命令操作 ( edit M 文件名 ) 命令按钮 ( 快捷键 ) 双击 M 文件
脚本文件举例
例:编写一个脚本文件将华氏温度转化为摄氏温度 5 c ( f 32) 9 新建一个 M 文件 f2cs.m,内容如下:
利用 Matlab 的程序控制功能,可以将有关 Matlab 命令编成程序存储在一个文件中(M 文件),然后在命 令窗口中运行该文件,Matlab 就会自动依次执行文件中 的命令,直到全部命令执行完毕。 在 Matlab 程序设计中,要充分利用 Matlab 数据结构 的特点,提高编程效率。
M 文件根据调用方式的不同可以分为两类:
Script:脚本文件/命令文件(Matlab scripts)) Function:函数文件
M文件分类
M文件可分为脚本文件(MATLAB scripts)和 函数文件(MATLAB functions)。
脚本文件是包含多条MATLAB命令的文件;
函数文件
脚本文件只是将一系列相关代码结合封装, 没有输入参数和输出参数,即不自带参数,也不 一定要返回结果。而对于函数文件,尽管有一些 函数文件不带参数,文件中一般使用一些全局变量 来实现与外界和其他函数之间的数据交换,多数函 数文件一般都有输入变量和输出变量,即自带参 数,并见有返回结果,这样可以更好地把整个程序 连为整体.
取整和求余函数
当X与Y同号时, mod(X,Y)=rem(X,Y)
当两操作数异号时, rem(X,Y) =mod(X,Y)-Y
第五讲 Matlab程序设计基础
Matlab 编程入门
Matlab 编程简介
Matlab 作为一种广泛应用于科学计算的工具软件,不仅 具有强大的数值计算、符号计算、矩阵运算能力和丰富的 绘图功能,同时也具有和 C、FORTRAN 等高级语言一样 进行程序设计。
变量检测函数
为了提高用户传递参数的效率和进一步优化程序设计的流程, MATLAB提供了多种函数,用于变量检测、传递以及变长度 输入输出变量。函数的调用格式和功能如下。 nargin:获取函数体内实际输入变量个数。 nargout:获取函数体内实际输出变量个数。 nargin(‘fun’):获取函数“fun”中标称的输入变量个数。
函数文件名必须与函数名一致 以百分号开始的语句为注释语句
函数文件举例
【例】编写函数文件求小于任意自然数n的 Fibonacci数列各项。
function f=ffib(n) %用于求Fibonacci数列的函数文件 %f=ffib(n) 将以上函数文件以文件名 f=[1,1]; ffib.m 存 盘 , 然 后 在 MATLAB 命 令 窗 口 输 入 以 i=1; 下 命 令 , 可 求 小 于 2000 while f(i)+f(i+1)<n 的Fibonacci数。 f(i+2)=f(i)+f(i+1); >>ffib(2000) i=i+1; end
nargout(‘fun’):获取函数“fun”中标称的输出变量个数。
递归函数举例
例:利用函数的递归调用计算 n!
1, n1 n! n ( n 1)!, n 1
% 函数文件 factor.m function f=factor(n) if (n<=1) f=1; else f=n*factor(n-1); end
————MATLAB 常用函数介绍————
abs(x) 绝对值 sqrt(x) 开平方 conj(z) 共轭复数 round(x) 四舍五入 floor(x) 舍去正小数 rat(x)化为分数表示 gcd(x,y)最大公因数 exp(x) 自然指数 log(x) e为底的对数 Log10(x)10为底的对数
函数文件与脚本文件
(1)函数文件与脚本文件在编写格式、取名规则、调用方法 等方面基本类似,不同的是函数文件被调用时,matlab会专 门分配一个临时空间,称为函数工作空间(Function workspace),用于存储函数执行过程中的中间变量,当函数文件 被调用完成时,这个空间将被matlab收回,显然空间中的中 间变量也被擦出,函数空间是独立和临时的,matlab允许分 配任意多个这样的空间给任意多个函数文件使用,这与脚本文 件存在着本质区别。 (2)如果函数文件中调用脚本文件,那么脚本文件产生的所有 变量都存储与此函数工作空间,而非matlab基本工作空间
子函数示例
function [avg, med] = ex4subfun(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
函数文件
函数文件由 function 语句引导 function 输出形参列表=函数名(输入形参列表) % 注释说明部分(可选) 函数体语句(必须)
第一行为引导行,表示该 M 文件是函数文件
函数名的命名规则与变量名相同 ( 必须以字母开头 ) 当输出行参多于一个时,用方括号括起来
函数必须是一个单独的 M 文件
输出实参列表 = 函数名(输入实参列表)
函数调用时,实参的顺序应与函数定义时的形参的顺序 一致。 函数可以嵌套调用,即一个函数可以被其它函数调用, 甚至可以被它自身调用,此时称为递归调用。 函数所传递的参数具有可调性,Matlab 用两个永久变 量 nargin 和 nargout 分别记录调用该函数时的输入 实参和输出实参的个数。
相关文档
最新文档