本节介绍for循环的使用。
例:使用for循环绘制门函数(脉冲函数)。
/
| 1, -1/2 < x <=1/2
y = -|
| 0, 其他
\
好吧。。
思路:
我们只需要用图将意思表达清楚就行了,所以选择区间[-3, 3],在这里面做出门函数的图像来。这是典型的分段函数,-3到-1/2或1/2到3的函数值为0,-1/2到1/2的函数值为1。
还是使用千点作图法(点越多图像越接近实际),将-3到3的区间划分成1000+1个点(即使用6/1000为间隔)。
先附上程序:
close all;
clear all;
clc;
x = -3 : 6/1000 : 3;
L = length(x);
y = zeros(1, L);
for i = 1 : L
if (x(i) <= -1/2) || (x(i) > 1/2)
y(i) = 0;
else
y(i) = 1;
end
end
figure(1);
plot(x, y, 'b');
grid;
axis equal;
title('for循环作图-门函数');
xlabel('x');
ylabel('y');
legend('门函数');
然后一行一行的解释。
close all --> 关闭当前所有的figure(图像)。根据实际情况选择是否要加上这条。如果需要同时显示多幅图像,而几个图像并不是在同一个函数文件中生成的,那么后续图像所在的m文件就不要加上这条了。
clear all --> 清理内存。同上,只在程序初始阶段使用,清楚所有占用的内存空间(例如数组等,防止后续误操作或给已分配的变量名赋值为不同类型的数组时报错)。
clc --> 清屏。清理命令窗口(command window),并不清除内存数据。
x = -3 : 6/1000 : 3; 将x作为横轴的数组变量,赋值为-3到3以6/1000为间隔的数组(即横坐标的1000+1个取样点)。
L = length(x); 取x的长度(即1001),放于变量L中。
y = zeros(1, L); 初始化数组y。这一步非常重要。matlab要比c语言灵活,很多变量在使用之前并不需要声明,但是调用数组是个例外。例如使用y(i)来调用数组时,必须给数组提前分配空间。
for循环部分:
for i = 1 : L 定义for循环的计数变量为i, 其值从1递增到L(即1001),增量为1。
if (x(i) <= -1/2) || (x(i) > 1/2) --> if条件判断,x的第i个值小于等于-1/2,或大于1/2时,执行下述语句,以end或else或else if为结尾。
y(i) = 0; 当上述条件为真时,函数值为0。需要说明一下,matlab的数组起始序号是从1开始的,而c语言是从0开始的。
else y(i) = 1; 当if条件不符合时,也就是x的第i个值大于-1/2且小于等于1/2时,y的第i值为1。
figure(1); 新建一个空白图像,标号为1.
plot(x, y, 'b'); 使用plot函数绘图,x为横坐标数组变量,y为纵坐标数组变量,'b'为参数,b为线条颜色,蓝色,也是默认的颜色。其他还有r红色,y黄色,k黑色等等。
grid; 给图像加网格。也可以使用grid on/off对。当前语句只对当前图像(即figure 1)生效。
axis equal; 使横纵坐标轴等间距。
title('for循环作图-门函数'); 图像的标题。
xlabel('x'); x轴的标注。
ylabel('y'); y轴的标注。
legend('门函数'); 图例。如果有多个线条,以绘图时的顺序加图例。
附结果图像:
下节介绍同一图像绘制多个函数图形的情况。