讲义
%以后的注释
A=abs(x); ph=angle(x)
end %定义函数的M文件应以语句end结尾
引用函数myfun的例子是: clear i;
c=randn(1,300)+i*randn(size(a)); Am=myfun(c); %只引用第一个返回值时可照此做
[Amp,Sita]=myfun(c); %要引用两个返回值时须照此做
函数可以无输入或输出参量,例如 function a=newfun
%函数示例, 文件全名是newfun.m % a=newfun
% 本例无输入值,但有输出
str=['真棒 '; '真倒霉'];
31 讲义
i=round(rand)+1; %产生一个取值1,2的随机数
a=str(i,:); %取矩阵str第i行上的所有元素
end %函数结束
在函数内部定义的变量都是本地变量。本地变量同外部变量(调用函数的外部过程所使用的变量)使用不同的内存区,因此即使它们的标识符相同,也不会发生冲突。MATLAB的函数中也可以定义全局变量,格式是 global a b c
此句声明 a、b、c是全局变量。global声明必须在引用之前。 2.6 循环与分支 2.6.1 FOR循环
MATLAB中,FOR循环的格式是: for 循环变量 = 循环值表, 循环体, end 例如:
>>clear j
32 讲义
>>a=[1:4];
>>for i=1:3, a(i)=i+j;end, >>a a =
1.000 + 1.000i 2.000 + 1.000i 3.000 + 1.000i 4.000
本例中,clear j是MATLAB命令,其功能是清除对变量j以前的定义以使之只表示虚数运算符j??1。i是循环变量。循环值表是1:3也即1,2,3。循环体只有一句a(i)=i+j;,最后的a是为了显示结果。上面的循环等价于a(1:3)=[1:3]+j。
循环体可以是多条语句,例如 for i=1:-0.1:0 d1(i)=sin(I); d2(i)=cos(i); d3(i)=tan(i); end
此例也可这样实现 i=[1:-0.1:0];
d1=sin(i);d2=cos(i);d3=tan(i);
33 讲义
由于MATLAB的矩阵运算特性,许多循环功能都可以用矢量运算代替,这样可提高编程效率,一般也能提高运行速度。
循环值表也可以是矢量或矩阵。例如: i=0;
for x=[1,4,16,20,-3] i=i+1; y(i)=x^2; end 此例等价于
x=[1,4,16,20,-3];
y=x.^2; %对矢量的元素平方
结果是y =[1 16 256 400 9]。如果循环值表是矩阵,则循环变量是一个列矢量,循环次数等于循环值表的列数: i=0;
B=randn(5); %5乘5的正态随机数矩阵
for A=B %循环变量A是B的列 i=i+1;
34 讲义
B_max(i)=max(A); %求矢量A的最大值
B_min(i)=min(A); %求矢量A的最小值
end %循环结束 这段程序等价于 B=randn(5); B_max=max(B); B_min=min(B); 2.6.2 IF语句
IF语句是条件执行语句,其格式为: if 条件变量, 条件执行体, end
如果条件变量的实部的所有元素都不为零,则条件执行体被执行,否则跳过此句。也就是说,条件变量可以是数、矢量或矩阵,也允许是复数类型。例如: i=round(rand); a='i=0';
if i, a='i=1';end
35