前言
本篇博客针对一些matlab常用基础操作和两种图形的绘制技巧进行了简单介绍。操作内容包括数据载入及保存、元组及数值矩阵定义、字符串拼接、数值取整、保留指定位小数、正态、均匀及指定分布数组定义、坐标轴刻度名称改写、矩阵维数判断、点注释;绘图内容包括散点图绘制、中心点及圆圈绘制。希望博客内容能帮助到各位读者,有问题的读者可以私信咨询我。
一、操作部分
(一)数据载入及保存
matlab程序编写以及实际操作过程中,会用到数据的保存以及载入;常用的函数为“load()”函数和“save()”函数。其中“save()”函数还涉及单个数据或者多个数据的保存。
代码如下:
%将数据保存到data文件夹里面的d.mat文件中,d.mat中包含了'X','Y'两个变量
save('data/d.mat','X','Y');
%加载data文件夹里的d.mat文件
load("data/d.mat");
(二)元组及数值矩阵定义
元组是matlab中常用的数据类型之一,由多个元胞组成。其元胞中可存储文本,数值,矩阵等等不同的数据类型,应用较为方便。在此对元组的创建、读取、写入进行简要介绍。元组的创建用到的是“cell()”函数,同时还可以对元胞的类型进行定义;元组中的数据读取分为两种,一种是以元胞形式进行读取,一种是以数据类型进行读取,通常是数值矩阵形式。
代码如下:
%1*2维空元组定义
z = cell(1,2);
%定义一个1*2维元组,每个元胞为2*2的空数值矩阵
z = cell(1,2);
z(:) = {zeros(2,2)};
%读取数组中的元胞
zz = z(1);
%以数组中元胞的数据类型进行读取,如果元胞类型为数值矩阵,则读取出来的为数值矩阵
zz = z{1};
%定义一个元组,每个元胞由多个矩阵构成
X = cell(1,N2); %定义混合中间值,不同目标对应三个模型的值
X(:) = {cell(1,3)};
for i = 1:N2
X{i}(:) = {zeros(nx,n_end),zeros(nx,n_end),zeros(nx,n_end)};
end
数值矩阵是matlab中最常用到的数据类型。此部分对常用的定义,读取,写入操作进行介绍,最常用的定义函数为“zeros()”函数和“ones()”函数,分别为全0和全1矩阵的定义;读取是根据索引直接对数组进行切片读取;写入是对指定索引部分的数值进行赋值替换。
代码如下:
%定义一个6*6的全0数值矩阵
z = zeros(6,6);
%定义一个6*6的全1数值矩阵
z = ones(6,6);
%读取第一行第一列的值
zz = z(1,1);
%读取第一行的值
zz = z(1,:);
%读取第一列的值
zz = z(:,1);
%读取第一行的第3列到最后一列的值
zz = z(1,3:end);
%数值矩阵赋值
zz(2:3,4:5) = [1,2;3,4];
(三)字符串拼接
对于程序中的某些数值,通常需要将其转化为字符串进行输出,有时还需要将字符串进行拼接。对应的函数为“num2str()”函数,可以将变量转化为字符串;“strcat()”函数,可以将字符串进行连接。
代码如下:
%将变量转换为字符串
i = 15;
cc = num2str(i);
%连接字符串,sca表示“节点:15”
sca = strcat('节点', ':',cc);
(四)数值取整
数值取整操作是对小数进行取整操作,主要由取整函数“round()”、“fix()”、“floor()”和“ceil()”函数实现。不同函数进行数值取整的操作不同,具体含义如下表。
函数 | 含义 |
round(a) | 向最接近的整数取整,小数部分为0.5时向绝对值大的方向取整 |
fix(a) | 向0方向取整 |
floor(a) | 向不大于a的最接近整数取整 |
ceil(a) | 向不小于a的最接近整数取整 |
(五)保留指定位小数
要想将变量保留指定位数的小数,需要用到“round()”函数或“roundn()”函数进行四舍五入操作。
代码如下:
%将变量按照四舍五入的原则保留三位小数
a = 3.1415926;
b = round(a,3)
%将变量按照四舍五入的原则保留三位小数
a = 3.1415926;
b = roundn(a,-3)
(六)特殊分布数组定义
在此介绍正态分布、均匀分布、指定概率分布的随机数组产生方法;分别用到的函数为“normrnd()”函数、“unifrnd()”函数和“randsrc()” 函数。随机数组可以指定数组的大小以及分布的参数等。
代码如下:
%定义一个1*1000的正态分布随机数组
a = 2;%正态分布均值
theat = 1;%正态分布方差
z = normrnd(a,theat,1,1000);
%定义一个1*1000的均匀分布随机数组
lb = 1;%均匀分布下界
up = 2;%均匀分布上界
z = unifrnd(lb,up,1,1000);
%定义一个1*1000的指定分布随机数组
a = [0, 1 , 2];%指定分布参数
pp = [0.2, 0.2, 0.6];%指定分布参数取值概率
z = randsrc(1,1000,[a;pp]);
(七)坐标轴刻度名称改写
通过定义x轴对应数值的标签,可以将坐标轴刻度的名称进行对应的修改。用到的函数为“set()”函数。例如定义一个坐标轴,将原刻度10、20、30处定义为a、b、c,具体示例如下
代码如下:
set(gca,'XTick', [ 10 20 30],'XTickLabel', {'a' 'b' 'c'});
(八)矩阵维数判断
通过函数“size()”可以判读数据的大小,便于之后循环操作。例如判断一个数组的行数和列数大小。
代码如下:
%判断数组A的行数以及列数
A = [1,2;4,6];
[M,N] = size(A);
(九)点注释
通过函数“text()”可以对指定位置点进行注释。例如对点[0,0]进行注释,字体为宋体,字号为12。
代码如下:
text (0,0,'原点','FontName','宋体','Fontsize',12);
二、使用步骤
(一)散点图绘制
散点图绘制的时候主要用到的函数为“scatter()”函数,函数具有一系列的属性,可以进行点的大小、形状、点颜色修改、点填充等操作。
例如绘制一个圆点图,大小为30,点的外部线条为黑色,内部填充为红色。代码如下:
a = 2;%正态分布均值
theat = 1;%正态分布方差
z = normrnd(a,theat,1,1000);
scatter(1:1000,z,30,"filled",'o','MarkerEdgeColor',[0 0 0],'MarkerFaceColor',[1 0 0]);
(二)中心点及圆圈绘制
在实际科研工作中,部分人会需要绘制中心节点以及覆盖范围的图像。可以通过“scatter()”函数和“plot()”函数来实现,例如绘制四个节点的图形,需要对中心节点进行注释,并用黑色虚线对各节点的覆盖范围进行表示。
代码如下:
N1 = 4 ; %节点数量
r = [400, 400, 400, 400 ,400]; %节点的覆盖范围
r_location = [250 250;
250 -250 ;
-250,250;
-250,-250];%节点位置
for i = 1:N1
scatter(r_location(i,1),r_location(i,2),120,'rp');%绘制中心点
sca_mid = strcat('节点', ' ',num2str(i));%中心点字符串拼接
text (r_location(i,1)+40,r_location(i,2),sca_mid,'FontName','Times New Roman');%标记节点
hold on;%继续绘图
theta = 0:pi/20:2*pi; %角度[0,2*pi]
x = r_location(i,1)+r(i)*cos(theta);
y = r_location(i,2)+r(i)*sin(theta);
plot(x,y,'k--');%绘制圆圈
hold on;%继续绘图
end
axis equal;%使横纵坐标刻度相同
总结
以上就是今天要讲的内容,本文简单介绍了几种matlab程序编写中常用的几个操作,并介绍了散点图、中心点及圆圈图的绘制方法。合理利用各种函数可以极大提升我们的编程效率,便捷的绘图技巧可以更好地展示文章内容,希望今天的分享能给大家带来帮助。