软件
基础操作
- help
- 使用help datatype可以直接查看相应数据类型可以应用的函数
- 使用help function可以直接查看函数说明
- 运算符
- /:矩阵右除(A/B = A*inv(B),其中inv为求逆)
- \:矩阵左除(A\B = inv(A)*B,其中inv为求逆)
- ./:逐个相除
语句结构
说明
- 建议使用匿名函数(效率更高)代替在线函数
- 直接退出函数可以使用return
- 异常使用:try xxx catch exception xxx end 来获取
- 参数问题
- 全局变量
- nargin:获取输入参数数量
- nargout:获取输出参数数量
- msg = narhchk(low,high,number):检测参数数量
- number小于low或者大于high返回对应错误消息提示
- number介于low high之间返回一个空矩阵
- varargin:用于接收无限参数(放到参数列表最后,cell格式)
- varargout:用于输出无限结果(cell格式,接受需要使用[a,b,c])
- function [varargout] = testF(inputArg1,varargin)
- varargout{1} = 10;
- varargout{2} = varargin{1};
- varargout{3} = varargin{2};
- end
- [a,b,c] = testF(1,’kkk’,4);
- 结果为 10 kkk’ 4
- function [varargout] = testF(inputArg1,varargin)
- 多参数
- 使用列表或者cell矩阵接收参数
- 定义fx(a,b)但是只输入一个参数也可以,此时使用nargout来辨别
- 多参数情况下没有输入的参数一定不要调用,否则会直接出现错误
- 全局变量
- 在线函数
- 简介:常作为参数传递给另一个函数
- 创建
- 使用字符串创建
- f=inline(‘x.^2’,’x’); => f(2)=4
- f=inline(‘x+y’,’x’,’y’); => f(2,3)=5
匿名函数
feval(fun,x1,…..,xm):
- 求解函数结果
- fun:函数句柄或者函数名称
- x1-xm:输入参数进行求解
solve(eq,[eq1,qe2…eqn],[var],[var1,var2…varn])
编辑窗口
- Ctrl + I:⾃动对齐程序(整理缩进)
- Ctrl + R:快速注释代码段
- Ctrl + T:撤销注释的代码⾏
- Ctrl + Z:撤销改动
- Ctrl + Y:取消撤销(撒销过多时使⽤)
- Tab:代码段右移
- Shift + Tab:减少缩进
- 输⼊函数的前⼏个字母,再按Tab:⾃动补全命令(记不全函数名时使⽤)
代码调试
内存
- 小变量:对于小变量一直进行拼接得操作,建议一开始就预分配空间
- 矩阵 + 列表:数据类型内存预分配见后方矩阵一章开头介绍
- 字符串拼接:
- 对于字符串拼接同理,建议先在小长度上进行拼接,然后对中长度相互拼接
- 切勿直接对高长度字符串反复拼接,因为寻找一个如此大块得内存并不容易
循环
小知识
- eps:浮点数的精度,表示1到用双精度浮点数表示的下一个数之间的距离
- 数值

