当前位置:
文档之家› MATLAB课件第四章20140415
MATLAB课件第四章20140415
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
⑴ 建立函数文件 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
用来实现控制转移和相互之间的数据传递。
1.函数调用
在MATLAB中,调用函数的常用形式:
[输出参数1,输出参数2…]=函数名(输入参数1,输
入参数2)
函数调用可以嵌套,一个函数可以调用别的函数,甚
至调用它自己(递归调用)
例:给定两个实数a,b,一个正整数n,给出k=1,2…n时 所有的(a+b)^k和(a-b)^k
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);
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
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];
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];
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
例:编写一个函数文件,求向量的平均值,并调用此函数 文件求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)
函数文件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) charrayfor循环
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内的偶数
3)命令文件的文件名的保存是以字母打头,后面可以
接字母的下划线等作为文件名,而函数文件的文件名
必须与函数名同名。
函数调用和参数传递
MATLAB中的函数调用及参数传递比较复杂,但是这
两种工作又是编写高质量的M文件所不可少的,一个 较大的计算任务可以分成若干个较小的任务,这意味
着, 一个程序可以由若干个函数组成,并通过函数调
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,
tic 和toc 合在一起工作如一个跑表。在函数
tic 中,变量TICTOC 说明为全局的,因此它 的值由调用函数clock 来设定。以后在函数 toc 中,变量TICTOC 也说明为全局的,让toc 访问存储在TICTOC 中的值。利用这个值, toc 计算自执行函数tic以来消逝的时间。值得 注意的是,变量TICTOC存在于tic和toc的工 作空间,而不在MATLAB工作空间。
例:利用函数的递归调用,求n!
function f =factor(n) if n<=1 f=1;
else
f=factor(n-1)*n; end
2.参数传递
MATLAB在函数调用上有一个与众不同之处,函数所传递的参数
具有可调性,凭借这种特性,一个函数就可以完成多种功能。
如果变量说明是全局的,函数可以与其它函数、
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)
例:编写函数文件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