1. plot函数语法
1.1 基本语法
Matlab中的plot函数是最常用的绘图函数之一,其基本语法如下:
plot(X,Y)
X和Y可以是向量或矩阵,也可以是两个向量的元素个数相同的数组。- 当
X和Y都是向量时,plot函数将在当前坐标轴上绘制Y对X的图。
1.2 线型、颜色和标记
plot函数还允许用户自定义线型、颜色和数据点的标记,语法如下:
plot(X,Y,'LineStyle','Marker','Color')
LineStyle指定线型,如'-'(实线)、'--'(虚线)、':'(点线)等。Marker指定数据点的标记类型,如'o'(圆圈)、'+'(加号)、'*'(星号)等。Color指定颜色,如'r'(红色)、'g'(绿色)、'b'(蓝色)等。
1.3 多条曲线绘制
在同一个坐标轴上绘制多条曲线,可以使用多次plot函数调用,或者将数据组合后一次调用:
plot(X1,Y1,X2,Y2,...,Xn,Yn)
- 每次调用plot函数时,可以指定不同的线型、颜色和标记来区分不同的曲线。
1.4 子图绘制
使用subplot函数可以在一个窗口中创建多个子图,每个子图可以独立使用plot函数:
subplot(m,n,p)
plot(X,Y)
m和n分别指定子图的行数和列数。p指定当前激活的子图位置。- 在调用subplot后,接下来的plot函数将在指定的子图中绘图。
2. plot函数用法
2.1 绘制向量
在MATLAB中,使用plot函数绘制向量时,可以直接传入一个向量作为参数。此时,向量的索引值将作为横坐标,向量的元素值将作为纵坐标进行绘制。
x = [10, 20, 30, 40, 50];
plot(x);
上述代码将绘制一个以向量元素索引为横坐标,以元素值作为纵坐标的折线图。
2.2 绘制矩阵
当传入plot函数的是矩阵时,MATLAB会按列绘制每条曲线,每列代表一条曲线。
x = rand(3, 4); % 生成一个3行4列的随机矩阵
plot(x);
此代码将绘制4条曲线,每条曲线对应矩阵的一列。
2.3 绘制多组数据
plot函数可以同时接受多组数据,用于绘制多条曲线。
x = linspace(0, 2*pi, 100);
y1 = sin(x);
y2 = cos(x);
y3 = sin(x + pi/4);
plot(x, y1, x, y2, x, y3);
这段代码将在同一幅图中绘制正弦、余弦以及相位偏移的正弦曲线。
2.4 设置图形属性
plot函数允许用户通过额外的参数来设置图形的各种属性,如线条类型、标记符号和颜色。
x = 0:pi/10:2*pi;
y1 = sin(x);
y2 = cos(x);
plot(x, y1, 'r--', x, y2, 'b:');
这里,'r–'表示红色虚线,'b:'表示蓝色点线。通过这种方式,可以自定义曲线的显示样式。
3. 应用案例
3.1 绘制正弦波
使用Matlab的plot函数可以轻松绘制正弦波图形。以下是一个简单的示例代码,用于生成正弦波图:
x = linspace(0, 2*pi, 100); % 生成0到2*pi之间的100个点
y = sin(x); % 计算每个点的正弦值
plot(x, y); % 绘制正弦波
title('正弦波图形'); % 添加标题
xlabel('x轴'); % x轴标签
ylabel('sin(x)'); % y轴标签
3.2 绘制指数衰减
指数衰减是自然科学和工程学中常见的现象,Matlab可以方便地绘制此类图形。示例代码如下:
x = linspace(0, 5, 100); % 生成0到5之间的100个点
y = exp(-x); % 计算每个点的指数衰减值
plot(x, y); % 绘制指数衰减曲线
title('指数衰减图形'); % 添加标题
xlabel('时间'); % x轴标签
ylabel('幅度'); % y轴标签
3.3 绘制二维和三维图形
Matlab不仅能够绘制二维图形,还能绘制三维图形。以下是二维和三维图形的绘制示例:
% 二维图形绘制
t = linspace(0, 2*pi, 100);
x = t;
y = sin(t);
plot(x, y);
title('二维正弦波图形');
% 三维图形绘制
[X, Y] = meshgrid(linspace(-5, 5, 100), linspace(-5, 5, 100));
Z = sin(sqrt(X.^2 + Y.^2));
plot3(X, Y, Z);
title('三维正弦波图形');
xlabel('X轴');
ylabel('Y轴');
zlabel('Z轴');
3.4 在同一图形上绘制多个函数
有时需要在同一图形上比较不同的函数,Matlab可以通过多次调用plot函数并使用hold on命令实现。示例代码如下:
x = linspace(0, 2*pi, 100);
y1 = sin(x);
y2 = cos(x);
y3 = sin(x) .* cos(x);
figure; % 创建新图形窗口
plot(x, y1, 'r'); % 绘制第一个函数,红色
hold on; % 保持当前图形,以便添加新的图形
plot(x, y2, 'g'); % 绘制第二个函数,绿色
plot(x, y3, 'b'); % 绘制第三个函数,蓝色
hold off; % 关闭hold状态
legend('sin(x)', 'cos(x)', 'sin(x)*cos(x)'); % 添加图例
title('多个函数图形'); % 添加标题
xlabel('x轴'); % x轴标签
ylabel('函数值'); % y轴标签
3.5 心脏线
心脏线(Cardioid)是一种常见的爱心形状的曲线,可以通过以下参数方程绘制:
x=16sin3(t) x = 16 \sin^3(t) x=16sin3(t)
y=13cos(t)−5cos(2t)−2cos(3t)−cos(4t) y = 13 \cos(t) - 5 \cos(2t) - 2 \cos(3t) - \cos(4t) y=13cos(t)−5cos(2t)−2cos(3t)−cos(4t)
以下是MATLAB代码示例,用于绘制心脏线:
% 定义参数t的范围
t = linspace(0, 2*pi, 1000);
% 计算x和y值
x = 16 * sin(t).^3;
y = 13 * cos(t) - 5 * cos(2*t) - 2 * cos(3*t) - cos(4*t);
% 绘制心脏线
figure; % 创建一个新的图形窗口
plot(x, y, 'r-'); % 绘制红色的线
title('心脏线'); % 设置图形的标题
axis equal; % 设置坐标轴的比例使x和y轴相同
grid on; % 开启网格
这段代码首先定义了参数t,然后计算了对应的x和y值,并使用plot函数绘制了心脏线。axis equal用于确保图形在x和y方向上的比例一致,而grid on则开启了网格,方便查看图形的具体形状。
运行这段代码后,MATLAB将显示一个窗口,其中包含一个红色的心脏线图形。

