MATLAB
- 一、安装的目录结构
- 二、常用的菜单及工具
-
- 布局
- 设置路径
- 设置工作路径
- 三、常用命令
- 四、 基础知识
-
- 数据类型
-
- 复数类型
- `inf 和 NaN`
- 字符与字符串
- 函数句柄
- 结构体
-
- 结构体的构建
- 访问结构体数组的数据
- 单元数组类型
-
- 单元数组的构造
- 单元数组的读取
- 单元数组的删除
- 五、矩阵的基本操作
-
- 矩阵的构造
-
- 简单矩阵构造
- 特殊矩阵构造
- 向量的构造
- 矩阵的合并
-
- 简单合并
- 函数
- 矩阵下标引用
-
- 交换矩阵行,列元素
- 矩阵的结构变化
- 稀疏矩阵
-
- 创建:
- 查看稀疏矩阵
- 六、运算符和特殊符号
-
- 算数运算符
- 七、字符串处理函数
-
- 创建字符数组
- 创建字符串单元数组
- 字符串比较函数
- 字符串的查找与替换
- 字符串类型与数字类型转换函数
一、安装的目录结构
文件夹 | 描述 |
---|---|
bin | 系统中的可执行的相关文件 |
extern | 外部程序接口的工具 |
help | 帮助系统 |
ja | 国际化文件 |
java | java支持程序 |
notebook | 是一个兼备数学计算、图形显示和文字处理功能的集成环境 |
sys | 所需要的工具和操作系统 |
toolbox | 各种工具箱 |
uninstall | 卸载程序 |
rtw | Real-Time-Workshop 软件包 |
simulink | 用于动态模拟、仿真和分析 |
stateflow | 用于状态机设计的功能强大的图形化开发和设计工具 |
二、常用的菜单及工具
布局
在布局中可以设置窗口的布局。
设置路径
如果你写了一个函数或者脚本在别的文件夹中,那么可以在设置路径中,将其加入到MATLAB的搜索路径上来。
设置工作路径
三、常用命令
命令 | 说明 |
---|---|
cd | 显示或改变当前工作目录 |
dir | 显示当前目录或指定目录下的文件 |
clc | 可以清除命令窗口显示的内容,但并不清除工作空间。 |
clf | 清除图形窗口 |
clear | 清理内存变量,将所有的都会清空(要小心) |
echo | 工作窗信息显示开关 |
disp | 显示变量或者文章内容(就是变量里面对应得值) |
! | 调用DOS命令 |
save | 保存变量到指定文件 |
load | 加载指定文件的变量 |
home | 将光标移至命令窗口的最左上角 |
当命令后面有分号时,按Enter键,不会显示运行结果,所有可以用来进行多行输入。
四、 基础知识
数据类型
在MATLAB
中,每种基本数据类型均以矩阵的形式出现,该矩阵可以是0*0矩阵到任意大小的n维矩阵。如图
复数类型
复数包含独立的两个部分,即实部和虚部。
虚部可以用 i 或 j 表示。
产生复数有以下几种方法:
- 赋值语句
a = 5 +10i;
- 函数
complex
x = 5;
y = 10;
z = complex(x,y);
其中 x为实部,y为虚部。也可以这样
x = 5;
z = complex(x);
x为实部,虚部为0.
inf 和 NaN
int 可以表示正无穷大,-inf表示负无穷大。
NaN 表示一个既不算是实数也不是复数的数值。
0/0 , inf / inf 结果都为 NaN
字符与字符串
规定用char
表示一个字符。一个char
类型的1*你数组则可以称为字符串。
常用的的两种表示字符串的方法;
- 用一对单引号
str = 'hello word'
- 用
char
函数构造一个字符串
str = char([97,98])
函数句柄
matlab函数句柄就是c语言里面的函数指针,在matlab里面叫它handle,句柄嘛,有了它就可以操纵这个对象(这里也可以叫做函数),这个概念其实可以推广到很多东西,图形fig,自定义函数句柄(也就是下面将会展示的),matlab自带函数句柄,以及某些函数返回的函数句柄,某些类对象或者表达式,也可以叫做句柄。
1、何为函数句柄?
函数句柄也是MATLAB中的一种常见的数据类型,
它的地位类似于其它计算机语言里的函数对象(Javascript,Python),函数指针(C++),或者函数引用(Perl)。
它的作用是将一个函数封装成一个变量,使其能够像其它变量一样在程序的不同部分传递。。引入函数句柄可使函数调用变得更加灵活方便,极大地提高了函数调用的速度和效率。MATLAB中函数句柄的使用使得函数也可以成为输入变量,并且能很方便地调用,提高函数的可用性和独立性.
2、函数句柄的创建:
方式①:直接加@
语法:@函数名fun1 = @sin;
方式②:str2func函数
语法:str2fun(‘函数名’)
fun2 = str2func(‘cos’);
方式③:str2func函数
语法:@(参数列表)单行表达式
fun3 = @(x, y)x.^2 + y.^2;
结构体
结构体的构建
方法一:利用赋值语句。
personel.name = 'lili';
personel.score = 99;
personel.salary = [100,4566,1];
输出personel
会得到
personel = 包含以下字段的 struct:name: 'lili'score: 99salary: [100 4566 1]
还可以用以下语句将结构体数组扩展成1*2的结构体。意思就是一行两列。相当于结构体数组嘛。
personel(2).name = 'lili';
personel(2).score = 99;
personel(2).salary = [100,4566,1];
如此personel(1)
对应得值就为空矩阵。
方法二:利用struct
函数
基本调用语法
strArray = struct('field' , vall,...)
调用的方法:
- 方法一:单独使用
personel(3) = struct('name','lili','score',45.2,'salary',[4512,554])
- 与
repmat()
函数配合使用
repmat(struct('name','lili','score',45.2,'salary',[4512,554]),1,3)
如此数组中的所有元素具有和输入一样的内容
struct
函数的输入为单元数组
struct('name',{'lili','dana','jone'},'score',{45.2,48.4,45.8},'salary',{[4512,554],[],[]})
结构体的属性由单元数组指定。
访问结构体数组的数据
- 访问结构体数组的某个元素的某个元素的某个属性。
personel(2).name;
- 访问结构体数组的某个元素的某个元素的某个属性的元素值。
personel(2).salar(3);
- 访问结构体数组的所有元素的某个元素的某个属性的元素值。
personel.name;
单元数组类型
就类似于c语言中的数组,只不过数组的类型是任意的。就有点像Python 的列表。
单元数组的构造
1. 左标志法。
就是把单元标志{}
放到左边,例如下面构建一个1*2 的单元数组。
c{1,1} = 'csdn';
c{1,2} = eye(3,3);
2. 右标志法。
c(1,1) = {'csdn'};
c(1,2) = {eye(3,3)} ;
以上的还可以简化成
c = {'csdn',eye(3,3)}
单元数组的读取
- 读取单个
str = c{1,1}
- 读取多个
c(2,:)
% 这个是注释标记 ,输出第一行的所有值。
注意:如 str = c(1,1) 输出的类型是 Cell ,而 str = c{1,1} 就是其对应得值。 c{1,1} 输出的类型是 Cell ,而 c(1,1) 就是其对应得值。
单元数组的删除
将空矩阵赋值给单元数组的某一行或一整列,就可以删除。
如,删除c的第一行
c(1,:) = []
五、矩阵的基本操作
把1$times$1的矩阵称为标量,把1 ×times×n的矩阵称为向量。空矩阵用[]表示。
可以用 whos
来输出变量的信息。
矩阵的构造
简单矩阵构造
最简单的构造矩阵方法是采用矩阵构造符[ ]
,构造一行的矩阵可以把矩阵元素放在矩阵构造符[ ]
中,并以空格或者逗号来隔开它们,其代码设置如下:
row = [E1 E2 … Em] 或 row = [E1 ,E2, … ,Em]
如果是多行的话:行与行之间用
分号隔开 ;
特殊矩阵构造
特殊的矩阵
向量的构造
用于产生向量的运算符" : "
- 冒号可以用来构造步长为1 的递增向量。
A = 1:5
% 1 2 3 4 5
如果 后边小于前边返回一个空矩阵。
2.也可以构造任意步长的向量
格式
A = a : step: b
linspace
函数
用于创建指定长度的等距向量。
如
A = linspace(-6,6,4)
在 -6,6 ,之间产生等距的四个点。
矩阵的合并
注意合并后的矩阵要保证是方形的所以要注意格式。
简单合并
C = [A B] 用于水平方向合并矩阵 A 和 B
C = [A ;B] 用于垂直方向合并矩阵 A 和 B
函数
dim就是维数,英文dimension 的缩写
比如说dim =1就是按照行来算的(x)dim = 2就是列 (y),dim = 3 就是第三维(z)
例如x是三维数组 dim1就按照行排练,2就是列,3就是第三维:
矩阵下标引用
1.A(1,2)
2.对于二维矩阵M * N
的有以下线性公式
A(i,j)=A((j−1)∗M+i)A(i,j) = A((j-1)*M+i) A(i,j)=A((j−1)∗M+i)
3.访问多个矩阵元素
A(1:k:j)表示矩阵第j列的1k个元素。A(i,1:k)表示矩阵第i行的1k个元素。A(1:k:j) 表示矩阵第j 列的1~k个元素。\ A(i,1:k) 表示矩阵第i行的1~k个元素。 A(1:k:j)表示矩阵第j列的1 k个元素。A(i,1:k)表示矩阵第i行的1 k个元素。
行的话,行数写在前边。
因为冒号:
表示一列或一行的所有元素,可以写成
.A(:,4)
.A(:)
输出矩阵的所有元素。
4.end
该维的最后一个元素
如上面的可以写成,其中第四列为最后一列
.A(:,end)
交换矩阵行,列元素
A([4 2],:) %答案的第一行是第二行的数据,然后才是第四行的
A(:,[1 3]) %答案的第一行是第1列的数据,然后才是第3列的
交换行
A([m n ],:) = A([n m ],:)
% m,n 是交换的两行
交换列
A(:.[2 4]) = A(:,[4,2])
矩阵的结构变化
函数名 | 描述 |
---|---|
fliplr(A) | 矩阵每一行均进行逆序排列 |
flipud(A) | 矩阵每一列均进行逆序排列 |
flipdim(A,dim) | 生成一个在dim维矩阵A内的元素交换位置的多维矩阵 |
rot90(A) | 生成一个由矩阵A逆时针旋转90度而得到的新矩阵 |
rot90(A,k) | 生成一个由矩阵A逆时针旋转k*90度而得到的新矩阵 |
reshape(A,m,n) | 生成一个m*n维的矩阵 |
详细:
函数链接
稀疏矩阵
定义在稀疏矩阵上的运算生成稀疏矩阵,满矩阵就生成满矩阵。
创建:
A = [0,0,1,0;0,2,0,0;3,0,0,0;0,0,4,0];% 满矩阵
A = sparse(A)
%转换为满矩阵
A= full(A)
查看稀疏矩阵
nnz(A)
:返回非零元素个数nonzeros(A)
:返回非零值nzmax
:返回用于存储非零值的空间长度
对于矩阵可以用
spy()
函数来查看图像
六、运算符和特殊符号
运算符包括算数运算符、关系运算符和逻辑运算符。
算数运算符
运算符 | 用法 | 描述 |
---|---|---|
+ | A+B | A+B把矩阵A和B相加,A和B必须是具有相同的长度的矩阵,除非有一个是标量 |
– | A-B | A+B把矩阵A和B相减,A和B必须是具有相同的长度的矩阵,除非有一个是`标量 |
.* | A.*B | 元素相乘。相当于对应元素相乘,不是用矩阵的乘法法则 |
./ | A./B | 元素的右除法。矩阵A除以矩阵B对应的元素 |
. | A.B | 元素的左除法。矩阵B除以矩阵A对应的元素 |
.^ | A.^B | 元素的乘方。等于 [A(i,j) ^ B(i,j)] |
.‘ | A.’ | 矩阵转秩。(‘在键盘中L键盘右边第二个) |
* | A*B | 矩阵乘法。对于非标量矩阵来说,A的列必须等于B的行 |
/ | A/B | 为方程 X*A = B 的解 |
AB | 为方程 A*X = B 的解 | |
^ | A^B | 矩阵乘方 |
’ | A’ | 矩阵转秩 |
补充说明^
运算符:
当A和B都是标量时表示 标量A的B次方幂;
当A为方针,B为正整数时,表示矩阵A的B次乘积,因此矩阵的逆可以用 A^-1 得到;
B为负数时,表示矩阵 A的逆的B次乘积,
当 B为非整数时有如下表达式:
A ^ B = V∗[λ1B.λnB]/VV*left[ begin{matrix} lambda_1^B & & \ & . & \ & &lambda_n^B \ end{matrix} right] /VV∗⎣⎡λ1B.λnB⎦⎤/V
其中 λ1B…λnB为矩阵A的特征值,V为对应的特征向量矩阵。lambda_1^B…lambda_n^B为矩阵A的特征值,V为对应的特征向量矩阵。 λ1B...λnB为矩阵A的特征值,V为对应的特征向量矩阵。
七、字符串处理函数
在MATLAB
中字符串是指 1 ×times× n 的字符数组。
创建字符数组
- 可以用一对单引号来表示字符串
str = ' I am ';
- 可以用
strcat()
函数得到一个新的字符串
a = 'Hello ';
b = 'Word';
c = strcat(a,b)
% 得到 HelloWord
注意:用该函数合并的时候会把字符串结尾的空串删除。如果要保留可以用矩阵合并符[ ]
来实现。
a = 'Hello ';
b = 'Word';
c = [a b]
% 得到 Hello Word
- 可以构建二维字符数组,不过要注意的是二维字符数组的每一行具有相同的长度才可以,可以用空格来补充。
str = ['second';'string']
- 利用函数
char()
来创建字符。用该函数时,如果长度不同会自动补齐。
str = char('first','second')
创建字符串单元数组
cellstr()
函数
如下:
str = ['name';'string']
% 输出:
str =
name
string
转换:
str = cellstr(str)
% 输出:
str =
'name'
'string'
那么区别是什么呢,字符串单元数组,类似于python中的列表中的元素是字符串。而且在转换后会自动将多余的空格去掉。
检测长度:
length(str{1})
%
ans = 4
可以用char()
函数转换成字符数组。
str = str(str);
length(str(1:))
%
ans = 6
字符串比较函数
函数功能:
strcmp(s1, s2):用于比较字符串s1、s2是否相等,如果相等,返回结果1,否则返回0;
strncmp(s1, s2, n):用于比较字符串s1、s2前n个字符是否相等,如果相等,返回结果1,否则返回0;
strcmpi(s1, s2):在忽略字母大小写的前提下,比较字符串s1、s2是否相等,如果相等,返回结果1,否则返回0;
strncmpi(s1, s2, n):在忽略字母大小写的前提下,比较字符串s1、s2前n个字符是否相等,如果相等,返回结果1,否则返回0。
也可以用关系运算符比较字符串
要要求
字符串维度必须一致(长度一样)
str1 = 'cannal';
str2 = 'casual';
c = str1 == str2
结果
c =1×6 logical 数组1 1 0 0 1 1
字符串的查找与替换
.strfind(s1,s2)
:返回字符串s2在字符串s1中的开始位置。
.strrep(s1,s2,s3)
:将字符串s1中的所有子字符串s2替换为字符串s3。
注意还有个findstr(s1,s2)函数,区别在于findstr函数中s1 s2无先后顺序区别,返回短字符串在长字符串中的开始位置。
>> strfind('ababedabababedfg','bed')
ans =4 12
>> strfind('bed','ababedabababedfg')
ans =[]
>> findstr('bed','ababedabababedfg')
ans =4 12>> strrep('ababedabababedfg','bed','toy')
ans ='abatoyababatoyfg'
字符串类型与数字类型转换函数
下一篇:
MATLAB学习笔记(二)