MatLab之数组篇续
数组篇续
编写过程的一些注意事项
MATLAB的搜索路径
在MATLAB中,当输入一个变量名时,MATLAB会按照先看赋值——>内部函数——>程序文件(先看当前的文件夹下的,在看搜索路径中的),例如如果我们先给定义sin=[4 2 3],则此时的sin(1)=4,若要使用sin函数,则只能在右侧工作区将sin的赋值删除
MATLAB的数据类型
数据类型有整型、浮点型、复数型
(1)整型分有无符号,再分位数:8,16,32,64,格式为int8(),int16()等,无符号则为uint8(),要注意的是若类型转换时超出对应类型的最大值,则以其类型的最大值输出
1 | >> x = int8(129) |
(2)浮点型由函数single()、double()转换
(3)复数型实部和虚部默认双精度型,虚数单位为 i 或 j ,要注意的是在输入时虚部与 i 之间可以不加乘号,在 i 被赋值时,加乘号则为乘以赋的值,不加则作为虚数单位,如下:
1 | >> i = 2; |
改变数值数据的输出格式
format命令格式:format 格式符,这会改变后面所有的输出格式
切记:format只改变了输出的格式,不影响数据的计算和存储,在MATLAB中数值默认为双精度型,且不加函数就无法在计算中被改变,毕竟数学计算的精确度重要性…
常用函数
注:函数对矩阵的运算是分别作用与矩阵的每一个元素上,最后得到一个矩阵,单个数其实就是1x1矩阵
三角函数:分为以弧度为单位和以角度为单位,角度的在函数名后加个”d”,如sin(pi/2)=sind(90)=1
**abs函数:**用于求实数绝对值、复数的模、字符串的ASCII值
求余和整除:求余函数为rem()或mod();由于数值都是默认浮点型,因此< / >无法直接做整除,一般情况下我们使用fix()函数取整来完成整除
取素数:写作 isprime(x),是素数的为1,不是则为0,将每个元素都判完后,得到一个由0和1组成的矩阵,与x的阶数相同且对应
find函数:写作find(x),将矩阵x中的非0元素按照一定顺序组成一个新矩阵y,规则如下:
1)若x为行向量,则新矩阵y也为行向量,从x中取出的数次序不变
2)若x为列向量或普通矩阵,则以以元素单下标排序,得到一个列向量
矩阵中每个元素的标识
分为全下标(index)和单下标(linear index)
- 全下标:即我们所学的(i ,j)元
- 单下标:把二维数组所有列从左至右首尾相接连成的一个一维数组,每个元素的位置即单下标,也可称为序号
这个“标识”是MATLAB在对矩阵的每个元素进行操作时的顺序,例如reshape()函数,在重塑矩阵形状时就根据每个元素的单下标来进行排序,其实这个函数的运行过程肢解开就是先把一个矩阵给化为列向量,再依次填到新矩阵的位置上。
1 | A = |
这里可以清楚的看到第一列6,7,7后是3,说明3是单下标第四位。
如何选中矩阵中的某部分
- A为任意矩阵,则我们用A(m,n)来表示A的第m行第n列的元素
- 用A(m)表示序号为m的元素
1 | A = |
上面就选出了A中的第二行第三列的元素“6”,但我们如果要选中某一行(列)要如何操作呢,MATLAB中用冒号< : >表示选中所有行(列)
1 | A = |
上面我们用< : >先选中所有行再选取第二列就得到我们想要的A的第二列,行同理。
1 | A = |
上面我们看到用序号(单下标)的方式直接选出了(3,2)位置的“4”
字符串处理
字符串用单引号< ‘ ‘ >括起来,若字符串中有单引号则应该打两个
字符串矩阵组成
字符串矩阵只能包含字符型(char),得到char数组,若单打数字则会被转换为对应ASCII码值的字符
1 | >> ['123456' ;'abcdef' ] |
注意:字符串矩阵同样也要行列对齐,字符串内每个字符对应矩阵中相应位置元素
字符串操作函数
eval()——将字符串的单引号去掉,变为真实运算
1
2
3
4
5
6>> a='sind(90)'
a =
'sind(90)'
>> eval(a)
ans =
1abs()和double()——把字符串矩阵化成对应ASCII码值矩阵
char()——把ASCII码值矩阵转换为字符串矩阵
1
2
3
4
5
6
7>> I='DSC';
>> abs(I)
ans =
68 83 67
>> char(ans+32)
ans =
'dsc'

字符串查找与替换
findstr(s1,s2):得到某一字符串在大字符串中的开始位置,一定是短的在长的中的位置
strrep(s1,s2,s3):把字符串s1的字符串s2换成s3
1
2
3
4
5
6
7>> a='I am DSC';
>> b=findstr(a,'DSC')
b =
6
>> strrep(a,'DSC','dsc')
ans =
'I am dsc'
矩阵的修改
部分替换:
1
2
3A(2,3) = 4 #某个元素的替换
A(1,:) = [1 2 3] #某行(列)替换,元素个数不变
A(:,1) = [] #删除某行(列)指定维数拼接:
1
2
3cat(1,a,b) #竖着拼
cat(2,a,b) #横着拼
cat(3,a,b) #三维拼接,按z轴拼,a在前层,b在后层
数据转换
MATLAB中用< _ _ _ _2_ _ _ _ >来表示数据转换,如num2str , 将数字转换成字符串 ; dec2hex,十进制变十六进制
1 | A = |
与线代相关的矩阵操作
1 | diag(A) % 对角阵 |
方阵特征值与二次型
1 | % 特征值 |