第一部分MATLAB的集成环境
一.菜单栏和工具栏介绍
MATLAB包括7个菜单项:
【File】:用于进行与文件的处理
【Edit】:用于实现命令窗口的编辑操作
【Debug】:用来调试程序
【Parallel】:用于对并行计算进行选择和管理
【Desktop】:用来设置窗口的显示方式
【Window】:用来关闭所有使用的编辑器窗口或选择活动窗口
【Help】:用来打开不同的帮助系统
二.命令窗口
1.【File】
【Preference】:对窗口的字体风格,大小、颜色和数值计算结果的显示格式进行个性化设置2.【File】
【Preference】
【Command Window】命令中在【Numeric】和【Numeric display】下拉表可以选择数据的显示位数和显示格式:
格式 | 示例 | 说明 |
format short | 0.3333 | 小数点后保留4位,最多不超过7位;对于大于1000的实数用5位小数的科学计数法表示 |
format long | 0.3333333333333333 | 用15位数字表示 |
format short e | 3.3333e-001 | 用5位科学计数法表示 |
format long e | 3.3333333333333333e-0.01 | 用15位科学计数法表示 |
format short g | 0.33333 | 从format short和format short e中选最佳的方式 |
format long g | 0.3333333333333333 | 从format long和format long e中选最佳的方式 |
format hex | 3fd5555555555555 | 用十六进制表示 |
format bank | 0.33 | (金融)数据表示 |
format + | + | 大矩阵数据表示,正数,负数和零用+、-和空格表示 |
format rat | 1/3 | 近似有理数表示 |
format compact | ----- | 紧凑格式表示,显示变量之间没有空行 |
format loose | --- | 松格显示,在显示变量的行之间加入行 |
3.Reshape()函数可以利用现有数组构造新数组,例:
4.工作空间浏览器
【Desktop】
【Wokespace】
【View】
【Choose Columns】可以将选定的变量以图形的方式表示出来:
5.MATLAB的通用命令
命令名称 | 语法 | 功能 |
addpath | addpath(‘...’) | 添加目录到MALTAB的搜索路径 |
help | Help | 显示MATLAB命令和M文件的在线帮助 |
version | Version | 显示MATLAB的版本号 |
disp(X) | disp(X) | 显示文本或矩阵 |
length | length(X) | 显示数组X的长度 |
load | Load | 加载指定文件的变量 |
openvar | openvar(‘name’) | 在数组编辑器中打开工作空间内的变量 |
save | save | 保存工作空间内的变量 |
size | size(X) | 显示数组的维数 |
who | who | 列出内存中的变量名 |
whos | whos | 列出内存中的变量名、类型、维数、字节数 |
workspace | workspace | 打开工作空间浏览器 |
clc | clc | 清除工作窗口中的所有内容 |
format | format | 控制输出的数据格式 |
home | home | 将光标移动到MATLAB命令窗口的初始位置 |
cd | cd | 显示或改变当前工作目录 |
delete | delete filename | 将指定文件删除 |
diary | diary diary off | 将命令窗口中的命令保存到一个文件夹里 暂停执行diary命令 |
dir | dir | 显示目录列表 |
edit | edit | 打开一个新的编辑器窗口 |
open | open(‘name’) | 根据指定文件夹类型打开文件 |
quit | quit | 退出MATLAB系统 |
6.在命令窗口中获得帮助信息
(1)输入help help会得到如何使用help的详细信息
(2)输入help FunName命令将获得具体函数的用法,例如希望了解eye()函数:
(3)lookfor name帮助用户获得函数的具体用法,name可以是不确定具体拼写的函数名
第二部分MATLAB的数据类型
一.数值型数据的多种格式
format(short) | 短格式(5位定点数) | 76.4000 |
format long | 长格式(U位定格式) | 76.40000000000000 |
format short e | 短格式e方式 | 7.6400e+001 |
format long e | 长格式e方式 | 7.640000000000000e+001 |
format bank | 2位十进制 | 76.40 |
format hex | 十六进制格式 | 405319999999999a |
1.复数的输入
(1)复数的虚部是数字时,在虚部和i之间有“*”和没有“*”的结果相同
>> c=8+4i
c =
8.0000 + 4.0000i
>> c=8+4*i
c =
8.0000 + 4.0000i
(2)若复数的虚部用变量名表示,则该变量名和虚部之间必须用“*”隔开
>> a=8
a =
8
>> b=4
b =
4
>> c=a+b*i
c =
8.0000 + 4.0000i
(3)Inf和NaN两个特殊数值
Inf表示正无穷大,NaN表示非数值量,例:
>> 1/0
ans =
Inf
>> 0/0
ans =
NaN
2.变量和表达式
(1)变量由字母组成,必须以英文字母开头,但最多不超过23个字符,否则系统只承认前63个字符,变量不可包括空格、标点,但可包括下连字符。
(2)MATLAB变量字母区分大小写,变量名一般使用小写字母。
(3)关键字(如if、for等)不能作为变量名,输入iskeyword可查询关键字。
特殊常量 | 说明 |
字符串常量 | s=”Tomorrow and Tomorrow” |
符号常量 | 例如Pi,它代表圆周率π这个常量,即3.1415926 |
ans | 计算结果默认的变量名 |
i或j | 虚数单位,定义为i=j= |
Inf或inf | 正无穷大,由0做除数引入此常量 |
NaN | 不定式,表示非数值量,产生于0 |
o,∞ | ∞,0*∞等运算 |
pi | 圆周率π的双精度表示 |
eps | 容差变量,当某量的绝对值小于eps时,可认为此量喂零,即为浮点数的最小分辨率,PC上此值为2.2204e-016 |
Realmin或Realmin | 最小浮点数,2.2251e-308 |
Realmax或realmax | 最大浮点数,1.7977e+308 |
二.逻辑型
1.逻辑运算函数
函数名称 | 作用 |
logical(m) | 将任意类型的数据转化为逻辑数据,其中非零为逻辑真,零为逻辑假 |
true(m,n) | 将任何数据转换为逻辑真(即结果为1) |
flase(m,n) | 将任何数据转换为逻辑假(即结果为0) |
例编写代码程序:
m=[0,4,2;1,5,0]
logical(m) %把数值转变成逻辑值
true(3) %创建一个3X3的逻辑1矩阵
true(2,4) %创建一个2X4的逻辑1矩阵
false(2,3) %创建一个2X3的逻辑0矩阵
运行结果:
>> logical(m)
ans =
0 1 1
1 1 0
>> true(3)
ans =
1 1 1
1 1 1
1 1 1
>> true(2,4)
ans =
1 1 1 1
1 1 1 1
>> false(2,3)
ans =
0 0 0
0 0 0
2.运算符的优先级
算数运算符>关系运算符>逻辑运算符
逻辑运算符 | 含义 | 说明 |
&& | 与、和 | 在标量表达式之间进行绕行式与操作 |
|| | 或 | 在标量表达式之间进行绕行式或操作 |
& | 与、和 | 在两个逻辑数组之间逐个元素进行逻辑与操作 |
| | 逻辑或 | 在两个逻辑数组之间逐个元素进行逻辑或操作 |
~ | 逻辑非 | 对数组中的元素逐个进行取反操作 |
xor(x,y) | 异或 | 在两个逻辑数组之间逐个元素进行异或操作 |
any(z) |
| 若为向量,则当任何元素都不为0时,返回1; 若为数组,逐列筛选,若有元素为非0数,则返回1,并将0或1按序返回新数组中 |
all(z) | 检测 | 若为向量,则当任何元素都不为0时,返回1; 若检测数组每列是否全部为真,若全为真则返回1,并将0或1按序返回新数组中 |
三.字符和字符串
1.创建字符串函数
(1)input函数一般格式:input(str,’s’)或input(str)
input()用法示例:
>> A='My name is :'
A =
My name is :
>> M=input(A,'s')
My name is :MATLAB
M =
MATLAB
>> M=input(A)
My name is :'MATLAB'
M =
MATLAB
(2)char()函数
编写程序代码:
>> A='My name is';
>> M='MATLAB';
>> NAME=char(A,M)
运行结果:
NAME =
My name is
MATLAB
2.字符串比较函数
函数名 | 说明 |
strcmp(s1,s2) | 比较两个字符串是否完全相等,若相等则返回函数值1,若不等则返回函数值0 |
strncmp(s1,s2,n) | 比较两个字符串的前n个字符是否相等,若相等则返回函数值1,若不等则返回函数值0 |
strcmpi(s1,s2) | 在忽略字符串大小写的情况下,比较两个字符串是否相等,若相等则返回函数值1,若不等则返回函数值0 |
strncmpi(s1,s2,n) | 在忽略字符串大小写的情况下,比较两个字符串的前n个字符是否相等,若相等则返回函数值1,若不等则返回函数值0 |
示例:
>> s1='STudy'
s1 =
STudy
>> s2='StuDY'
s2 =
StuDY
>> strcmp(s1,s2)
ans =
0
>> strncmp(s1,s2,1)
ans =
1
>> strcmpi(s1,s2)
ans =
1
3.字符串查找与替换函数
函数名称 | 说明 |
findstr(str1,str2) | MATLAB先判断str1和str2的长度大小,然后在长字符串中查找短字符串,并返回短字符串第一次出现的具体位置(str1、str2位置可以互换,对结果无影响,str1、str2必须只有一行) |
strfind(str1,str2) | 在str1中查找str2的位置,当str1长度大于等于str2时,函数返回str2第一次出现的位置值,否则函数返回[],因此str1≠str2时,位置互换结果将会产生变化 |
strrep(str1,str2,str3) | 在str1中查找str2并将所有的str2用str3来进行替换,当str1,str2,str3中有多列字符串时。str2和str3的行数不能超过str1,结果返回和str1相同列数的字符串数组 |
strmatch(str1,str2) | 在字符串数组str1中每一行查找以str2开头的字符串,并返回所在行数,没有则返回[],也可以用strmatch(str1,str2,’exact’)精确查找str2中完全等于str1的字符串,并返回所在行数 |
strtok(str1,str2) | 返回str1中含有str2的第一个标记前所有的str1的部分,如果没有指定str2,MATLAB则默认str2=[],那么找出str1中空格前面的字符串部分 |
注:findstr(0和strfind()函数的用法相似,但strfind()函数的使用两个参数的位置不能互换,否则无法得到正确结果。
例一、findstr和strfind的用法:
>> M='abcdef'
M =
abcdef
>> findstr('f',M)
ans =
6
>> strfind(M,'f')
ans =
6
>> findstr(M,'f')
ans =
6
>> strfind('f',M)
ans =
[]
例二、strrep的用法:
>> str1='hello world'
str1 =
hello world
>> str2='l'
str2 =
l
>> str3='k'
str3 =
k
>> strrep(str1,str2,str3)
ans =
hekko workd
注:在str1中查找str2并用str3替换str2,str1,str2,str3都为单列字符串。
例三、strmatch的用法:
>> A={'cat';'world';'dog'}
A =
'cat'
'world'
'dog'
>> B='wo';
>> strmatch(B,A)
ans =
2
注:在字符串A中查找以字符串B开头的字符,并返回其所在行数
例四、strtok函数的用法:
M='hello world study here!';
>> strtok(M)
ans =
hello
>> strtok(M,'rd')
ans =
hello wo
注:返回在M中含有‘rd’的第一个标记前所有的M的部分
4.类型转换函数
(1)将字符串转换为数值型数据的函数
类别 | 函数名 | 说明 |
字符串 数值型 | abs(str) | 返回一个向量,其元素是字符串str中字符的ASCII的码值 |
hex2num(str) | 将字符串str中的十六进制数转换成相应的浮点数(IEEE双精度) | |
hex2dec(str) | 将字符串str中的十六进制数转换成相应整数 | |
bin2dec(str) | 将字符串中的二进制数转换成十六进制数 | |
str2num(str) | 返回字符串str的数字形式,字符串只能包含数字、小数点,表示10的幂的e,还有复数虚部的i | |
str2double(str) | 以双精度格式返回字符串str的数字形式,字符串只能包含数字、小数点,表示10的幂的e,还有复数虚部的i |
例:
>> str='3de2';
>> abs(str)
ans =
51 100 101 50
>> hex2num(str)
ans =
1.3097e-10
>> hex2dec(str)
ans =
15842
>> str='010010110101110';
>> M=bin2dec(str)
M =
9646
>> S='123e23';
>> str2num(S)
ans =
1.2300e+25
(2)将数值型数据转换为字符串的函数
数值型 字符串 | char(x) | 根据指定的字符集将向量x的整数转换成字符,这个命令是命令abs的逆操作 |
int2str(n) | 将整数n转换成整数字符串表达将数值f转换成浮点格式的字符串。这个命令经常和命令disp、xlabel还有一些其他输出命令一起使用 | |
num2str(f) | 将数值f转换成带有K位数字的浮点格式的字符串 | |
num2str(f,k) | 将数值f转换成由format设置格式的字符串,format用在函数sprintf中,关于format的用法在前面讲过 | |
rats(x,strlen) | 将浮点小数x转换成含有对x的有理逼近的字符串,整数strlen是每个元素的字符串长度,默认值为13 | |
dec2bin(n) | 将整数n转换成二进制数字字符串 | |
dec2hex(n) | 将整数n转换成相应的十六进制数字字符串 |
例:
>> x=[36,55,48]
x =
36 55 48
>> char(x)
ans =
$70
>> F=[2,5445,142,54,45,46,4856,546];
>> M=num2str(F,4)
M =
2 5445 142 54 45 46 4856 546
>> class(F)
ans =
double
>> class(M)
ans =
char
>> N=[53,45,46,12,153,92];
>> A=rat(N)
A =
53
45
46
12
153
92
>> dec2bin(4124)
ans =
1000000011100
>> dec2hex(1597864)
ans =
1861A8
四.函数句柄
1.句柄的创建
句柄函数的创建是利用@符号,或者利用转换函数str2func()来生成函数句柄如handle=@functionname中functionname的句柄是handle
例:
>> hcos=@cos
hcos =
@cos
>> functions(hcos) %使用functions()函数可以查看句柄的函数名称和类型等信息
ans =
function: 'cos'
type: 'simple'
file: ''
>> isa(hcos,'function_handle') %isa()函数可以检查到变量hcos是一个句柄
ans =
1
>> whos
Name Size Bytes Class Attributes
A 6x3 36 char
B 1x2 4 char
F 1x8 64 double
M 1x78 156 char
N 1x6 48 double
NAME 2x10 40 char
S 1x6 12 char
a 1x1 8 double
ans 1x1 1 logical
b 1x1 8 double
c 1x1 16 double complex
hcos 1x1 32 function_handle
m 2x3 48 double
s1 1x5 10 char
s2 1x5 10 char
str 1x15 30 char
str1 1x11 22 char
str2 1x1 2 char
str3 1x1 2 char
x 1x3 24 double
注:句柄不能构成数组和矩阵
五.构架数组
1.用赋值语句创建构架数组
matlab.name='MATLAB';
>> matlab
matlab =
name: 'MATLAB'
2.用函数struct()创建构架数组
形式 | 说明 |
S=struct(‘field1’,{},’field2’,{},...) | 创建一个空内容的构架数组,它包含field1,field2,.. |
S=struct(‘field1’,values1,’field2’,values2,...) | 创建初始化的构架数组,它包含域field1,field2,...并且对应的域内容为values1,values2,... |
S=struct | 创建一个1x1的构架数组,其没有域 |
struct([]) | 创建一个空的构架数组,其没有域 |
S=struct(obj) | 创建和构架数组obj有相同结构的构架数组,但不改变原obj构架数组 |
例.用函数struct()创建构架数组student:
>> student=struct('name','富豪','city','武汉')
student =
name: '富豪'
city: '武汉'
>> student(2)=struct('name','曾捷','city','广西')
student =
1x2 struct array with fields:
name
city
>> student(2)
ans =
name: '曾捷'
city: '广西'
3.构架数组域的基本操作
(1)寻访域的内容
f=getfield(array,{array_index},’field’,{field_index})
其中array_index和field_index具有可选择性。array_index是已创建构架数组名的索引;field_index是对应域名的索引。
(2)删除构架数组中的域
newstruct_array=rmfield(struct_array,’field’)
其中,struct_array为需要进行操作的构架数组,field为需要删除的域名,程序运行后将新得到的构架数组赋给newstruct_array。原构架数组的结构不发生任何变化。
(3)构架数组域的操作
f=array(array_index).field(field_index)
其中,array_index为数据的索引号,field_index为域的索引号
函数名 | 说明 |
fieldnames(struct_arry) | 以字符串的形式返回构架数组的所有域名 |
isstruct(A) | 检测A是否为构架数组,若是返回1,否则返回0 |
isfield(struct_arry,’char’) | 检测构架数组中是否存在名为‘char’的域名 |
六.元胞数组
1.直接赋值法
(1)内容索引:赋值语句的左边用大括号{将标识单元的下标括起来,右边为单元的内容。
例:
>> C{1,1}='this is a cell_array';
>> C{1,2}=[23,-4,45;-34,567,2];
>> C{2,1}=[];
>> C{2,2}=324-454i
C =
'this is a cell_array' [2x3 double]
[] [3.2400e+02 - 4.5400e+02i]
>> class(C)
ans =
cell
例中分别对C{1,1}、C{1,2}、C{2,1}和C{2,2}元胞数组的各元素进行赋值,最后使用class()函数判断C的数据类型是什么。
(2)单元索引:赋值语句的左边用小括号()将标识单元的下标括起来,右边用大括号将存储于单元的数据括起来。
例:
>> C{1,1}='this is a cell_array';
>> C{1,2}={[23,-4,45;-34,567,2]};
>> C{2,1}={[]};
>> C{2,2}={324-454i}
C =
'this is a cell_array' {1x1 cell}
{1x1 cell} {1x1 cell}
>> whos
Name Size Bytes Class Attributes
C 2x2 888 cell
ans 1x4 8 char
例中分别对C{1,1}、C{1,2}、C{2,1}和C{2,2}元胞数组的各元素进行赋值,最后使用whos命令获得C的维数和数据类型等信息。
2.cell()函数创建法(创建一个mxn的元胞数组,但这只是预定义一个元胞数组)
cell_array=cell(m,n)
3.利用{}直接创建元胞数组(创建一个nxm的元胞数组,并将单元进行初始化)
cellname={[cell 1,1],[cell 1,2]......[cell 1,m];......;[cell n,1],[cell n,2]......[cell n,m]}
4.元胞数组操作函数
函数 | 说明 |
celldisp() | 显示单元阵列的内容 |
cellplot() | 画出单元阵列的结构图 |
reshape() | 改变元胞数组的形状 |
cell2struct() | 把元胞数组转化为构架数组 |
num2cell() | 把数字矩阵转化为元胞数组 |
cellstr() | 把二维字符数组转化为相应的字符串单元阵列 |
char() | 把字符串单元阵列转化为相应的字符数组 |
标签:集成,函数,str2,str1,数据类型,MATLAB,数组,ans,字符串 From: https://blog.51cto.com/u_15834920/5767595