数据类型转换
1、数值型矩阵转换为字符数组(num2str、mat2str)
>> A=[1,2,3;4,5,6];
>> B=num2str(A)
B =
1 2 3
4 5 6
>> whos
Name Size Bytes Class Attributes
A 2x3 48 double
B 2x7 28 char
2、字符数组转换为数值型(str2num<4位精度>、str2double<双精度>)
>> B=['123.34'];
>> A=str2num(B)
A =
123.3400
>> whos
Name Size Bytes Class Attributes
A 1x1 8 double
B 1x6 12 char
3、单元数组转换为字符数组(cell2mat)
>>A={'sfjsdlgksdgjlsdjgkl'};
>>B=cell2mat(A)
B =
sfjsdlgksdgjlsdjgkl
>> whos
Name Size Bytes Class Attributes
A 1x1 98 cell
B 1x19 38 char
对cell数组的操作函数:
cell:创建空的元胞数组
cellfun:为元胞数组的每个元胞执行指定的函数
celldisp:显示所有元胞的内容
cellplot:利用图形方式显示元胞数组
cell2mat:将元胞数组转变成为普通的矩阵
mat2cell:将数值矩阵转变成为元胞数组
num2cell:将数值数组转变成为元胞数组
deal:将输入参数赋值给输出
cell2struct:将元胞数组转变成为结构
struct2cell:将结构转变为元胞数组
iscell:判断输入是否为元胞数组
cellfun函数:
主要功能是对元胞数组的元素(元胞)分别指定不同的函数;能在cellfun中使用的函数如下:
isempty:若元胞元素为空,则返回逻辑真
islogical:若元胞元素为逻辑类型,则返回逻辑真
isreal:若元胞元素为实数,则返回逻辑真
length:元胞元素的长
ndims:元胞元素的维数
prodofsize:元胞元素包含的元素个数
a={123,'abcde';1-7i,ones(3,3)}
a =
[ 123] 'abcde'
[1.0000 - 7.0000i] [3x3 double]
>> b=cellfun('isreal',a)
b =
1 1
0 1
>> c=cellfun('length',a)
c =
1 5
1 3
4、字符数组转换为单元数组(cellstr)
>>A=['what';'edit';'play'];%注意:用A=[]生成字符数组是,必须保证每行有相同的长度,不够可用空格补
>>B=cellstr(A)
B =
'what'
'edit'
'play'
>> whos
Name Size Bytes Class Attributes
A 3x4 24 char
B 3x1 204 cell
5、单元数组转换为数值型矩阵
>> A={'123.4'};
>> B=cell2mat(A)
B =
123.4
>> C=str2num(B)
C =
123.4000
>> whos
Name Size Bytes Class Attributes
A 1x1 70 cell
B 1x5 10 char
C 1x1 8 double
6、数值型矩阵转换为单元数组(num2cell)
>> A=[1,2,3;4,5,6];
>> B=num2cell(A)
B =
[1] [2] [3]
[4] [5] [6]
>> whos
Name Size Bytes Class Attributes
A 2x3 48 double
B 2x3 408 cell
7、字符串数组、cell细胞元素区别
% 例1:创建一个字符串数组,记住补空格
>>S= ['abc '; 'defg';'hi '] (下划线代表空格)
S =
abc
defg
hi
>>whos S
Name Size Bytes Class
S
3x4 24 chararray
% 例2:下面使用cellstr将字符数组,转换为3*1的cell细胞元组,此时尾部空格会自动删除 :
>>c = cellstr(S)
c =
'abc'
'defg'
'hi'
>>whos c
Name Size Bytes Class
c 3x1 294 cellarray
% 例3:再使用char函数将cell字符串转换为字符数组
>>char(c)
ans =
abc
defg
hi
>> whos ans
Name Size Bytes Class Attributes
ans 3x4 24 char
字符串处理
1、获取字符串长度
length(a)
2、连接两个字符串, 每个字符串最右边的空格被裁切
% 方法一:中括号
SC=[str1,str2]
SC = Iloveyou123
%方法二:strcat函数
SB=strcat(str1,str2)
SB = Iloveyou123
strcat(['Red','Yellow'],['Green','Blue'])
ans = RedYellowGreenBlue
strcat({'Red','Yellow'},{'Green','Blue'})
ans =
{
[1,1] = RedGreen
[1,2] = YellowBlue
}
%方法三:sprintf函数
STR=sprintf('%s%d',str1,789)
STR = Iloveyou789
3、连接多行字符串
e=strvcat(a,b,c)
4. char连接,空字符串会被空格填满
f=char(a,b,m)
5.字符串分割
S = regexp(str, char, 'split') % str:待分割字符串 char: 作为分隔符的字符 s:字符分割出的结果
str_sample = ' Hello Nocturne Studio '
new_str = strtrim(str_sample) % 删除首尾空白
new_str = Hello Nocturne Studio
% 符串是以一个或多个空格分隔
S = regexp(new_str , '\s+', 'split')
S =
{
[1,1] = Hello
[1,2] = Nocturne
[1,3] = Studio
}
S(1) % cell型
ans =
{
[1,1] = Hello
}
char(S(1)) % str型
ans = Hello
% 以制表符分隔
S = regexp(new_str , '\t', 'split')
S =
{
[1,1] = Hello Nocturne Studio
}
6. 判断字符串是否相等
% strcmp 比较两个字符串是否完全相等,是,返回真,否则,返回假
% strncmp 比较两个字符串前n个字符是否相等,是,返回真,否则,返回假
% strcmpi 比较两个字符串是否完全相等,忽略字母大小写
% strncmpi 比较两个字符串前n个字符是否相等,忽略字母大小写
% isletter 检测字符串中每个字符时否属于英文字母
% isspace 检测字符串中每个字符是否属于格式字符(空格,回车,制表,换行符等)
% isstrprop 检测字符每一个字符是否属于指定的范围
a='d sdsdsd 15#';
b=isletter(a)
c=isspace(a)
b =
1 0 1 1 1 1 1 1 0 0 0 0
c =
0 1 0 0 0 0 0 0 1 0 0 0
7. 字符串替换和查找
% strrep 进行字符串替换,区分大小写
% strrep(str1,str2,str3)
% 它把str1中所有的str2字串用str3来替换
% strfind(str,patten) 查找str中是否有pattern,返回出现位置,没有出现返回空数组
% findstr(str1,str2) 查找str1和str2中,较短字符串在较长字符串中出现的位置,没有出现返回空数组
% strmatch(patten,str) 检查patten是否和str最左侧部分一致
% strtok(str,char) 返回str中由char指定的字符串前的部分和之后的部分,
mm='youqwelcome';
[mm1,mm2]=strtok(mm,'q')
mm1 = you
mm2 = qwelcome
% blanks(n) 创建有n个空格组成的字符串
% deblank(str) 裁切字符串的尾部空格
% strtrim(str) 裁切字符串的开头和尾部的空格,制表,回车符
% lower(str) 将字符串中的字母转换成小写
% upper(str) 将字符串中的字母转换成大写
% sort(str) 按照字符的ASCII值对字符串排序
% num2str 将数字转换为数字字符串
% str2num 将数字字符串转换为数字
% mat2str 将数组转换成字符串
% int2str 把数值数组转换为整数数字组成的字符数组
8. CELL数组中的字符串比较
c=cell(2,1);
c(1,1)=cellstr('xxx')
c(2,1)=cellstr('yyyyyyy')
strcmp(c{1,1},c{2,1})
c =
{
[1,1] = xxx
[2,1] = [](0x0)
}
c =
{
[1,1] = xxx
[2,1] = yyyyyyy
}
ans = 0
9. 字符串合并和分割(空格)
合并
C = {'one','two','three'};
str = strjoin(C)
str = one two three
分割
str = 'The rain in Tokyo.';
C = char(strsplit(str))
C =
The
rain
in
Tokyo.
D = char(strsplit(str)(4))
D = Tokyo.
路径处理
1、filesep : 返回特定于平台的文件分隔符
f = filesep
% Windows 反斜杠(\)
iofun_dir = ['toolbox' filesep 'matlab' filesep 'iofun']
iofun_dir =
'toolbox\matlab\iofun'
% Linux 斜杠(/)
iofun_dir = ['toolbox' filesep 'matlab' filesep 'iofun']
iofun_dir =
'toolbox/matlab/iofun'
2、fullfile : 将若干字符串连接成一个完整的路径
f=fullfile('D:','Matlab','example.txt')
f=D:\Matlab\example.txt
3、fileparts : 对于特定路径 获取路径、名称、扩展名
f=fullfile('D:','Matlab','example.txt');
[pathstr,name,ext]=fileparts(f)
pathstr = D:/Matlab
name = example
ext = .txt
3、pathsep: 对于特定路径 获取路径、名称、扩展名
f=fullfile('D:','Matlab','example.txt');
[pathstr,name,ext]=fileparts(f)
pathstr = D:/Matlab
name = example
ext = .txt
4、exist: 用于判断目录或者文件是否存在,同时不同的返回值有不同的含义
f=fullfile('D:','Matlab','example.txt');
exist(f)
ans=2
exist('D:\Matlab')
ans =7
5、isdir: 判断一个路径是否代表了一个目录
p='D:\Matlab';
f=fullfile(p,'example.txt');
% 1-目录,0-文件
isp=isdir(p)
isp=1
isf=isdir(f)
isf=0
6、dir: 用于列出一个目录的内容,返回值为结构体数组类型
name:文件或目录的名称
date:修改日期
bytes:文件大小
isdir:是否是目录
p='D:\Matlab';
files=dir(p)
dir('.') 列出当前目录下所有子文件夹和文件
dir('G:\Matlab') 列出指定目录下所有子文件夹和文件
dir('*.m') 列出当前目录下符合正则表达式的文件夹和文件
结构体数组的结构体如下:
name -- filename
date -- modification date
bytes -- number of bytes allocated to the file
isdir -- 1 if name is a directory and 0 if not
datenum -- modification date as a MATLAB serial date number
7、cd:用于切换当前工作目录
cd('c:/toolbox/matlab/demos') %切换当前工作目录到demos
cd .. %切换当前工作目录到matlab
8、pwd:用于当前工作目录的路径
pwd
ans =C:\MATLAB7\work
9、path:用于对搜索路径的操作
path %查询当前所有的搜索路径(MATLABPATH)
p=path %把当前的搜索路径存在字符串变量p中
path('newpath') %将当前搜索路径设置为newpath
path(path, 'newpath') %向路径添加一个新目录newpath
path('newpath', path) %向当前搜索路径预加一个新目录nespath
10、addpath 和 rmpath: 用于对matlab搜索路径的添加和删除
addpath('direc') %将完整路径direc加入到当前搜索路径的最顶端
11、what: 用于显示出某目录下存在哪些matlab文件;若输入完整路径,可列出指定目录下的文件
what('dirname') %dirname是要查找的路径的名字
GUI 对话框
1. 消息对话框
msgbox 函数(无输入,单击OK按钮后对话框自动关闭,返回程序中继续执行)
msgbox('欢迎使用MATLAB') %建立一个没有标题的消息对话框
msgbox('欢迎使用MATLAB','MATALB','warn') %% 建立一个有标题的消息对话框
2. 错误对话框
errordlg 函数
f = errordlg(msg)
f = errordlg(msg,title)
f = errordlg(msg,title,opts)
f = errordlg
e = errordlg; %建立一个默认参数的错误对话框
e = errordlg('这是一个错误对话框','MATLAB error'); %建立一个名为MATLABerror的错误对话框
3.警告对话框
warndlg 函数
f = warndlg(msg)
f = warndlg(msg,title)
f = warndlg(msg,title,opts)
f = warndlg
w = warndlg; %建立一个默认参数的警告对话框
w = warndlg ('这是一个警告对话框','MATLAB warning');
4. 帮助对话框
helpdlg 函数
helpdlg
helpdlg(msg)
helpdlg(msg,title)
f = helpdlg(___)
h = helpdlg('你需要帮助吗?','MATLAB Help')
5. 进度条设置对话框
waitbar 函数: 作用是反映程序运行的完成情况
h=waitbar(0,'请稍等......')
for i=1:10000
waitbar(i/10000)
end
6.输入对话框
inputdlg 函数
prompt={'输入梯形的上底:','输入梯形的下底','输入梯形的高'}; %设置提示字符串
name='Enter trapeaia Data'; %设置标题
numlines=1; %指定输入数据的行数
defAns={'20','50','40'}; %设定默认值
Resize='on'; %设定对话框尺寸可调节
answer=inputdlg(prompt,name,numlines,defAns,'on'); %创建输入对话框
7. 列表对话框
listdlg 函数
p=path(path,'C:\MATLAB7\work'); %设置路径,若为当前目录,可以省略这一步
d=dir('C:\MATLAB7\work'); %获取指针,若为当前目录,则d=dir
str={d.name}; %获取目录内的文件名
[sel,ok]=listdlg('Liststring',str,'PromptString','请选择文件','SelectionMode','Multiple'); %创建列表对话框。
文件选择成功后,单击“OK‘按钮,系统将选择好的文件序号存入相应向量sel,参数ok的值为1。
8. 问题对话框
questdlg 函数: 提出一个问题,等待用户回答。默认回答按钮有:Yes、No、Cancel。当用户单击任何一个按钮时,系统将该按钮名保存在一个变量(ButtonName)中。若关闭对话框,则系统将ButtonName置为空。
ButtonName=questdlg('你准备好了吗?','MATLABquest','Yes','No','Cancel','Yes')
9. 路径选择对话框
questdlg 函数: 提出一个问题,等待用户回答。默认回答按钮有:Yes、No、Cancel。当用户单击任何一个按钮时,系统将该按钮名保存在一个变量(ButtonName)中。若关闭对话框,则系统将ButtonName置为空。
ButtonName=questdlg('你准备好了吗?','MATLABquest','Yes','No','Cancel','Yes')
10.选择文件对话框
uigetfile函数
[fn,pn,fi]=uigetfile('*.m','select aM-file')%打开一个选择M文件的对话框,并选择一个文件
[fn,pn,fi]=uigetfile(...
{'*.m;*.fig;*.mat;','All MATLAB File(*.m,*.fig,*.mat,*.mdl)';
'*.m','M-file(*.m)';...
'*.fig','Figure(*.fig)';...
'*.mat','MAT-flie(*.mat)';...
'*.mdl','Models(*.mdl)';...
'*.*','All Flies(*.*)'},...
'Pick a file')
%打开一个选择多种文件的对话框,并选择一个文件
11.文件保存对话框
**uiputfile 函数 **
[fn,pn,fi]=uiputfile('*.m','Saveselected a M-file')
[fn,pn,fi]=uiputfile(...
{'*.m;*.fig;*.mat;','All MATLAB File(*.m,*.fig,*.mat,*.mdl)';
'*.m','M-file(*.m)';...
'*.fig','Figure(*.fig)';...
'*.mat','MAT-flie(*.mat)';...
'*.mdl','Models(*.mdl)';...
'*.*','All Flies(*.*)'},...
'Save a file')
%建立多种保存文件的对话框,并选择一个文件
12. 页面设置对话框
pagesetupdlg 函数 用来设置页面的各种属性、参数。
该命令创建一个页面设置对话框,在该对话框用户可以设置页面的各种属性和参数。该命令只支持单一图形窗口的页面设置,参数fig也必须是单一的图形句柄,不可以是图形句柄向量或simulink图。
fig=figure;
dlg=pagesetupdlg(fig); %调用格式为
13. 打印设置对话框
printdlg 函数 用户可以对各种打印参数进行设置
x=[-pi:0.02:pi];
y=cos(x);
fig=figure;
plot(x,y);
printdlg(fig); %打开Windows打印对话框
printdlg('-crossplatform',fig); %打开MATLAB打印对话框
14. 颜色设置对话框
uisetcolor 函数 用于用户设置图形的前景色或背景色
%建立一个颜色选择对话框
c=uisetcolor
%建立一个颜色对话框,并设置对话框的初始颜色,然后选择一种颜色用于一个图形对象。
x=[0:0.02:2*pi];
y=sin(x);
h=figure;
plot(x,y);
c=uisetcolor(h,'select color')
15. 字体设置对话框
uisetfont 函数 用于设置或修改文本字体、坐标轴或设置控件对象的显示文本的字体属性
s=uisetfont %建立一个默认字体设置对话框,并设置一种字体。
T1=uicontrol('style','pushbutton','string','确定',...
'position',[200 320 6020]); %创建一个按钮
T2=uicontrol('style','pushbutton','string','取消',...
'position',[200 220 6020]); %创建一个按钮
s=uisetfont(T1) %打开字体设置对话框
set(T2,s) %将T1的设置复制到T2
随机数生成
1. 生成 m 行 n 列、参数 A1 , A2 , A3 分布的随机数
y = random('分布名称 ', A1, A2, A3, m, n)
R = random('Normal',0,1,2,4) %生成期望为 0,标准差为 1 的(2 行 4 列)2× 4 个正态随机数
R = random('Poisson',1:6,1,6) %依次生成参数为 1 到 6 的(1 行 6 列)6 个 Poisson 随机数
2. rand 生成均匀分布的伪随机数 分布在 (0~1)
rand(m,n)生成m行n列的均匀分布的伪随机数
rand(m,n,'double') %生成指定精度的均匀分布的伪随机数,参数还可以是'single'
rand(RandStream,m,n) %利用指定的 RandStream 生成伪随机数
randn (m,n)生成标准正态分布的伪随机数(均值为0,方差为1)
randn(m,n,'double') %生成指定精度的均匀分布的伪随机数,参数还可以是'single'
randn(RandStream,m,n) %利用指定的 RandStream 生成伪随机数
3. randi 生成均匀分布的伪随机整数
X = randi(imax)
X = randi(imax,n)
X = randi(imax,sz1,...,szN)
X = randi(imax,sz)
X = randi(___,typename)
X = randi(___,"like",p)
X = randi([imin,imax],___)
X = randi(s,___)
4. 几何分布随机数
R = geornd(P) % 生成参数为 P 的几何随机数
R = geornd(P,m) % 生成参数为 P 的 × m 个几何随机数
R = geornd(P,m,n) % 生成参数为 P 的 m 行 n 列的 m × n 个几何随机数
5. Beta 分布随机数
R = betarnd(A,B) % 生成参数为 A,B 的 Beta 随机数
R = betarnd(A,B,m) % 生成 × m 个数为 A,B 的 Beta 随机数
R = betarnd(A,B,m,n) % 生成 m 行 n 列的 m × n 个数为 A,B 的 Beta 随机数
R = normrnd(0,1,[1 5]) % 生成 5 个正态(0,1) 随机数
R = normrnd([1 2 3;4 5 6],0.1,2,3) % 生成期望依次为[1,2,3;4,5,6], 方差0.1的 2×3个正态随机数
6. 正态随机数
R = normrnd(MU,SIGMA) % 生成均值为 MU,标准差为 SIGMA 的正态随机数
R = normrnd(MU,SIGMA,m) % 生成 1× m 个正态随机数
R = normrnd(MU,SIGMA,m,n) % 生成 m 行 n 列的 m × n 个正态随机数
R = normrnd(0,1,[1 5]) % 生成 5 个正态(0,1) 随机数
R = normrnd([1 2 3;4 5 6],0.1,2,3) % 生成期望依次为[1,2,3;4,5,6], 方差为 0.1 的 2× 3 个正态随机数.
7. 二项随机数
R = binornd(N,P)
R = binornd(N,P,m)
R = binornd(N,p,m,n)
n = 10:10:60;
r1 = binornd(n,1./n)
r1 =
0 1 1 2 2 0
r2 = binornd(n,1./n,[1 6])
r2 =
0 1 0 1 3 0
8. 期望为 MU 的指数随机数
R = exprnd(MU)
R = exprnd(MU,m)
R = exprnd(MU,m,n)
9. 自由度为 V1、 V2 的 F 分布随机数
R = frnd(V1, V2)
R = frnd(V1, V2, m)
R = frnd(V1, V2, m, n)
10. gamma 随机数
r = gamrnd(a,b)
r = gamrnd(a,b,sz1,...,szN)
r = gamrnd(a,b,sz)
11. 超几何分布随机数
R = hygernd(M,K,N)
R = hygernd(M,K,N,m,n,...)
R = hygernd(M,K,N,[m,n,...])
12. lognrnd 对数正态随机数
r = lognrnd(mu,sigma) % 从分布参数 mu(对数值的均值)和 sigma(对数值的标准差)指定的对数正态分布生成一个随机数
r = lognrnd(mu,sigma,sz1,...,szN) % 生成对数正态随机数数组,其中 sz1,...,szN 指示每个维度的大小
r = lognrnd(mu,sigma,sz) % 生成对数正态随机数数组,其中向量 sz 指定 size(r)。
13. 负二项随机数
RND = nbinrnd(R,P)
RND = nbinrnd(R,P,m,n,...)
RND = nbinrnd(R,P,[m,n,...])
14. 泊松分布的随机数
r = poissrnd(lambda) % 从速率参数 lambda 所指定的泊松分布中生成随机数。lambda 可以是标量、向量、矩阵或多维数组。
r = poissrnd(lambda,sz1,...,szN) % 从具有标量速率参数lambda的泊松分布中生成随机数数组,sz1,...,szN 表示每个维度的大小。
r = poissrnd(lambda,sz) % 从具有标量速率参数 lambda 的泊松分布中生成随机数数组,其中向量 sz 指定 size(r)。
15. 瑞利分布
R = raylrnd(B)
R = raylrnd(B,m)
R = raylrnd(B,m,n)
16. V 个自由度的 t 分布的随机数
R = trnd(V)
R = trnd(V,m)
R = trnd(V,m,n)
17. 离散均匀分布的随机数
r = unidrnd(n) % 从由最大值 n 指定的离散均匀分布中生成随机数。n 可以是标量、向量、矩阵或多维数组。
r = unidrnd(n,sz1,...,szN) % 从标量最大值为 n 的离散均匀分布中生成一个随机数数组,其中 sz1,...,szN 表示每个维度的大小。
r = unidrnd(n,sz) % 从标量最大值为 n 的离散均匀分布中生成一个随机数数组,其中向量 sz 指定 size(r)。
18. [A,B] 上均匀随机数
R = unifrnd(A,B)
R = unifrnd(A,B,m)
R = unifrnd(A,B,m,n)
% 例: unifrnd(0,1:6)与 unifrnd(0,1:6,[1 6]) 都依次生成[0,1] 到[0,6]的6个均匀随机数.
19. 威布尔分布随机数
R = weibrnd(A,B)
R = weibrnd(A,B,m)
R = weibrnd(A,B,m,n)