3.6 分形图
在MATLAB中绘制分形的一个经典例子是绘制曼德勃罗特集。曼德勃罗特集是一个复数分形,可以通过以下步骤在MATLAB中绘制:
% 定义常量
maxIterations = 800; % 最大迭代次数
gridSize = 1000; % 网格大小
% 设置坐标范围
xlim = [-2, 1];
ylim = [-1.5, 1.5];
% 创建网格
x = linspace(xlim(1), xlim(2), gridSize);
y = linspace(ylim(1), ylim(2), gridSize);
[xGrid, yGrid] = meshgrid(x, y);
z0 = xGrid + 1i * yGrid;
% 初始化结果数组
count = ones(size(z0));
% 进行迭代计算
z = z0;
for n = 0:maxIterations
z = z.^2 + z0;
inside = abs(z) <= 2;
count = count + inside;
end
% 计算并显示结果
count = log(count);
imagesc(x, y, count);
colormap([flipud(pink()); 0 0 0]);
-
定义常量:设置最大迭代次数
maxIterations和网格大小gridSize,以及绘制曼德勃罗特集的坐标范围xlim和ylim。 -
创建网格:使用
linspace函数创建x和y的值,然后使用meshgrid函数生成二维网格。 -
初始化结果数组:创建一个与网格同样大小的结果数组
count,用于记录每个点的迭代次数。 -
迭代计算:从
z0开始,对每个点进行迭代计算,直到迭代次数达到maxIterations或z的模大于2。迭代公式为z = z^2 + z0。 -
计算并显示结果:使用
log函数处理结果数组count,然后使用imagesc函数显示结果。使用colormap函数设置颜色映射。
运行这段代码后,MATLAB将显示一个窗口,其中包含一个曼德勃罗特集的图像。
注意:
- 曼德勃罗特集的边界在无限放大后会展现出越来越复杂的分形结构。
- 可以通过调整
xlim和ylim的值来探索曼德勃罗特集的不同区域。 - 可以通过改变
maxIterations的值来提高或降低细节的精细程度。
这个例子展示了如何在MATLAB中使用复数迭代来生成分形图像。


2万+

被折叠的 条评论
为什么被折叠?



