文章目录
- 一、Matlab知识学习
- 1、输入输出语句
- 2、exist函数的使用
- 3、matlab中的注释
- 4、几种常用的清除命令
- 5、MAT文件如何操作
- 6、dir()函数的用法
- 7、strcat()函数的使用
- 8、tic、toc的用法
- 9、ceil函数
- 10、size函数
- 11、double、im2double和mat2gray的区别
- 12、Matlab中的图像格式转换问题
- 13、如何在Matlab实现SURF算法
- 14、Matlab中legend与location
- 15、Matlab中的最小二乘法函数lsqnonlin
- 16、find函数
- 17、Matlab中数组(矩阵、向量)的大小
- 18、imwrite()函数
- 19、randn()函数
- 20、sum函数
- 21、matlab中的 :冒号表达式
- 22、MATLAB中的 .* 和 * 和 .^ 和 ^的区别
- 23、matlab中的stem()函数
- 二、Matlab程序调试遇到的问题及解决
- 1、运行.m文件出错:“xxxx.mexw64无效:........... ==缺少依赖共享库VCOMP100.DLL”==
- 2、错误使用 horzcat,==串联的矩阵的维度不一致==。
- 3、MEX-file 'xxx\xxx.mexw64' 无效: 找不到指定的模块。
- 4、错误使用 imwrite ,无法打开要写入的文件 "xxx/xxx"。您可能没有写入权限。
- 5、Found an interactive session. You cannot have multiple interactive sessions open simultaneously. To terminate the existing session, use 'delete(gcp('nocreate'))'.
- 6、matlab报错 “元胞内容引用自非元胞数组对象。”
- 7、matlab报错 “下标索引必须为正整数类型或逻辑类型。”
- 三、Matlab软件的使用
一、Matlab知识学习
1、输入输出语句
输入:input
输入数值
x=input(‘please input a number:’)
please input a number:22
x = 22
输入字符串
x=input(‘please input a string:’,‘s’)
please input a string:this is a string
x = this is a string
输出:输出有两种形式,你要确定你要把待输出的内容输出到哪里,是文件里还是commend window。fprintf是把数据以一定格式输出到一个文件里,disp是将提示字符串或变量值输出到commend window,还可以输出一个超链接。
disp(23+454-29*4)
361
disp(‘this is a string’)
this is a string
fprintf(‘The area is %8.5f\n’, area) % 注意输出格式前须有%符号,
%跳行符号须有\符号
The area is 12.56637 % 输出值为8位数含5位小数
参考链接1
参考链接2
注意:Matlab中disp、fprintf及sprintf三者之间的区别?
disp函数主要是用来讲信息直接显示在命令行里;
sprintf和fprintf都可以用来生成格式化的字符串,当然也可以直接接受没有格式的字符串,需要注意的是:
①sprintf是s(tring)print f(ormat)的含义,就是说其可以直接生成带格式的字符串的,通常并不直接用来显示在命令行;
②fprintf是f(ile)printf(ormat)的含义,可以用来直接进行文件的写入,如果不指定文件的fid那么直接输出到命令行;
2、exist函数的使用
官方文档:https://www.mathworks.com/
划到最下面就可以找到matlab里面涉及的相关函数及其使用。
官方文档中对于exist函数的解释是:
同时附带了许多例子,便于我们很好的理解,需要的可以自己去查看。
3、matlab中的注释
多行注释: 选中要注释的若干语句,工具栏菜单Text->Comment,或者鼠标右击选“Comment”,或者快捷键Ctrl+R
取消注释: 选中要取消注释的语句,工具栏菜单Text->Uncomment,或者鼠标右击选“Ucomment”,或者快捷键Ctrl+T
4、几种常用的清除命令
clc:清除命令窗口中的所有输入和输出信息的内容,对工作环境中的全部变量无任何影响 (即不影响历史记录)。
close:关闭当前的Figure窗口 。
close all:关闭所有的Figure窗口 。
clear 变量名:可以清除workspace中的无用的变量,尤其是一些特别大的矩阵,不用时及时清理,可以减少内存占用。
clear all:清除工作空间的所有变量,函数,和MEX文件
5、MAT文件如何操作
MAT文件是MATLAB使用的一种特有的二进制数据文件。MAT文件可以包含一个或者多个MATLAB 变量。MATLAB通常采用MAT文件把工作空间的变量存储在磁盘里,在MAT文件中不仅保存各变量数据本身,而且同时保存变量名以及数据类型等。所以在MATLAB中载入某个MAT文件后,可以在当前MATLAB工作空间完全再现当初保存该MAT 文件时的那些变量。这是其他文件格式所不能的。同样,用户也可以使用MAT文件从MATLAB环境中导出数据。MAT文件提供了一种更简便的机制在不同操作平台之间移动MATLAB数据。在MATLAB环境中,通常使用load和save两个命令进行MAT文件的读和写。
load函数可以从MAT文件中读取数据,例如要读取myname.dat文件,可以直接执行命令:load(‘myname.dat’)
save函数的功能是把当前MATLAB工作空间的一个或多个变量存写到外部文件。在默认情况下,save 函数以MAT格式存写数据。若在命令中直接调用该函数,不需要带任何参数,执行结果是把MATLAB工作空间的所有变量保存到系统默认的matlab.mat文件中。当然,带上文件名参数,就可以将当前工作空间中的所有变量存写在指定的 MAT文件中。
在现在很多的深度学习、机器学习任务中使用的都是python语言,这里介绍几种使用python语言打开MAT文件的方法。
1、
import mat4py
mat4py.loadmat(mat_path)
2、
import scipy.io as io
io.loadmat(mat_path)
3、
import h5py
mat = h5py.File(mat_path)
mat = np.transpose(mat[‘you_matrix_name_in_mat’])
6、dir()函数的用法
在Matlab中使用dir()函数来获取指定文件夹下的所有子文件夹和文件,并将其存放在一种为文件结构体数组中 。
dir()函数的调用方式有三种,分别是:
1、dir(’.’) —— 列出当前目录下所有文件夹和文件;
2、dir(‘D:\Matlab’) —— 列出当前指定的目录下的所有的子文件夹和文件;
3、dir(‘D:\Matlab*.jpg’) —— 列出指定目录下后缀为.jpg的文件。
7、strcat()函数的使用
8、tic、toc的用法
在Matlab中tic和toc是用来记录matlab命令执行的时间的,通常tic用来保存当前时间,而后使用toc来记录程序完成时间。
9、ceil函数
Matlab中的ceil函数主要是用来四舍五入的函数(朝正无穷大方向四舍五入)。
num = ceil(x) % 将 X 的每个元素四舍五入到大于或等于该元素的最接近整数。
>> num = ceil(5.6);
>num = 6
>> num = ceil(11.3);
>num = 12
10、size函数
Matlab中的size函数是用来获取矩阵的行数和列数,使用如下:
① s=size(A),
当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时矩阵的行数,第二个元素是矩阵的列数。
② [r,c]=size(A),
当有两个输出参数时,size函数将矩阵的行数返回到第一个输出变量r,将矩阵的列数返回到第二个输出变量c。
③ size(A,n)如果在size函数的输入参数中再添加一项n,并用1或2为n赋值,则 size将返回矩阵的行数或列数。其中r=size(A,1)该语句返回的时矩阵A的行数, c=size(A,2) 该语句返回的时矩阵A的列数。
注意:size() 和 length() 的区别
Matlab中size和length函数的区别:length是求某一矩阵所有维的最大长度。如:x是一维向量,那么length(x)就是求向量的长度;但size(x)仍然输出行列数。我们可以认为:length()=max(size())
size:获取数组的行数和列数。使用情形:①s=size(A),当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时数组的行数,第二个元素是数组的列数。②[r,c]=size(A),当有两个输出参数时,size函数将数组的行数返回到第一个输出变量,将数组的列数返回到第二个输出变量。③如果在size函数的输入参数中再添加一项,并用1或2为该项赋值,则size将返回数组的行数或列数。其中r=size(A,1)该语句返回的时数组A的行数, c=size(A,2) 该语句返回的时数组A的列数。
11、double、im2double和mat2gray的区别
12、Matlab中的图像格式转换问题
13、如何在Matlab实现SURF算法
14、Matlab中legend与location
15、Matlab中的最小二乘法函数lsqnonlin
16、find函数
Matlab中的find函数主要用来寻找非零元素的索引和值。
参考链接1
参考链接2
17、Matlab中数组(矩阵、向量)的大小
Matlab中查看数组大小的函数有size、length、numel以及ndims函数。
size() —— 获取矩阵各个维数的大小,或者指定维度的大小。
length() —— 获得数组的长度,即一维数组的长度或者多维数组中最大的维数行数或列数中的较大值。
numel() —— 计算一个数组所有的元素数或指定下标的元素总和。
ndims() —— 获取矩阵的维数。
18、imwrite()函数
1、保存到当前文件夹下:imwrite(image,‘xxx.jpg’);
2、保存到当前文件夹下的一个子文件result下:imwrite(image,’./result/xxx.jpg’);
3、保存到当前文件夹上一层的一个文件夹result下:imwrite(image,’…/result/xxx.jpg’);
其中image为要保存图像,xxx.jpg为文件名,保存为jpg格式,也可以是其他格式(jpeg, png,bmp, tif…)。
注意:保存在matlab路径下的子文件夹中,需要提前要提前建立一个文件夹result,并且将创建的文件夹加到当前工作目录下才可以,否则会报错。
19、randn()函数
randn:产生正态分布的随机数或矩阵的函数
randn:产生均值为0,方差σ^2 = 1,标准差σ = 1的正态分布的随机数或矩阵的函数。
用法:
Y = randn(n):返回一个n*n的随机项的矩阵。如果n不是个数量,将返回错误信息。
Y = randn(m,n) 或 Y = randn([m n]):返回一个m*n的随机项矩阵。
Y = randn(m,n,p,…) 或 Y = randn([m n p…]):产生随机数组。
Y = randn(size(A)):返回一个和A有同样维数大小的随机数组。
randn
返回一个每次都变化的数量。
matlab中的rand,randn,rands和randi函数使用
rand(m,n) 生成m行n列均匀分布在(0~1)之间的伪随机数
randn (m,n) 生成m行n列标准正态分布的伪随机数(均值为0,方差为1)
rands(m,n) 生成m行n列均匀分布在(-1~1)之间的伪随机数
randi 生成均匀分布的伪随机整数
20、sum函数
b=sum(a,dim);
a表示矩阵;
dim等于1或者2。表示每列求和还是每行求和(1表示每一列进行求和,2表示每一行进行求和)。
b表示求得的行向量。
matlab中的sum函数,max函数以及any函数
21、matlab中的 :冒号表达式
在MATLAB中,冒号是一个重要的运算符,利用它可以产生行向量。冒号表达式的一般格式为:
a : b : c
**其中,a为初始值,b为步长,c为终止值(c>a)。冒号表达式可产生一个由a开始到c结束,以步长b自增的行向量。**例如:
t=0:2:10
t =
0 2 4 6 8 10
在冒号表达式中如果省略b,则步长为1.例如,t=0:5与t=0:1:5等价。
22、MATLAB中的 .* 和 * 和 .^ 和 ^的区别
一句话简单明了的说明二者的区别:
不加点的是矩阵运算,矢量运算
加点的是矩阵内部元素运算,标量运算
23、matlab中的stem()函数
stem()函数是matlab中的绘图函数,具体用法如下:
stem(Y) 将数据序列Y从x轴到数据值按照茎状形式画出,以圆圈终止。如果Y是一个矩阵,则将其每一列按照分隔方式画出。
stem(X,Y)在X的指定点处画出数据序列Y。
stem(…,‘filled’) 以实心的方式画出茎秆。
stem(…,‘LINESPEC’) 按指定的线型画出茎秆及其标记。
二、Matlab程序调试遇到的问题及解决
1、运行.m文件出错:“xxxx.mexw64无效:… 缺少依赖共享库VCOMP100.DLL”
参考链接1 亲测有效
2、错误使用 horzcat,串联的矩阵的维度不一致。
查资料发现horzcat是Matlab中的数组拼接函数。Matlab中一共包含3个和数组拼接相关的函数,分别为cat、vertcat以及horzcat函数。
cat —— 沿指定维度拼接数组。
vertcat —— 垂直串联数组。
horzcat —— 水平串联数组。
3、MEX-file ‘xxx\xxx.mexw64’ 无效: 找不到指定的模块。
网上找到的方法都是说,安装MinGW w64,然后重新编译就可以,但我在编译.cpp文件时却报出没有对应的.h头文件。
4、错误使用 imwrite ,无法打开要写入的文件 “xxx/xxx”。您可能没有写入权限。
出现这个错误,你可以自己手动创建路径中没有的文件夹,但是创建完 一定要记得将创建的文件夹加入到matlab的当前工作路径下,要不还是会出错。
总结:
1、未创建的文件夹可以自己手动创建;
2、将创建的文件夹加入到当前工作路径中;
(注意:第二步一定不要忘)
5、Found an interactive session. You cannot have multiple interactive sessions open simultaneously. To terminate the existing session, use ‘delete(gcp(‘nocreate’))’.
这是因为你触发了matlab中的多任务,这是不允许的,关闭当前任务,再运行即可。
如下图,这个图标显示蓝色时,表示当前已有任务在运行,当我们再次运行时,必须先关闭,再运行。
6、matlab报错 “元胞内容引用自非元胞数组对象。”
7、matlab报错 “下标索引必须为正整数类型或逻辑类型。”
三、Matlab软件的使用
1、如何在cmd下运行matlab代码
命令是:matlab -nodesktop -nosplash
具体可参考下面的链接。
参考链接1
2、matlab运行按钮上出现蓝色带三个点的小圈,怎么解决??
点运行下拉列表
右击运行,然后在弹出的列表中选择删除即可。