Switch语句
通用格式:
SWITCH switch_expr
CASE case_expr,
statement, ..., statement
CASE {case_expr1, case_expr2, case_expr3,...}
statement, ..., statement
...
OTHERWISE,
statement, ..., statement
END
例子:对输入的成绩进行判别
grade=yesinput('请输入成绩',0,[0 100]);
grade=fix(grade/10)
switch grade
case {9,10},
sprintf('成绩优异')
case {8},
sprintf('成绩优秀')
case {6,7},
sprintf('成绩一般')
otherwise,
sprintf('还没有及格')
end
1.3.4 循环语句
1.3.4.1 FOR语句
通用格式:
FOR variable = expr, statement, ..., statement END
例子:构造一个5行4列的矩阵,并赋值
for i=1:5
for j=1:4
m(i,j)=i*100+j;
end
end
1.3.4.2 WHILE语句
通用格式:
WHILE expression
statements
END
例子:将输入的字符串反序
str=input('请输入字符串: ','s')
tmpstr=str;
i=1;
len=length(str);
while i<=len
str(len-i+1)=tmpstr(i);
i=i+1;
end
1.3.5 Matlab程序M文件
Matlab程序一般保存为扩展名为m的文件,这类文件分为两类:(1)脚本(2)函数
脚本:
在Matlab中即不接受输入参数,也不返回参数的M文件称为脚本,这类文件中没有函数申明,它是一些MATLAB函数和命令的组合。
脚本可以直接在MATLAB环境下执行,它可以访问整个MATLAB工作空间种的变量,而脚本中的变量在脚本执行完后仍然保留在工作空间中,并能被其它脚本所引用,直到用clear命令清空。
比如建立脚本文件mypro1.m,其内容如下:
num=input('输入一个正整数:')
s=0;
for i=1:num,
s=s+i;
end
s
本脚本功能是输入一个正整数,赋值给num,然后计算1到该正整数的所有整数的和,并将结果保存到变量s中。
注意:Matlab工作空间中的变量要被函数所引用,必须申明为全局变量
且全局必须在使用前就要申明,语法为:global varname1 varname2 …
例子:
文件:temp1.m
global t1
t1=[1 3 5 7]
文件:testfun.m
function r=testfun(num)
global t1
r=t1*num
运行:
clear all
temp1
t1 =
1 3 5 7
testfun(2)
r =
2 6 10 14
ans =
2 6 10 14
1.3.6 函数与子函数
1.3.6.1 函数语法结构
函数同其它高级语言一样,是MATLAB语言的重要组成部分,MATLAB除了内部函数外,还有各种工具箱中的函数,这些函数都以M文件给出,以便调用。
下面以一个例子来说明MATLAB函数的语法。下面是文件名为mean.m的内容。
function y = mean(x,dim)
%MEAN Average or mean value.
% For vectors, MEAN(X) is the mean value of the elements in X. For
% matrices, MEAN(X) is a row vector containing the mean value of
% each column. For N-D arrays, MEAN(X) is the mean value of the
% elements along the first non-singleton dimension of X.
%
% MEAN(X,DIM) takes the mean along the dimension DIM of X.
%
% Example: If X = [0 1 2
% 3 4 5]
% then mean(X,1) is [1.5 2.5 3.5] and mean(X,2) is [1
% 4]
% See also MEDIAN, STD, MIN, MAX, COV.
% Copyright 1984-2001 The MathWorks, Inc.
% $Revision: 5.16 $ $Date: 2001/04/15 12:01:26 $
if nargin==1,
% Determine which dimension SUM will use
dim = min(find(size(x)~=1));
if isempty(dim), dim = 1; end
y = sum(x)/size(x,dim);
else
y = sum(x,dim)/size(x,dim);
end
mean是MATLAB用于统计的一个函数。第一行为函数的声明,
函数语法为:
function [返回参数列表]=函数名(输入参数列表)
mean的返回参数为y,y可以用中括号括起来。输入参数为x和dim,
nargin和nargout为MATLAB的内部变量,分别表示输入参数个数和输出参数个数,由于有些函数要进行参数个数检查或在一些函数实现时参数个数不确定,因此要借助这两个变量进行程序算法设计和控制。
百分号%用于注释,%后的字符串表示注释文本
1.3.6.2 函数编写示例
求任意两个自然数之间(包含两个自然数)所有自然数的和。
输入参数2各,输出参数1个,即返回和值。
函数名这里取为sum2,函数名要有一定意义,才便于记忆,而且不要于系统内部函数相同,可以通过“help 函数名”看一下改函数名是否为系统函数。
function r=sum2(n1,n2)
%sum2 求任意自然数n1和n2之间(含n1和n2)所有整数的和
if n2>=n1 ,
r =(n2-n1+1)*(n1+n2)/2;
else
r=(n1-n2+1)*(n1+n2)/2;
end
输入:
sum2(1,100)
ans =
5050
1.3.6.3 函数的参数
参数的传递规则
每个函数有自己专用的工作空间,函数内部变量与MATLAB工作空间的联系只通过输入参数与输出参数来建立。参数的传递属于值传递,即输入参数变量的值在函数内部改变了,而在调用改函数时没有作为返回参数,那么这个输入参数变量的并没有改变。
例如:
function r=test1(a)
%改变输入参数a的值
r=[];
a=999;
r=a;
运行:
a=100;test1(a);a
输出:
a =
100
说明a的值并没有改变,可以这样调用来改变a的值。
>> a=100;a=test1(a);a
输出:
a =
999
1.3.6.4 子函数
函数文件可以包含一个以上的函数,该文件中的第一个函数时主函数,后面定义的所有函数都是子函数,子函数只允许同一个文件中的函数及其它函数访问。函数文件名要与主函数名相同。
function s=mymainfun
num=input('输入一个正整数:')
sprintf('从1到整数%d的和为%d',num,mysum(num))
function s=mysum(num)
%求1到num所有整数相加之和
s=0;
for i=1:num,
s=s+i;
end
私有函数
私有函数指位于private目下的函数,它们只能被其上一层目录的函数访问,对于其它目录的函数是部可见的,这就允许私有函数可以与其它目录下的函数同名。
MATLAB在执行某个程序或函数时,如果它有私有目录,则先查找私有目录,在根据MATLAB的PATH查找其它目录下的函数。
如果建立了私有函数目录,则不要添加到MATLAB的查找路径当中。
技巧:
1.3.7 建立内部函数
命令:
inline
语法:
inline(expr) 根据expr建立内部函数,函数自变量根据表达式自动搜索;
inline(expr, arg1, arg2, ...) 指定参数,arg1等参数是字符串参数
inline(expr, N) 参数为x,P1,P2,…,PN为
例子:
g = inline('t^2')
f = inline('xyz','x','y','z')
g = inline('x^P1+x^P2',2)
例子:运行如下
f = inline('x^2+y^3')