YZY的MATLAB笔记
前言
本文记录matlab代码相关的笔记,以后续学习参考(有些也许不是很高效,但是是我个人使用习惯)
(本文若有不正确的地方望大佬们多多指正Orz)
【本文优先发布于我的个人博客网站www.226yzy.com ,转载请注明出处
】
1.绘图相关
1.基本绘图
首先绘图需要点的横纵坐标的数据,这里使用下面的数据
1 | x=[1507.2,1484.0,1459.8,1435.6,1410.9,1391.2,1368.5,1350.0,1331.0]; |
然后绘图的话我一般会通过下面这个函数绘制
1 | plot(x,y,'-'); |
上面的三个参照,x和y就是点的横纵坐标的数据,对于第三个参数,为方便解释,由下表呈现
MATLAB 绘图命令的各种选项 | |||||||||
---|---|---|---|---|---|---|---|---|---|
曲线线型 | 曲线颜色 | 曲线颜色 | 标记符号 | 标记符号 | |||||
选项 | 意义 | 选项 | 意义 | 选项 | 意义 | 选项 | 意义 | 选项 | 意义 |
‘-’ | 实线 | ‘b’ | 蓝色 | ‘c’ | 蓝**绿色** | ‘*’ | 星号 | ‘pentagram’ | ☆ |
‘- -’ | 虚线 | ‘g’ | 绿色 | ‘k’ | 黑色 | ‘**.’** | 点号 | ‘o’ | ○ |
‘:’ | 点线 | ‘m’ | 红紫色 | ‘r’ | 红色 | ‘x’ | 叉号 | ‘square’ | □ |
‘-.’ | 点划线 | ‘w’ | 白色 | ‘y’ | 黄色 | ‘v’ | ▽ | ‘diamond’ | ◇ |
‘none’ | 无线 | **用一个1x3向量任意指定[r,g,b]红绿蓝三原色 | ‘^’ | △ | ‘hexagram’ | 六角星 | |||
‘>’ | 左三角 | ‘<’ | 右三角 |
2. 使用plot3()函数绘制三维图像
绘制三维图像需要x、y、z、轴上的坐标数据,这里使用下面的数据
1 | x=[1507.2,1484.0,1459.8,1435.6,1410.9,1391.2,1368.5,1350.0,1331.0]; |
然后函数调用如下即可
1 | plot3(x,y,z,'-') |
各参数具体含义与plot()
函数基本相同
3. 为图添加标题、坐标轴名称、格栅
为了绘制的图的完整就需要添加标题、坐标轴名称等信息
标题、坐标轴名称的添加如下
1 | xlabel('x轴'); |
格栅的添加需输入命令
1 | grid on |
关闭格栅则输入命令
1 | grid off |
4.同一图内多条曲线绘制,及双y轴图像、多幅图的绘制
1.同一图内多条曲线绘制
假设数据如下
1 | x=[1507.2,1484.0,1459.8,1435.6,1410.9,1391.2,1368.5,1350.0,1331.0]; |
如果绘制两条则如下
1 | plot(x,y,'-'); |
即插入hold on;
2.双y轴图像
双y轴图像的绘制如下
1 | plotyy(x,y,x,z) |
前面一对为左y轴,后面一对为右y轴
3.多幅图的绘制
假设我们需要绘制6幅图,并以3行2列的形式呈现即下图的样子
实现上图的代码大致如下(数据的就没放进去了)
1 | subplot(3,2,1); |
这主要是用了subplot()
函数;
该函数有三个参数,
第一个代表最终绘制有几行,
第二个代表最终绘制有几列,
第三代表该图为第几幅图
5. 调整坐标比例避免图像变形
这个方法在我的另一篇文章有提到过(MATLAB拟合圆 | 星空下的YZY (226yzy.com))
输入下面的命令
1 | axis equal |
该命令就是保证横纵坐标轴的最小刻度一致
得到的图像如下
或者用另一个命令
1 | axis square |
该命令使横纵坐标比例为1
得到的图像如下
若想恢复默认,只需输入下面的命令即可
1 | axis auto |
这样你就可以得到一个正常的圆的图像了
6. MATLAB提供的特殊二维曲线绘制函数
其它的一些MATLAB提供的特殊二维曲线绘制函数如下表
MATLAB提供的特殊二维曲线绘制函数 | ||
---|---|---|
函数名 | 意义 | 常用调用格式 |
bar() | 二维条形图 | bar(x,y) |
comet() | 彗星状轨迹图 | comet(x,y) |
compass() | 罗盘图 | compass(x,y) |
errorbar() | 误差限图形 | errorbar(x,y,l,u) |
feather() | 羽毛状图 | feather(x,y) |
fill() | 二维填充函数 | fill(x,y,c) |
hist() | 直方图 | hist(y,n) |
loglog() | 对数图 | loglog(x,y) |
polar() | 极坐标图 | polar(x,y) |
quiver() | 磁力线图 | quiver(x,y) |
stairs() | 阶梯图形 | stairs(x,y) |
stem() | 火柴杆图 | stem(x,y) |
semilogx() semilogy() | 半对数图 | semilogx(x,y) semilogy(x,y) |
7. matlab绘制散点图矩阵
matlab绘制散点图矩阵可通过plotmatrix()
函数
可通过下面的代码得到一个简单的效果图
1 | X = randn(50,3); %创建一个由随机数组成的 50×3 数组。 |
比较完整的调用如下
1 | X = randn(50,3); |
根据官方文档的说明散点图矩阵 - MATLAB plotmatrix - MathWorks 中国,上面参数的含义如下
S
- 散点图的图形线条对象AX
- 每个子坐标区的坐标区对象BigAx
- 容纳子坐标区的主坐标区的坐标区对象H
- 直方图的直方图对象HAx
- 不可见的直方图坐标区的坐标区对象
2. matlab对Excel数据的读写
1.对Excel数据的读入
对Excel数据的读入我个人还是比较习惯用xlsread()
函数的,其调用如下
1 | t2=xlsread('C:\Users\Dell\Desktop\新建 XLSX 工作表.xlsx',3,'M2:M4141'); |
该函数包含了三个参数
第一个参数是文件的路径
第二个参数是第几个工作表,这个参数你也可以写该工作表的名称,如果该工作表名为Sheet3
可如下调用
1 | t2=xlsread('C:\Users\Dell\Desktop\新建 XLSX 工作表.xlsx','Sheet3','M2:M4141'); |
第三个参数是调取的数据在Excel表中的具体位置范围
2. 对Excel数据的写入
对Excel数据的写入我个人还是比较习惯用xlswrite()函数,其调用如下
1 | xlswrite('C:\Users\Dell\Desktop\2019D\新建 XLSX 工作表.xlsx',kk,2,'A1'); |
该函数包含了四个参数
第一个参数是文件的路径
第二个参数是要写入的数据集的名称
第三个参数是第几个工作表,这个参数你也可以写该工作表的名称,
第四个参数是在表格中写入的位置,如果默认从A1的位置开始,则可以不写
3.拟合及求解相关内容
1.多项式拟合
首先我找到了之前我自己比较早的时候写的一份代码,该代码进行的是一元一次回归方程的拟合结果的绘图,并预测1997和1998年的值(x0和y0中有这两年的数据是因为前面运行得出了(即第一处注释的位置),后续添加上去的)
1 | x0=[1990 1991 1992 1993 1994 1995 1996 1997 1998]; |
1. polyfit()函数
polyfit()
函数是用于多项式曲线拟合的
该函数有3个参数
前两个即横纵坐标的数据
第三个代表的是几次多项式
2. poly2sym()函数
poly2sym()
函数它是把系数组转换成自符号多项式
3. polyval()函数
polyval()
函数用于多项式计算
4. interp1()函数
interp1()
函数用于一维数据插值
该函数有4个参数分别为样本点、样本值、查询点和插值方法
插值方法具体见该链接一维数据插值(表查找) - MATLAB interp1 - MathWorks 中国
2.方程交点求解
对于方程间交点求解代码如下
1 | syms x y |
solve()
函数中方程可替换
xx和yy分别代表交点的横纵坐标
3.修正倾斜角度
修正倾斜角度代码如下,下面代码在24.5为倾斜角度
1 | AA=A1*cos(pi/24.5)-A2*sin(pi/24.5); |
4. 圆的拟合
这个我在另一篇有专门写,这里就不再赘述了
传送门:MATLAB拟合圆 | 星空下的YZY (226yzy.com)
5.多元回归方程拟合
当时有参考这一篇(4条消息) [matlab]多元线性回归regress_YinJianxiang的博客-CSDN博客_matlab多元线性回归
对于该问题代码如下
1 | X1 = [ones(size(A1)) B1 C1 C2 C3 C4 C5]; |
X1
中的各个参数为矩阵,具体参数个数看所求因素的个数
例如B1、C1这些代表了多元回归方程的各项除系数外的内容
1. size()函数
size()
函数可获取该矩阵的行数和列数
2. ones()函数
ones()
函数表示生成全1的矩阵,ones(size(A1))
产生的矩阵是与A1大小相同的全1矩阵
3. regress()函数
regress()
函数是多元线性回归的求解函数
A1
代表预期结果的数据,X1
则如上,代表各因素的数据
根据多元线性回归 - MATLAB regress - MathWorks 中国的描述
b1,bint1,r1,rint1,stats1这些的含义如下
b1
为多元线性回归的系数估计值
bint1
为系数估计值的置信边界下限和置信边界上限,即置信区间
r1
为残差
rint1
用于诊断离群值的区间
stats1
为模型统计量以数值向量形式返回,包括 R² 统计量、F 统计量及其 P 值,以及误差方差的估计值
我们得到了这些数据后,就可以通过得到的多元回归方程计算该方程的数据,并得知拟合情况
1 | k1=b1(1)+b1(2)*B1+b1(3)*C1+b1(4)*C2+b1(5)*C3+b1(6)*C4+b1(7)*C5; |
4. rcoplot()函数
在使用过上述的regress()
函数后,可以通过下面的代码绘制残差图
1 | rcoplot(r1,rint1) |
rcoplot()
函数有两个参数
第一个为残差
第二个为诊断离群值的区间
4.MTALAB图论工具箱
在之前我的一篇文章中,我通过代码实现Floyd和Dijkstra算法最短路径—Floyd与Dijkstra算法 | 星空下的YZY (226yzy.com)matlab中提供了相关的工具箱,我们可以通过命令调取使用,还可以绘制图像更加直观地看到结果。
1. Matlab图论工具箱的命令
根据《数学建模算法与应用(第2版)》
第54页中整理的Matlab图论工具箱的命令
命令名 | 功能 |
---|---|
graphallshortestpaths | 求图中所有顶点对之间的最短距离 |
graphconncomp | 找无向图的连通分支,或有向图的强弱连通分支 |
graphisdag | 测试有向图是否含有圈,不含圈返回1,否则返回0 |
graphisomorphism | 确定两个图是否同构,同构返回1,否则返回0 |
graphisspantree | 确定一个图是否是生成树,是返回1,否则返回0 |
graphmaxflow | 计算有向图的最大流 |
graphminspantree | 在图中找最小生成树 |
graphpred2path | 把前驱顶点序列变成路径的顶点序列 |
graphshortestpath | 求图中指定的一对顶点间的最短距离和最短路径 |
graphtopootder | 执行有向无圈图的拓扑排序 |
graphtraverse | 求从一顶点出发,所能遍历图中的顶点 |
2.绘制有向图
通过matlab可以直观地画出相应的路径图
1 | t=[41 99 51 32 15 45 38 32 36 29 21];%路径耗时 |
view()
设置相机视线具体见官方文档解释相机视线 - MATLAB view - MathWorks 中国
sparse()
函数是用于构建稀疏矩阵
ShowWeights=off
表示无权图,on
表示赋权图
另外ShowArrows=off
表示无向图,on
表示有向图
graphallshortestpaths()
可以得出各点间的最短路径
5.其他
1.最短路径
这个我在另一篇也有专门写,这里就不再赘述了
无论以什么方式引用,请注明出处吼😉
这篇许多代码都是我自己写的创作不易😂
传送门:最短路径—Floyd与Dijkstra算法 | 星空下的YZY (226yzy.com)
2. matlab官方中文在线文档
有些描述准确一点还是参考官方文档比较好