- 这里主要是数字图像处理里边的东西
类型转换
- 直接使用类名即可,非常直接
- 例如
- A = logical(B):非0变为1,0变为0
- C = uint8(B):大于255变为255,小于0变为0,其他照旧
- 特点
- 简单直接,不会进行其他运算,只是进行舍入
- 例如
- 使用函数进行转换(具有规则)
- g = changeclass(newclass,f)
- f:图像矩阵
- newclass:新图像矩阵类别(可以是uint8,uint16,double)
- 简单数值函数
- g = changeclass(newclass,f)
- 直接使用类名即可,非常直接
全局
- 无需对象
- figure(x):绘制第x副图
- hold on:保持下次绘图和上次绘图在一个figure中,且上一个图像不会被覆盖
- box on:添加右侧与上侧刻度标尺
- grid on:产生格线
- grid off:取消格线
- set(gca,’YTickMode’,’manual’,’YTick’,[-5,0,5]) (设置格线)
- set(gca,’XTickMode’,’manual’,’XTick’,[-10,-5,0,5,10]))
- box on:加边框线
- clf:清除当前figure中的图像
- xlabel():x坐标轴说明
- ylabel():y坐标轴说明
- title():添加标题
- drawnow limitrate:更新所有图像(会直接显示,运行速度较快)
- gcf返回当前Figure对象的句柄值
- gca返回当前axes对象的句柄值
- gco返回当前鼠标单击的句柄值
- 需要对象
- set(handle)列出句柄值为handle的对象的所有属性
- get(handle)除列出上述属性外,还列出可以设置的属性
- reset(handle)将所有属性改为默认值
- delete(handle)删除句柄值为handle的图形对象
- 说明:
- 可以利用set(handle,’属性名称’)获得句柄值为handle的对象的属性名称下所有可设置的属性值
- findobj:返回Root对象与其所有子对象的句柄值
- findobj(h):返回h变量的句柄值
- findobj(‘属性名称’,’属性值’):依据对象的属性名称和属性值找出匹配的对象句柄值。
- findobj(ObjectHandles,’属性名称’,’属性值’):根据限定的对象列表找出与对象的属性名称和属性值匹配的对象句柄值
- 无需对象
图像属性
- legend()
- 添加图例,对当前上下文绘图对象中的曲线依次添加图例
- legend(h,’First’,’Second’,’Third’):h为图像句柄,可选
- text()
- 参考:https://blog.csdn.net/u014722754/article/details/42565677/
- 在指定位置添加文本说明,默认坐标为起始坐标
- text(0.8,1.5,’曲线 y1=2e^{-0.5x}’);
- set()
- 介绍
- matlab给每个对象的每个属性都定义了一个名字,为属性名,其取值为属性值
- 调用格式:set(句柄,属性名1,属性值1,属性名2,属性值2,…),句柄即对象引用,如句柄A = plot(x,y)
- 例如:
- set(gca,’xtick’,X,’ytick’,Y):设置网格的显示格式,gca获取当前figure的句柄
- set(xlabel(‘Time’),’FontSize’,12,’Color’,’r’):设置x标签为Time,设置字体颜色大小
- set(h,’Color’,’r’,’LineStyle’,’—‘):设置h对象颜色与线型
- set(gca,’XLim’,[3 40]):X轴的数据显示范围
- set(gca,’XTick’,[-3.14,0,3.14] ):X轴的记号点
- set(gca,’XTicklabel’,{‘-pi’,’0’,’pi’}):X轴的记号(列表稀疏可以拉开间隔)
- set(gca,’XTickLabelRotation’,25):X轴记号旋转多少度
- set(gca,’XTick’, []):清除X轴的记号点
- set(gca,’XGrid’,’on’):X轴的网格
- set(gca,’XDir’,’reverse’):逆转X轴
- set(gca,’XColor’,’red’):X轴的颜色
- set(gca,’FontSize’,20):字体大小
- 介绍
- axis()
- 简介
- axis([xmin xmax ymin ymax]):设置当前图形的坐标范围,分别为x轴的最小最大值,y轴的最小最大值
- 例如
- axis([-0.1, 8.1, -1.1, 1.1]):坐标轴的显示范围
- 全局
- axis on:打开所有的坐标轴标签、刻度、背景
- axis off:去掉坐标轴
- axis fill:使坐标轴可以包含整个绘制的区域。
- 只有在PlotBoxaApectRatio或DataAspectRatioMode被设置为‘manual’才有效
- axis ij:矩阵坐标模式。此时水平坐标轴从左到有取值,垂直坐标从上到下
- axis xy:笛卡尔坐标模式。此时水平坐标从左到右取值,垂直坐标从下到上取值
- axis tight:将坐标范围设定为被绘制的数据范围
- axis square:将坐标轴设置为正方形
- axis normal:将当前的坐标轴框恢复为全尺寸,并将单位刻度的所有限制取消
- axis equal:设置屏幕高宽比,使得每个坐标轴的具有均匀的刻度间隔(等比刻度)
- axis auto:将坐标轴刻度恢复为自动的默认设置
- axis manual:冻结坐标轴刻度,此时如果hold被设定为on,那么后边的图形将使用与前面相同的坐标轴刻度范围
维度绘图
- 简介
- legend()
一维
- line([x1,x2],[y1,y2],’Color’,’red’)
- Color:颜色(需要完整单词)
- LineStyle:线形
- LineWidth:线宽
- 注意:line([1,2],[3,4])将画出(1,3)到(2,4)的一条直线,而不是(1,2)到(3,4)
- animatedline(动画线条)
- 创建对象 an = animatedline([ax],[Name,Value]);(对象可设置的属性可plot基本相同)
- 添加点:addpoints(an,x,y,[z])
- 更新点:drawnow limitrate
- 清除点:clearpoints(an)(清除后需要更新一下)
- 可以更改an的最大点数属性,到达最大点数之后回自动删除前边的点,像蛇一样
- line([x1,x2],[y1,y2],’Color’,’red’)
- 二维
- plot(x,y,’CLM’)
- C 代表颜色(Colors)
- L 代表曲线的格式 (Line Styles)
- M 代表曲线所用的线标(Markers)
- 有关符号在下边的属性标题部分有详细介绍
- fplot(f,[xinterval],[linestyle])
- 绘制函数表达式
- xinterval:x的区间,默认[-5,5]
- linestyle:线型,老客户了,见通用函数
- f = @(x) sin(x);
- fplot(f,[-10,10])直接绘制
- plotyy(x1,y1,x2,y2,[function])
- 双纵坐标绘图,其实也可以使用hold on实现类似效果(都在一个图里画两个)
- 其中x1,x2常用同一个x作为参数
- function参数可选,用于指定绘图模式,常用模式为 plot, semilogx, semilogy, loglog, stem等
- 如:plotyy(x,y1,x,y2,’plot’,’stem’)(一个正常绘图,一个火柴棒模型)
- 参考:https://blog.csdn.net/weixin_45492560/article/details/113944060
- subplot(i,j,n)
- i:几行
- j:几列
- n:目前指定为第几个图
- 相当于figure(),将子图转换为当前上下文的绘图对象
- 使用subplot(2,2,[1,3])可以将1,3两幅图合并为一个图进行绘画(拉长了)
- plot(x,y,’CLM’)
三维
- view()
- 改变相机(观察者位置)
- view([45,20]):使用方位角改变相机位置,方位角45,仰角20
- view([20,30,20]):使用坐标定义相机位置,三维坐标[20,30,20]
- rotate(h,direction,alpha,[origin])
- 用于旋转图形 h:图形对象引用(句柄)
- direction:旋转中心轴的方向向量
- origin:旋转中心轴的原点(和方向向量一起确定旋转轴,默认是[0,0,0])
- alpha:旋转的角度(顺时针方向,对于方向向量而言)
- colordef [options]
- 注意只能给figure对象使用,且需要使用clf清空figure
- colordef white:设置图形的背景颜色为白色;
- colordef black:设置图形的背景颜色为黑色;
- colordef none:将图形的背景颜色设置为软件默认的颜色;
- colormap()
- colormap(map):将图形设置为map颜色
- colormap(‘default’):设置当前图形的颜色为默认颜色
- cmap=colormap:获取当前图形的颜色矩阵
- colormap中的颜色可以是自己定义的RGB颜色向量如[0,0,1],也可以使用matlab提供的颜色函数[jet、hsv、hot、cool、spring、summer、autumn、winter、gray、bone、copper、pink、lines]
- 例如:colormap(jet)
- colorbar()
- colorbar;在当前轴右边显示颜色刻度
- colorbar(‘off’);colorbar(‘hide’); colorbar(‘delete’):关闭当前图形所有轴的颜色标尺
- colorbar(‘location’,’North’):在图形中确定的地方产生颜色标尺
- brighten(beta)
- 当beta取[0,1]时,图形变亮;当beta取[-1,0]时,图形变暗;
- plot3(x,y,z)
- 其中x,y,z可以是同型矩阵,可以是向量(矩阵的情况下就是多个线)
- plot3(x1, y1, z1, x2, y2, z2 …, xn, yn, zn) :多组x、y、z参数,每一组绘制一条曲线。
- plot(x, y, z, 选项):选项用于指定线型,颜色和数据点标记
- 顶级三维绘图
- surf(X,Y,Z)
- 参考:https://iymark.com/program/matlab-function-surf.html
- 创建一个三维曲面图,自动随高度着色,将矩阵 Z 中的值绘制为 x-y 平面中的网格上方高度
- surf(Z):将Z得行索引,列索引用作x坐标和y坐标
- surf(Z,C):C指定颜色,颜色
- surf(ax,_) 将图形绘制到 ax 指定的坐标区,而非当前坐标区中。坐标区引用为第一个参数
- 可使用shading interp来消除黑线
- surfc():加等高线版本的surf()
- 与mesh区别详见mesh()函数部分
- surfl()
- 参考:https://iymark.com/program/matlab-function-surfl.html
- 来绘制具有基于颜色图的光照的曲面图,可以指定光源位置,除了光源外和surf用法相同
- surfl(X,Y,Z):自带默认光源的surf版本,将基于Z值与光源来绘制颜色
- surfl(X,Y,Z,’light’):自带matlab提供的光源的surf版本,光源位置更像在正上方
- surfl(X,Y,Z,s,k) :s为光源的方向,k为反射常量
- surfl(ax,_) :将图形绘制到 ax 指定的坐标区中
- 修改属性:s = surfl(z) => s.EdgeColor = ‘none’ (去掉原本的黑边线)
- 光源方向s:使用方位角确认,s=[45,20] 指方位角45度,仰角20度(就是三维极坐标系)
- 反射常量k:k = [a,b,c,d] =>【环境光系数 + 漫反射系数 + 镜面反射系数 + 镜面反射亮度】
- 光源:
- light(‘position’, pos,’color’,’w’):position使用三维向量标明光源位置,color指定光源颜色
- lightangle(az,el):使用角向量指定光源照射方向
- 上述函数都可创建之后使用句柄.属性来改变,不知道属性都有啥的使用 set(x) 查看
- 使用light之前,图形各处均采用相同强度的漫射光
- lighting [options]
- 改变渲染模式:注意要在使用了light或者lightangle之后再调用
- option = [flat , goutaud , phong , none]
- flat 入射光均匀洒落在图形上的每个面上,主要与facted配用,他是默认模式
- gouraud 先对顶点颜色插补,再对顶点勾划的面色进行插补,用于曲面表现
- phong 对定点出法线插值,在计算各个像素的反光,表现效果最好
- none 使所有光源关闭
- material [options]
- 改变材质:同样要在light后用
- option = [shiny , dull , metal , default ]
- shiny 使对象比较明亮;镜反射份额较大,反射光颜色仅取决于光源颜色。
- dull 使对象比较暗淡;漫反射份额较大,没有镜面亮点,反射光颜色仅取决于光源颜色。
- metal 使对象带金属光泽;镜反射份额很大,背景光和漫反射份额很小,反射光颜色仅取决于光源和图形表面两者的颜色,该模式为默认设置。
- default 返回默认设置模式。
- shading [options]
- 用于控制曲面和补片图形对象的颜色着色,可以用于去除线条过密的时候黑麻麻一片
- shading flat:网格线和面设为恒定颜色(线段端点或面角边处最小索引的颜色值)
- shading faceted:具有叠加的黑色网格线的单一着色 => 默认的着色模式
- shading interp:在每个线条或面中对颜色索引进行插值来改变该线条或面中的颜色,无黑线
- shading(axes,…) :将着色类型应用于 axes_handle 指定的坐标区,如shading(gca,’interp’)
- ezsurf()
- 绘制函数f对应的三维图:

- mesh()
- 用于绘制网格三维图,和surf使用方式相同,区别是不会随高度在表面着色,仅仅对线着色
- [X,Y] = meshgrid(x,y) => mesh(x,y,z)
- 其中x y z 为同样size的矩阵
- meshc():带等高线版本的mesh()
- meshz():带底座版本的mesh()

- 点图
- 设置坐标轴
- set(gca,’XTick’,0:1:100);
- 添加标注
- view()
area()(面域图)
- 使用area(x,y,0),其中0表示基值,即纵轴刻度从何开始
- 可以直接使用area(Y)进行绘图,绘制的所有线是不会相交的,y值累加
- stem()(茎秆图)
- 和bar类似,多一个char参数filled,如果加上那么端点就是实心的
- bar()(直方图)
- bar()
- bar(y):每个y对应一个条形,如果是矩阵,则根据y中的行对条形分组
- bar(x,y):在x指定的位置绘制条形
- bar(__,style):指定样式
- grouped:将y中每一行展示为一组,如果是向量,就把所有条放到一组
- stacked:为y中每一行展示位一条,直接累加,一个条形多个颜色
- histc:显示直方图,其中条形紧挨在一起,不能指定 name - value 参数
- hist:与histc不同的是每个条形位于x刻度上方而非使条形跨越x刻度
- 注意bar中把单个向量按照列向量使用
- b.CData:b = bar(),b.CData(2,:) = [0,0,0],单独控制一个柱子的颜色
- barh()
- 和bar()用法一样,但是绘制的条形图是横向的
- bar3()
- 绘制三维条形图,基础用法和bar相同,多了控制宽度的width参数
- bar3(Z):绘制Z对应高度的三维条形图,三维仅仅为了方便观察,本质数据还是二维的
- bar3(__,style):指定样式,相对于bar多了detached - x 方向上将 Z 中的每一行的元素显示为一个接一个的单独的块
- bar3h()
- 和bar3()用法相同,但是绘制的条形图是横向的
- bar()
- pie(饼图)
- pie(X):绘制扇形图,按照所给X中的比例绘制
- pie(X,explode):指定索引处扇形是否分离开,即产生间隙 X,ex plode 长度相同
- pie(X,labels): labels = {‘Taxes’,’Expenses’,’Profit’}(指定对应扇形名称)
- pie3(X):和pie用法完全一样,pie3(a,double(a==min(a))) 可以将最小部分弹出
- scatter(散点图)
- scatter(x,y):绘制散点图,相同大小,相同style
- scatter(x,y,sz):绘制散点图,每个散点大小由sz指定,其中size(sz) = size(x) = size(y)
- scatter(x,y,sz,c,’filled’):指定每个散点的颜色,并填充散点其中size(c) = size(x)
- scatter(x,y,sz,’d’):指定散点的形状为菱形
- 其他可修改的属性可以通过get() + 句柄.修改
- scatter3(x,y,z):基本用法和scatter相同,但是结果为三维图形
plotmatrix(多图)
- 参考:https://zhuanlan.zhihu.com/p/345737250
- 有点花哨,不建议直接使用,使用subplot自定义更加好一点
- a = rand(50,3); b = randn(50,3); plotmatrix(a,b)

