MATLAB基础绘图操作
本文是笔者在学习MATLAB过程中,针对网上资料所作的一些总结,后续还会补充完善
1 基础用法介绍
- 在软件中调整工作区
- 语句后面加分号,不是交互式;不加分号,会同时打印结果,是交互式。建议在调试程序时不加分号,方便观察结果,在实际运行程序时加分号,方便观察结果。
- 变量赋值不需要提前声明,直接使用;字符串要使用单引号括起来。
- clear清除变量,clc清除屏幕。
- MATLAB可以在命令行编程,也可以在文件中编程。文件中编程需要保存文件到当前路径,文件名仅包含字母、下划线、数字,不能以数字开头,且以.m为后缀,运行程序直接在命令行中输入文件名回车即可。
- 在终端中打印字符串用disp函数。但disp无法实现C语言中的printf组合打印功能,可以使用sprintf函数先将要打印的字符组织好。
补充关于矩阵向量的内容:
-
向量的转置
使用 ’ 运算符。若A为列向量,则A’为行向量。 -
向量的截取
假如一个行向量A长度为100,可以通过 B=A(0:29) 来获取向量A的前30位。 -
计算矩阵行列数
使用size函数,size(A,1)该语句返回的是矩阵A的行数, size(A,2) 该语句返回的是矩阵A的列数 -
提取矩阵行列
提取矩阵A的第i行:A(i, : );
提取矩阵A的第j列:A(:, j );
2 MATLAB绘图
2.1 二维视图
2.1.1 plot函数用法
在MATLAB中绘制二维图形一般用plot函数,plot接收的参数是向量,然后根据传入的参数画点,使用直线把点连接起来,如果点足够密集,展示出来后,在我们眼睛看来,画出来就是一个曲线。plot函数的基本格式为:
- plot(y)
- plot(x, y)
- plot(x1, y1, x2, y2, …)
第一种没有输入x的情况,绘制出来的图形的横坐标将默认以1为单位;第二种为横坐标以设定x为范围和步进;第三种的参数成对输入,同时绘制多条曲线。
plot函数可以规定图形的形状、颜色等属性,若不指定则依次使用表中属性,plot函数的属性参数表如图:
在使用MATLAB绘图之前,我们需要先用figure创建一个图像窗口,下面依次列举上述三种情况的实例:
- plot函数只规定y和属性:
x = 0:0.01:20; %给定x范围和步进
f = sin(x); %声明函数
figure; %打开一个绘图窗口
plot(f, '--c'); %画图,虚线、青色
title('y=sinx o--c'); %打印标题
- plot函数规定x、y和属性:
x = 0:0.01:20; %给定x范围和步进
f = sin(x); %声明函数
figure; %打开一个绘图窗口
plot(x, f, '--c'); %画图,虚线、青色
title('y=sinx o--c'); %打印标题
- plot函数同时绘制多条曲线:
x = -2*pi:0.01:2*pi; %给定x范围和步进
f1 = sin(x); %声明函数1
f2 = cos(x); %声明函数2
figure; %打开一个绘图窗口
plot(x,f1, '--b', x, f2, '--r');%画图,f1为虚线蓝色,f2为虚线红色
title('sinx cosx'); %打印标题
注:1、2其实就是在使用plot函数绘图时有没有指明横坐标的问题,若像1这样未指明横坐标,那么横坐标最小以1为单位,对于一些精度要求不高的场合可以这么做。
2.1.2 绘制子图
使用subplot()函数可以将一个figure分为多个区块,实现在一个figure下绘制多张子图,subplot函数的格式为subplot(m, n, p),m和n分别表示将整个figure划分为m行n列,p表示子图位置在从左往右、从上往下数的第p个地方。示例代码如下:
x = 0:0.1:2*pi; %给定x的范围和步进
f1 = sin(x); %声明函数1
f2 = cos(x); %声明函数2
figure; %打开一个绘图窗口
subplot(2, 2, 1); %figure划分为2行2列,子图位置为1即第一个
plot(x, f1); %绘制曲线
title('f1=sinx'); %打印标题
subplot(2, 2, 2); %figure划分为2行2列,子图位置为2即第二个
plot(x, f2); %绘制曲线
title('f2=cosx'); %打印标题
2.1.3 其它
- grid on 开启框线,该选项默认关闭
x = 0:0.01:20; %给定x范围和步进
f = sin(x); %声明函数
figure; %打开一个绘图窗口
plot(x, f, '--b'); %画图,虚线、青色
grid on; %开启框线
box off; %关闭边框
title('y=sinx'); %打印标题
- box off 关闭边框
- polar()绘制极坐标
- 同一figure内的同一位置重复绘图,使用hold on保存上一张图像,否则原图会被覆盖
2.2 三维视图
2.2.1 plot3函数
同plot函数一样,在传入的三维矩阵中找出三维空间中的点,然后使用线连接起来,所以plot3函数画的是空间曲线,示例如下:
t = 0:0.1:10*pi; %给定t的范围和步进
x = sin(t); %参数x
y = cos(t); %参数y
z = t; %参数z
figure; %打开一个绘图窗口
plot3(x, y, z); %绘制曲线
title('弹簧状曲线'); %打印标题
xlabel('x轴'); %标记x轴名称
ylabel('y轴'); %标记y轴名称
zlabel('z轴'); %标记z轴名称
2.2.2 meshgrid()和mesh()函数——绘制三维曲面的网格图
plot3函数只能绘制空间曲线,如果想绘制空间曲面可以选择 meshgrid()和mesh()函数。meshgrid接受两个参数,a 和 b ,每个参数(a 或者 b)都是一个一维数组(严格来讲,叫做向量),假设 a 中有126个元素(即126个区间点,记为na),b 中有63个元素(即63个区间点记为nb),那么,结果x 和 y 均是 nb 行 na 列的矩阵(二维数组),并且对于 x ,每一行均为 a 的复制,共nb行(即 x 中有63行 a),而对于 y,每一列均为 b (的转置)的复制,共na列(即 y 中有126列 b)。
2.2.3 surf()函数——绘制三维曲面颜色填充图
上面说的mesh()函数绘制出来的图形其实是一个个方格,而surf()函数可以绘制真正的曲面,方法与mesh()几乎一致,现比较两种方法的结果:
[x, y] = meshgrid(-2*pi:0.1:2*pi, -2*pi:0.2:2*pi);
z = sin(x) + cos(x);
figure;
subplot(2, 1, 1);
surf(x, y, z); % surf画曲面
title('surf');
subplot(2, 1, 2);
mesh(x, y, z); % mesh画方格
title('mesh');