MATLAB学习笔记(一)
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 表示。
产生复数有以下几种方法:
其中 x为实部,y为虚部。也可以这样
x = 5; z = complex(x);x为实部,虚部为0.
inf 和 NaN
int 可以表示正无穷大,-inf表示负无穷大。
NaN 表示一个既不算是实数也不是复数的数值。
0/0 , inf / inf 结果都为 NaN
字符与字符串
规定用char表示一个字符。一个char类型的1*你数组则可以称为字符串。
常用的的两种表示字符串的方法;
函数句柄
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,...)
调用的方法:
如此数组中的所有元素具有和输入一样的内容
结构体的属性由单元数组指定。
结果:
访问结构体数组的数据
单元数组类型
就类似于c语言中的数组,只不过数组的类型是任意的。就有点像Python 的列表。
单元数组的构造
1. 左标志法。
就是把单元标志{}放到左边,例如下面构建一个1*2 的单元数组。
2. 右标志法。
c(1,1) = {'csdn'}; c(1,2) = {eye(3,3)} ;以上的还可以简化成
c = {'csdn',eye(3,3)}单元数组的读取
单元数组的删除
将空矩阵赋值给单元数组的某一行或一整列,就可以删除。
如,删除c的第一行
c(1,:) = []五、矩阵的基本操作
把1$\times$1的矩阵称为标量,把1 ×\times×n的矩阵称为向量。空矩阵用[]表示。
可以用 whos来输出变量的信息。
矩阵的构造
简单矩阵构造
最简单的构造矩阵方法是采用矩阵构造符[ ],构造一行的矩阵可以把矩阵元素放在矩阵构造符[ ]中,并以空格或者逗号来隔开它们,其代码设置如下:
row = [E1 E2 … Em] 或 row = [E1 ,E2, … ,Em]
如果是多行的话:行与行之间用分号隔开 ;
特殊矩阵构造
特殊的矩阵
向量的构造
用于产生向量的运算符" : "
如果 后边小于前边返回一个空矩阵。
2.也可以构造任意步长的向量
格式
用于创建指定长度的等距向量。
如
在 -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 的解 |
| \ | A\B | 为方程 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 的字符数组。
创建字符数组
注意:用该函数合并的时候会把字符串结尾的空串删除。如果要保留可以用矩阵合并符[ ]来实现。
a = 'Hello '; b = 'Word'; c = [a b] % 得到 Hello Word创建字符串单元数组
cellstr()函数
如下:
转换:
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。
也可以用关系运算符比较字符串
要要求
字符串维度必须一致(长度一样)
结果
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学习笔记(二)
总结
以上是生活随笔为你收集整理的MATLAB学习笔记(一)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: BFS 保存路径模板
- 下一篇: Matlab 常用运算符的用法和功能