- 这里横坐标是a,均匀均布;纵坐标是b,随机分布。图窗第i行是b的第i列数据,第j列是a的第j列数据。
- 例如,[2, 2],横坐标是a的第2列,纵坐标是b的第2列。
属性
句柄属性设置方法
- 创建对象x之后使用set(x)查看对象都有那些可以设置的属性以及对应的属性都有何选项
线(形状 标记 颜色)
读取
- imread(‘filename’):支持GIF,但是imwrite不支持GIF
- 写入
- 灰度(二维)
- A = rand(50);
- imwrite(A,’myGray.png’)
- 真彩(三维.jpg)
- A = rand(49,49);
- A(:,:,2) = rand(49,49);
- A(:,:,3) = rand(49,49);
- imwrite(A,’newImage.jpg’,’quality’,’q’):其中q代表图像质量介于1-100
- print
- print -fno -dfileformat -rresno filename
- no:感兴趣的图形窗口的图形编号
- fileformat:文件格式
- resno:单位为dpi的分辨率
- filename:我们希望为文件指定的文件名
- 示例
- print -f1 -dtiff -r300 aniun1
- 将窗口1内容以300dpi的分辨率输出到一个名为aniun1的tif文件中
- print -fno -dfileformat -rresno filename
- 灰度(二维)
- 显示
- imshow(f,G)
- f:图像数组
- G:灰度级别
- imshow(f,[low high])
- 将所有小于low的灰度图像都显示为黑色,所有大于high的都显示为白色
- 如果省略[ low high]只给一个[]那么自动将low high选取为图像中最大最小灰度
- imfinfo(‘filename’)
- 显示图片的基本信息
- imshow(f,G)
- 获取信息
- [M,N] = size(im):获得图像像素大小(分别是行列)
修改属性
写入
- GIF
- F=getframe(gcf);
- I=frame2im(F);(将frame转换为img)
- [I,map]=rgb2ind(I,256);(将三维转换为平面图索引)
- if pic_num==1
- imwrite(I,map,’test.gif’,’gif’,’Loopcount’,inf,’DelayTime’,0.2);
- else
- imwrite(I,map,’test.gif’,’gif’,’WriteMode’,’append’,’DelayTime’,0.2);
- end
- pic_num = pic_num + 1;
- 注意每次绘图完毕之后使用drawnow limitrate更新才能获取最后图像
- GIF
内存播放
注意
- matlab中字符串和数值无法直接拼装到一个列表的,即使一个矩阵的不同列也不行
- 字符串和值放到一起的唯一方法就是使用cell数据结构进行装载
- 表格
- 读取xls:
- [num,txt,cells] = xlsread(’文件名’)
- C = readcell(filename):读取为cell
- 其中num读取文件中的数字列,txt为字符串列
- cells读取全部数据,但是为cell格式,需要转换
- 读取csv:csvread(’文件名’)
- 通用读取:
- A = readmatrix(filename,[opts],[name,value])
- 红色部分为可选参数,函数会根据后缀名选择读取文件的方式
- 文本:readmatrix(‘sp2017-2.csv’, ‘OutputType’, ‘string’);
- 数字:readmatrix(‘sp2017-2.csv’, ‘OutputType’, ‘double’);
- 类型包含:
- 建议直接读取string,数字可以进行强转
- 读取xls:
- 内部数据
- 保存:save(‘file.mat’,’A’)(A为变量名,file为文件名)
- 加载:load(‘file.mat’)
文档
- 追加进txt:save([path, ‘data.txt’], ‘data’, ‘-ascii’, ‘-append’)
- 字符串写入txt(打开后追加)
- a = ‘abc’
- fid = fopen(‘xxx.txt’,’wt’,’n’,’UTF-8’)(其中n默认,UTF-8指编码方式)
- fprintf(fid,’%s\n’,a)(\n表示按列输入)
- fclose(fid)
- 读取txt
- [A,COUNT]=fscanf(fid , format , size)
- A用来存放读取的数据
- COUNT返回所读取的数据元素个数
- fid为文件句柄
- format控制读取的数据格式,由%加上格式符组成,格式符有:
- d(整型)
- f(浮点型)
- s(字符串型)
- c(字符型)
- 在%与格式符之间还可以插入附加格式说明符,如数据宽度等。
- size为可选项,决定矩阵A中数据的排列形式,它可以取下列值:
- N(读取N个元素到一个列向量)、
- inf(读取整个文件)、
- [M,N](读数据到M×N的矩阵中,数据按列存放)
- 打开方式
基础
- 清屏:clc
- 暂停:pause(0.1)
- 计时:tic开始 toc结束
- 定义变量:syms xx
- 等待输入:input(‘xx’)
- 删除变量:clear xx
- 上下颠倒:flipud(A)
- 数组长度:length(a)
- 矩阵尺寸:size(a)
- 元素个数:numel(A)
- 矩阵维度:ndims(A)
- all、any和xor:
- all(A):对于2 2 输出 1 2 logical向量表示每一列中是否全部都是非0元素
- any(A):对于2 2 输出 1 2 logical向量表示每一列中是否包含一个非0元素
- xor(A,B):输出AB相同size矩阵,表示每个元素对应异或结果(logical矩阵)
- 最大值:
- max(A,B)):取两个中每个元素最大的组成同纬度数组输出
- max(A,[],1):取A中第一维度中最大的值组成向量输出
- 异常
- error(‘输入不符合要求’)(退出脚本)
- warning(‘输入不符合要求’)(不会退出)
- break:退出循环
- 随机数
- rand(2,3):产生2*3大小的随机矩阵,值为0-1
- randn(2,3):产生2*3的随机矩阵,为正态分布,方差为1,标准差为1
- 维度(dim,常用在函数内作为参数)
- 第一维度是垂直,就是行数
- 判断是否
- iscell(C):如果C是单元数组,则为真
- iscellstr(s):如果s是字符串单元数组,则为真
- ischar(s):若s是字符串,则为真
- isempty(A):如果A是空数组[],则为真
- isequal(A,B):如果AB拥有相同的元素和维数,则为真
- isfeild(S,’name’):若’name’是结构S的一个域,则为真
- isfinite(A):若数组A元素有限,则为真
- isinf(A):若数组A元素无限,则为真
- isletter(A):A中元素是否是字母表中字符
- islogical(A):是否是逻辑数组
- ismember(A,B):若A的元素也是B的元素,则为真
- isnan(A):A元素是否是NaN
- issparse(A):A是否是稀疏矩阵(0的数量远远大于1,且分布无规律)
- isstruct(S):S是否是结构体
- 数学
- 参考
- 开方:sqrt()
- 绝对值:abs()
- 最小值:min()
- 最大值:max()
- 平均数:mean()
- 标准差:std()
- 四舍五入:round()
- 四舍五舍:fix()
- 变小舍入:floor()
- 变大舍入:ceil()
- 强转浮点:double(a)(double(true)=1)
- 输入输出
- disp([‘’]):
- 基本输出,一个字符串列表(列表可以套娃,但是数据类型必须为一种)
- 如果是数字,必须使用num2str() 先进行转换
- clc:清屏
- t = input(‘message’):
- 先输出message内容,然后等待输入之后的回车
- 回车后将前边输入的内容赋值给t
- disp([‘’]):
- 数据
- class(a):判断数据类型
高级
常用函数
- (end):在矩阵引用时end代表所在维度长度,A(end,end)取右下角元素
- sortrows(A,[column],[direction],):按照所给维度以及行排序
- reshape(a,n,m):将矩阵a重整为n*m矩阵
- find(通用查找)
- x = find(A=1,[n],[direction])
- x:表示符合条件元素索引,按列数(三排一列显示为3)
- n:找到n个后暂停(结果至多返回n个)
- direction:搜索方向,first表示从头开始,last代表从尾开始
- [row,col,[v]] = find(A=1,[n],[direction])
- v:符合条件的元素值
- row:符合条件元素所在行
- col:符合条件元素所在列
- x = find(A=1,[n],[direction])
- ismember(矩阵查找)
- Lia = ismember(A,B)
- 查找A是否含有元素在B中,含有则在相应位置置1,返回size与A相同
- 其中B,A size不做限制,可以相互不等或者大于小于
- A = [5 3 4 2]; B = [2 4 4 4 6 8]; 则 Lia = [0 0 1 1];
- [Lia,Locb] = ismember(A,B)
- Locb:对应元素的索引,size和A相同,索引值为B中按列数个数
- Lia = ismember(A,B)
- 内存预分配
- 数值型:
- pre = zeros(m,n);
- pre = ones(m,n);
- 字符型:
- pre = char(zeros(m,n));
- pre = char(ones(m,n));
- 字符串型:
- pre = string(zeros(m,n));
- pre = string(ones(m,n));
- 结构体型
- 数值型:
- 列表
- 常用
- 长度:length(A)
- b中不等于0的元素的索引:find(b~=0)
- a中与b相等的元素的01矩阵:ismember(a,b)(可以颠倒ab位置得到0 1值)
- 切片
- x1 = x(0:10)
- 初始化
- x = 0:0.1:10:创建从0-10等间隔0.1的列表
- linspace(0,10,20):从0到10创建拥有20个等间隔数字的列表
- 常用
矩阵
- 常用
- 转置:A = B’
- 索引:
- A = B([1 2],[4 6]):即取出 14 16 24 26 四个位置的元素,这个方式某些情况似乎非常便捷
- A = B(1:end):获取1-最后一行的所有元素
- A = B(end:-1:1):获取所有元素的倒序
- A = B(B>1):获取B中所有大于1的元素,结果是一个向量
- 初始化
- [X,Y] = meshgrid(x,y)
- 其中x,y为向量,结果矩阵大小为[ len(x) + len(y) ] * 2
- 使用两个参数接收两个矩阵,相当于x的纵向复制 + y的横向复制
- X = ones()
- ones(4):创建一个4*4的1矩阵
- ones(3,2):创建一个
- ones(size(A)):创建一个和A大小相同的全1矩阵
- X = zeros()
- 基本用法和ones()相同,仅仅是创建出来的元素全部为0
- X = true()
- 基本用法参见ones(),创造出来元素全部为逻辑1,类型为logical
- X = false()和true类似,但是元素都是0
- X = magic(M)
- 生成M*M大小的矩阵
- 其中每一行元素之和,每一列元素之和,主对角线元素之和都相等
- X = repmat()
- repmat(‘a’,2,3):创建一个2*3矩阵,内容全部为a
- repmat(‘a’,2):创建一个2*2矩阵,内容全部为a
- repmat(‘ab’,2):创建一个2*1矩阵,内容为abab;abab(自动拼接)
- 其中元素可以替换为矩阵,如repmat(A,2)创建一个size(A)*2大小的重复A的矩阵
- 元素后的维度可以无限,如repmat(‘a’,2,3,4,5)创建一个234*5大小的四维矩阵
- 随机数
- [X,Y] = meshgrid(x,y)
- 常用
cell
- 简介:
- 是一种封装结构,内部可以防止各种类型
- 拼接两个cell使用 a = [a;b] 和列表相同
- 参考:
- 访问
- 使用(x,y)访问获得的是单个cell对象
- 使用{x,y}访问获取的是cell的内容
- 创建
- cell(m,n):预创建元胞数组
- cell = {[1,2,3] , [‘this’,’is’,’me’] , [] ; 214 , 5 , 1e-5}:直接创建
- 格式转换
- string(cell):全部size皆可转为string(双引号字符串)
- char(cell):全部size皆拉为一列,形成一个字符串向量(单引号)
- 常用函数
- iscell(M):判断是否是元胞数组
- celldisp(M):输出元胞数组内容
- cellplot(A,’legend’):绘制cell内容
- 简介:
- table
- 参考:https://blog.csdn.net/qq_43157190/article/details/104721950
- 创建
- tab = table(ListA,ListB,’VariableNames’,ListcolName)
- ListA与ListB都是列向量表示table的数据,且参数数目不定
- ‘VariableNames’表示列向量的名称,用于索引对应列
- 访问
- table(1,:) % 返回类型是table
- table{1,:} % 返回类型是array
- table.name % 返回类型是array,与上面的方法效果一样
- map
- 官方参考
- 注意
- 由于map是一个对象,所以map的copy只是进行句柄的复制
- 对于复制后的句柄的操作都相当于在原来的对象上的操作
- 如果是字符串key,需要使用char先将cell转换为字符串(key自动转换为cell的)
- 创建
- M = containers.Map(keySet,valueSet):其中keySet和valueSet都是列表
- M = containers.Map:创建一个空的map
- 获取 + 修改
- 获取:使用M(‘keyname’)来获取对应的value
- 修改:可以通过M(‘keyname’) = value来覆盖原来的value
- 相关函数
- TF = isKey(M,keySet):
- 如果M中包含键keyset,则返回1否则0
- 如果keyset为数组,那么TF也是数组
- L = length(M)
- 返回M中键值对的个数
- keyset = keys(M)
- 返回M中所有key组成的数组
- remove(M,keyset)
- 从map对象中删除键值对组
- valueset = values(M)
- 返回M中所有的值组成的数组
- TF = isKey(M,keySet):
struct(结构体)
基本知识
- 创建
- 使用’’单引号标识字符串
- 使用字符串组成数组时需要每个字符串长度相同
- 引号
- 单双引号不同
- 单引号用于字符串连接,无法用于组件数组(会被自动拼接)
- 双引号不能直接使用索引访问,但是可以组成数组
- 单引号转换为双引号可以直接使用B = string(A)其中A可以是数组,还可以是cell矩阵
- 单双引号不同
- 缺失
- 缺失值显示为
使用ismissing(s)来判断是否是缺失值 - 空值为””使用==运算符即可识别
- 缺失值显示为
- 连接
- b = [a,c]
- b = strcat(a,c)
- 创建
- 相关函数
- 常规
- length(a):获取长度(不能获取双引号长度,可单引号)
- strlength(a):获取字符串长度(可以获取双引号字符串长度)
- strcat(a,b):连接两个字符串,ab首先被去掉尾部空格(参数可为两个列表)
- eval(s):将字符串中的内容作为命令执行
- deblank(s):去掉s中的所有空格
- 切割 + 选择
- strsplit(a,b):将a以b作为分隔符分割开(异常费时间,非必要不使用)
- 格式转换
- abs:将字符串转为ASCLL码
- char:将ASCLL码值转化为字符
- mat2str:将矩阵转化为字符串
- int2str:将整数转为字符串
- num2str:将数值转为字符串
- str2num:将字符串转为数值
- 比较
- strcmp(a,b):比较两个字符串是否相等
- strncmp(s1,s2,n):比较两个字符串前n个字符是否相等。相等1,否则0
- strcmpi(s1,s2):忽略字母大小,比较是否相等。相等返回1,否则,返回0
- strncmpi(s1,s2,n):忽略字母大小,比较前n个字符是否相等。相等1,否则0
- 查找 + 替换
- findstr(s1,s2):返回短字符串在长字符串中的位置
- strfind(s,pattern):返回s中匹配到的模式的起始索引(可为字符串和正则)
- contains(s,pattern):s中包含pattern就返回1,true否则返回0,false
- strrep(s1,s2,s3):将s1中所有s2替换为s3
- a_cell = {‘ni’, ‘hao’}
- idx = find(ismember(a_cell, ‘ni’ ))
- idx = find(strcmp(a_cell, ‘ni’ ))
- 第二个更快(字符串cell情况下)
- 高级
- 词频统计:
- rank = tabulate(A)
- A:字符串列表
- rank:三列分别为单词,词频,占比
- 使用sortrows(rank,-2);进行按词频排序
- 词频统计:
- 常规
正则表达式
- 函数
- startIndex = regexp(str,expression)
- 匹配正则表达式,大小写敏感
- 返回 str 中与该正则表达式指定的字符模式匹配的每个子字符串的起始索引。
- 如果没有匹配项,则 startIndex 为空数组
- [startIndex,endIndex] = regexp(str,expression):返回匹配项的开始和结束索引
- regexpi
- 匹配正则表达式,大小写不敏感
- regexprep
- 基于正则表达式进行字符替换
- startIndex = regexp(str,expression)
- 元字符
- 函数
函数相关
- 通用求解
- 函数值代入:subs(z,x,xn)
- 其中z为函数(如z = (y-yp)^2/a^2+(x-xp)^2/b^2-1)
- xn是二次函数中需要代入x的值
- 解函数:solve(zz)
- 其中zz是可解的方程组
- 如zz = subs(z,x,xn)
- 使用之前一定要声明变量:syms x y;
- 计算最终结果:eval()
- 有时候结果是一个表达式,想要解出需要用此函数
- 二次函数求根:roots([1,2,3])
- 三次函数的话就依次递增参数即可
- 函数值代入:subs(z,x,xn)
- 函数拟合
- 神级插值
- https://zhuanlan.zhihu.com/p/73931917
- 一维插值:y = interp1(X,Y,X1,method)
- method一共有

