MATLAB课件第四章20140415
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
function y=sinc(x) %SINC Sin(pi*x)/(pi*x) function. % SINC(X) returns a matrix whose elements are
the sinc of the elements % of X, i.e. % y = sin(pi*x)/(pi*x) if x ~= 0 % =1 if x == 0 y=ones(size(x)); i=find(x); y(i)=sin(pi*x(i))./(pi*x(i));
function tic % TIC Start a stopwatch timer. % The sequence of commands % TIC % any stuff % TOC % prints the time required for the stuff. % % See also TOC, CLOCK, ETIME,
3)命令文件的文件名的保存是以字母打头,后面可以
接字母的下划线等作为文件名,而函数文件的文件名
必须与函数名同名。
函数调用和参数传递
MATLAB中的函数调用及参数传递比较复杂,但是这
两种工作又是编写高质量的M文件所不可少的,一个 较大的计算任务可以分成若干个较小的任务,这意味
着, 一个程序可以由若干个函数组成,并通过函数调
linspace函数
function y = linspace(d1, d2, n) %LINSPACE Linearly spaced vector. % LINSPACE(X1, X2) generates a row vector of
100 linearly % equally spaced points between X1 and X2. if nargin == 2 n = 100; end y = [d1+(0:n-2)*(d2-d1)/(floor(n)-1) d2];
局部变量和全局变量
局部(Local)变量:它存在于函数空间内部 的中间变量,产生于该函数的运行过程中,其 影响范围也仅限于该函数本身 。
全局(Global)变量:通过 global 指令, MATLAB也允许几个不同的函数空间以及基 本工作空间共享同一个变量,这种被共享的变 量称为全局变量。
例:编写函数文件mmin,使该文件输出两个变量,第一 一个变量返回矩阵中的单个最小值。第二个输出参量, 返回单个最小值的行和列的下标。
function [m , i]=mmin(a) % MMIN Matrix minimum value. % MMIN(A) returns the minimum value in the matrix A % [M,I] = MMIN(A) in addition returns the indices of % the minimum value in I = [row col]. % Copyright (c) 1996 by Prentice Hall,Inc. if nargout==2, % return indices [m , i]=min(a) ; [m , ic]=min(m) ; i=[i(ic) ic] ; else m=min(min(a)); end
例:编写一个函数文件,求向量的平均值,并调用此函数 文件求1:100的平均值
function y=vectoraverage(a) %向量元素的平均值 %语法:其中a为输入变量,当输入a非向量时,给出
错误信息。 [m,n]=size(a) if (~(m==1︱n==1))︱(m==1&n==1) error (‘input must be a vector’) end y=sum(a)/length(a)
MATLAB程序结构
for循环
for 循环变量=初值:增量:
while循环
while 条件式 循环体语句组 end
终值
循环体语句组 end
for i=1:10; y(i)=i; end; y
for i=1:10; y=i; end; y
例:利用for循环产生0~20内的偶数
如果变量说明是全局的,函数可以与其它函数、
MATLAB工作空间和递归调用本身共享变量。为 了在函数内或MATLAB工作空间中访问全局变量, 在每一个所希望的工作空间,变量必须说明是 全局的。
例: 全局变量应用示例
全局变量用global命令定义,格式为: global 变量名 例: 先建立函数文件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)
was used. % t = TOC; saves the elapsed time in t, instead of printing it out. % % See also TIC, ETIME, CLOCK, CPUTIME. % Copyright (c) 1984-94 by The MathWorks, Inc. % TOC uses ETIME and the value of CLOCK saved by TIC. global TICTOC if nargout < 1 elapsed_time = etime(clock,TICTOC) else t = etime(clock,TICTOC); end
fliplr函数
function y = fliplr(x)
% FLIPLR Flip matrix in the left/right direction. % FLIPLR(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 % % See also FLIPUD, ROT90. [m, n] = size(x); y = x(: , n : -1 : 1);
函数文件charray.m: function fout=charray(a,b,c) if nargin==1 fout=a; else if nargin==2 fout=a+b; else if nargin==3 fout=(a*b*c)/2; end 命令文件mydemo.m: x=[1:3]; y=[1;2;3]; charray(x) charray(x,y')
例:利用函数的递归调用,求n!
function f =factor(n) if n<=1 f=1;
else
f=factor(n-1)*n; end
2.参数传递
MATLAB在函数调用上有一个与众不同之处,函数所传递的参数
具有可调性,凭借这种特性,一个函数就可以完成多种功能。
tic 和toc 合在一起工作如一个跑表。在函数
tic 中,变量TICTOC 说明为全局的,因此它 的值由调用函数clock 来设定。以后在函数 toc 中,变量TICTOC 也说明为全局的,让toc 访问存储在TICTOC 中的值。利用这个值, toc 计算自执行函数tic以来消逝的时间。值得 注意的是,变量TICTOC存在于tic和toc的工 作空间,而不在MATLAB工作空间。
例:确定做某种计算所用的时间
tic; y=inv(rand(100,100));toc
编写程序实现rot90函数功能
function B = rot90(A,k) [m,n] = size(A); if nargin == 1
用来实现控制转移和相互之间的数据传递。
1.函数调用
在MATLAB中,调用函数的常用形式:
[输出参数1,输出参数2…]=函数名(输入参数1,输
入参数2)
函数调用可以嵌套,一个函数可以调用别的函数,甚
至调用它自己(递归调用)
例:给定两个实数a,b,一个正整数n,给出k=1,2…n时 所有的(a+b)^k和(a-b)^k
传递参数数目的可调性来源于以下两个MATLAB永久变量。
nargin %函数体内的给出调用该函数时的输入参数数目。 nargout %函数体内的给出调用该函数时的输出参数数目。
只要在函数文件中包含这两个变量,就可以准确地知道该函数文
件被调用时的输入参数和输出参数的数目,从而决定如何处理。
例: nargin用法示例
for i=0:2:20 a(i)=i end for i=0:2:20 a(i/2+1)=i end
例:求 i 的和
i 1
100
mysum=0; for i=1:100 mysum=mysum+i;
mysum=0;i=1; while (i<=100) mysum=mysum+i;
CPUTIME. % Copyright (c) 1984-94 by The MathWorks, Inc. % TIC simply stores CLOCK in a global variable. global TICTOC TICTOC = clock;
function t = toc % TOCRead the stopwatch timer. % TOC, by itself, prints the elapsed time since TIC
k = 1; if length(k)~=1 end k = rem(k,4);
else
error('k must be a scalar');
end
if k == 1 A = A.'; B = A(n:-1:1,:); elseif k == 2 B = A(m:-1:1,n:-1:1); elseif k == 3 B = A(m:-1:1,:); B = B.'; else B = A; end
logspace函数
function y = logspace(d1, d2, n) if nargin == 2
n = 50; end if d2 == pi d2 = log10(pi); end y = (10).^ [d1+(0:n-2)*(d2-d1)/(floor(n)-1), d2];
第四章
MATLAB语言结构及编程
M文件形式 MATLAB程序结构
Biblioteka Baidu
M文件形式
命令文件 函数文件
命令文件和函数文件的不同
1)命令文件是一串命令的集合,而函数文件是以
function打头的文件,它的作用是建立一个函数。
2)命令文件中的变量为全局变量,而函数文件中的变
量为局部变量。
⑴ 建立函数文件 function [out1,out2]=power(a,b,n) %power.m (a+b)^n (a-b)^n out1=(a+b)^n; out2=(a-b)^n; ⑵建立调用上述函数文件的命令example.m a=input(‘please input a=’); b=input(‘please input b=’) addpow=zeros(1,10); subpow=zeros(1,10); for k=1:10 [addpow(k),subpow(k)]=power(a,b,k); end addpow subpow