- 个人感觉spline更适合平滑插值(数据少的时候拟合效果更好)
- 获取拟合对应点
- y = spline(xs,ys,x)
- xs 为 x原始数据list
- ys 为 y原始数据list
- x 是想要知道得x对应的点
- y 是从曲线中得到的点
- y = spline(xs,ys,x)
- 获取方程结构参数
- polyfit(x,y,次数)
- 常用绘图
- 神级插值
- 通用求解
方程组相关
求解方程组 ```matlab %% 拉伸计算 changed_data = zeros(length(org_data1),3); for i=1:10 i syms x y z center = org_data1(i,:); top = org_data2(i,1:3); bottom = org_data2(i,4:6);
a = (x-top(1))/(bottom(1)-top(1))-(y-top(2))/(bottom(2)-top(2))==0; b = (y-top(2))/(bottom(2)-top(2))-(z-top(3))/(bottom(3)-top(3))==0;
d = 300^2-x^2-y^2-z^2 == 0; r = x^2/(4*m) + h-300 ;
[x,y,z] = solve(a,b,d,[x,y,z]);
if isempty(x) x = 0; else x = vpa(x(1)); end if isempty(y) y = 0; else y = vpa(y(1)); end if isempty(z) z = 0; else z = vpa(z(1)); end changed_data(i,:) = [x(1),y(1),z(1)]; end
plot3(changed_data(:,1),changed_data(:,2),changed_data(:,3)) ```





