Matlab基础知识
Matlab系统环境:
也就是说,当遇见同名的变量名和函数名时,变量名优先先把它当作变量再当做函数、程序文件进行识别。例:
sin=[1,2,3,4,5],
表示定义了名为sin的数组变量,先把sin当作一个变量。此时,sin[1]表示其第一个元素,而不表示1弧度的正弦值。若此时需要调用sin函数,需要先在工作区窗口删除sin变量。故建议取名时不要使用matlab关键字。
设置文件搜索路径:
- 用Path命令设置文件搜索路径。如:
》path(path,G:\matlabWork") - 对话框设置文件搜索路径:
主页->设置路径
Matlab数据类型
数值数据类型
- 整型
- 无符号8位、16位、32位、64位整数
- 带符号8位、16位、32位、64位整数
- uint8():将数值数据转换为无符号8位整数
- int8():将数值数据转换为带符号8位整数(若转换有溢出,则只保留最大值,如x=int8(129)->x=127,带符号8位整数最大值为127。
- 浮点型
- 单精度:4字节
- 双精度:8字节
- single():将其他类型数据转换为单精度型浮点数
- double():将其他类型数据转换为双精度型浮点数
- class():获取数据类型
- 复数型
- 实部:双精度
- 虚部:双精度,单位用i或j表示
- real():求复数实部
- imag():求复数虚部
- class():获取数据类型
数值数据输出格式
- format命令的格式:format 格式
- 如:》format long 将输出格式设置为long格式
format只影响数据的输出格式,而不影响数据的计算与存储 - 常用数学函数:
- 函数调用格式:函数名(函数自变量的值)
- 函数的自变量规定为矩阵变量,如x=[1,2;3,4]表示2×2的矩阵;函数的自变量也可以是标量,如x=3。
- 函数在运算时,是将函数逐项作用于矩阵的每一个元素,所以最后运算结果是一个与自变量同型的矩阵,即自变量为2×2矩阵,函数运算结果也应为2×2矩阵。
常用函数的应用
- 三角函数
- sin():以弧度为单位
- sind():以角度为单位
- 取整函数
- fix():取数轴上靠近0的第一个整数,即舍去小数取整
- floor():向下取整,取小于或等于这个数的第一个整数
- ceil():向上取整,取大于或等于这个数的第一个整数
- round():四舍五入取整
- 取余函数
- rem(m,n):求m除以n的余数。如果含有负数,被除数是正结果为正,被除数是负结果为负。
- mod():求m除以n的余数。如果含有负数,除数是正结果为正,除数是负结果为负。
- 其他函数
- sqrt():求平方根
- exp():求自然指数
- abs():求实数的绝对值、复数的模、字符串的ASCⅡ码值
- 函数应用举例
- 求[1,100]区间内所有素数
>>x=1:100 //生成1到100内所有整数组成的向量x
>>k=isprime(x) //对x向量中所有元素进行挨个判断,返回一个与x类型相同的向量。isprime()返回值为0或1
>>k1=find(k) //k1为k向量中非0元素的序号
>>p=x(k1) //输出x向量中序号为k1的所有元素
字符型数据(字符串数据)
- 字符串是用单引号括起来字符序列。Matlab中,将一个字符串当作一个行向量,向量中每个元素对应一个字符,引用方法同数值向量相同。
- 若字符串中的字符含有单引号,则该单引号字符要用两个单引号来表示。
- 可以通过建立多行字符串的方式,建立字符串矩阵。但需注意各行字符数要想等,即列数要相同;当列数不等时要用空格来调整,使各行长度相等。
>>ch=['abcdef';'123456'];
>>ch(2,3)
>>ans=
3
>>ch='ABc123d4e56Fg9';
>>subch=ch(1:5)//截取ch第1~5个字符串组成子字符串
>》subch=ABC12
>>revch=ch(end:-1:1)//将字符串倒过来重新排列
>>revch=9gF65e4d321cBA
>>k=find(ch>='a'&ch<='z')//找到小写字母的位置,赋给k
>>k=3 7 9 13
>>ch(k)=ch(k)-('a'-'A')//将k位置的小写字符转换为大写
>>ch=ABC123D4E56FG9
>>length(k)//统计小写字母的个数
ans=4
字符串操作
- 字符串的执行
- 格式:eval(s);s–字符串
- 作用:将参数字符串s中的内容作为matlab命令来执行
>>t=pi;
>>m='[t,sin(t),cos(t)];'
>>y=eval(m)//执行m里t,sin(t),cos(t)三条命令,并将三个结果组成行向量输出给y
y=
3.1416 0.0000 -1.0000
- 字符串与数值之间的转换
- abs()和double():获取字符串矩阵所对应的ASCII码数值矩阵
- char()将ASCII码数值矩阵转换为字符串矩阵
>>s1='MATLAB';
>>a=abs(s1)
a=77 65 84 76 65 66
>>char(a+32)
ans=matlab
- 字符串比较
- 关系运算符比较:将两个字符串里每个字符按ASCII码数值逐个比较,比较结果为0或1,返回结果为一个数值向量。
- 字符串比较函数比较
- strcmp(s1,s2):比较两字符串是否相等,返回结果为0或1;
- strncmp(s1,s2,n):比较两个字符串前n个字符是否相等,返回结果为0或1;
- strcmpi(s1,s2):在忽略大小写前提下,比较两字符串是否相等,返回结果为0或1;
- strncmp(s1,s2,n):在忽略大小写前提下,比较两个字符串前n个字符是否相等,返回结果为0或1;
- 字符串查找与替换
- findstr(s1,s2):返回两个字符串中,短字符串在长字符串中开始的位置;
- strrep(s1,s2,s3):将字符串s1中的所有子字符串s2替换为字符串s3;
变量及其操作
变量与赋值语句
(1)变量
- 变量本质上是内存单元的一个抽象。
- Matlab中,变量名以字母开头,后接字母数字或下划线,最多63个字符。
- 变量名取分字母大小写。
- 标准函数名以及命令名必须用小写字母。
(2)赋值语句的两种格式
- 变量=表达式
- 表达式。即,将表达式的值赋给预定义变量ans。
- 若在赋值语句后加分号“;”,则仅进行赋值操作,不会在窗口显示运算后变量的结果。
预定义变量
预定义变量:由系统本身定义的变量
- ans:默认复制变量
- i和j:虚数单位
- pi:圆周率
- NaN:非数。在绘图时,若想裁掉其中一部分,将要裁掉部分的数据设为NaN即可。
变量的管理
(1)内存变量的删除与修改
- 工作区窗口右击变量
- who和whos命令
- who:显示驻留变量的名称
- whos:显示驻留变量的详细信息,包括名称、大小、所占字节数以及数据类型等
(2)内存变量文件
- 用于保存工作区变量的文件(.mat文件),也叫MAT文件。可将变量永久保留下来。
- Matlab保存数据的标准二进制文件
- MAT文件生成
- Save命令:创建内存变量文件
- 格式:save 文件名(不要.mat后缀) 变量名列表(多个以空格隔开)
- 例如:save mydata a x //将变量a,x保存在mydata.mat文件中。
- load命令:载入内存变量文件
- 格式:load 文件名(不要.mat后缀)
- 例如:load mydata
Matlab矩阵
矩阵的建立
-
直接输入法
-
将所有元素用中括号括起来,同一行元素用逗号隔开,不同行元素用分号隔开
-
例如,创建一个3×3矩阵A:A=[1,2,3;4,5,6;7,8,9],
-
利用已建立好的矩阵建立更大的矩阵
-
例如创建一个6×6的矩阵C:A=[1,2,3;4,5,6;7,8,9];B=[-1,-2,-3;-4,-5,-6;-7,-8,-9];则C=[A,B;B,A]。C的创建过程有点类似线性代数中的分块矩阵。
-
用实部矩阵和虚部矩阵构成复数矩阵
-
产生行向量
-
冒号表达式:
- 格式:e1:e2:e3
其中e1为初始值,e2为步长,e3为终止值。省略e2表示步长为1.
- 格式:e1:e2:e3
-
linspace函数
- 格式:linspace(a,b,n)
其中a表示行向量的第一个元素,b表示最后一个元素,n表示元素总数,省略n则自动产生100个元素。
- 格式:linspace(a,b,n)
结构矩阵和单元矩阵
- 结构矩阵(由结构数据构成的矩阵,结构数据类比高级编程语言中的结构体类型)
- 建立方法:采用给机构矩阵元素赋值的方法
- 格式:结构矩阵元素.元素成员名=表达式
- 单元矩阵
- 单元矩阵的每个元素就是不同类型的数据
- 建立方法:直接输入,外围用大括号围起来
矩阵元素的引用
(1)通过下标引用
A(m,n)表示A矩阵第m行第n列元素,若索引超出范围,则其余元素用0补足。如:(2)通过序号引用
Matlab矩阵元素按列存储,序号即矩阵元素在内存中的排列顺序,如:
以m×n矩阵为例,序号与下标对应关系为:A(i,j)=A((j-1)×m+i)。
- sub2ind():将矩阵中指定元素的行、列下标转换成存储的序号
- 格式:D=sub2ind(S,I,J)
- D:矩阵元素转换过后的序号,与I,J的格式对应
- S:矩阵的行数和列数组成的有两个元素的向量,一般用size(矩阵名)来获取。
- I:需要进行转换的矩阵元素的行下标。可为矩阵,表示要转换多个元素,此时I和J的行列数必须相同。
- J:需要进行转换的矩阵元素的列下标,可为矩阵,表示要转换多个元素。
- 如:D=sub2ind(size(A),[1,2;2,2],[1,1;3,2]),表示将A(1,1)、A(2,1)、A(1,1)、A(2,3)、A(2,2)元素的下标转换为各自的存储序号。返回一个表示这四个元素序号的2×2矩阵,元素排列与I,J对应,得到[1,2;6,4]
- 格式:D=sub2ind(S,I,J)
- ind2sub():将矩阵元素的序号转换成对应的下标
- 格式:[I,J]=ind2sub(S,D)
- D:矩阵元素的序号,可为包含多个元素的向量
- S:矩阵的行数和列数组成的有两个元素的向量,一般用size(矩阵名)来获取。
- I:转换后矩阵元素的行下标,与D的格式对应
- J:转换后矩阵元素的列下标,可为矩阵,表示要转换多个元素。
- 如:[I,J]=ind2sub([3,3],[1,3,5]),表示获取一个3×3矩阵,序号为1、3、5的矩阵元素的下标,得到I=[1,3,2],J=[1,1,2]
- 格式:[I,J]=ind2sub(S,D)
(3)利用冒号表达式作为下标获得子矩阵
既可用冒号表达式作为引用矩阵的下标,也可直接用单个的冒号作为行下标或列下标(代表全部行或全部列)。
- A(i,: ):第i行的全部元素
- A(:,j):第j列的全部元素
- A(i:i+m,k:k+m):第i~ i+m行内且在第k~k+m列中所有元素
- A(i:i+m,: ):第i~ i+m行的全部元素
- end运算符:表示某一维的末尾元素下标。
- A(3:end,: ):表示A矩阵第3行到最后一行的所有元素
(4)利用空矩阵删除矩阵元素
空矩阵:没有任何元素的矩阵——X=[]。
如:删除A矩阵第2列,第4列所有元素
(5)改变矩阵的形状
-
reshape(A,m,n):在矩阵总元素保持不变的前提下,将矩阵A重新排成m×n的二维矩阵。
-
注意:reshape函数只是改变原矩阵的行数和列数,并不改变原矩阵的元素个数及其存储顺序。
-
A( : ):将矩阵A的每一列元素堆叠起来,成为一个列向量。
Matlab基本运算
算术运算
包括基本算术运算和点运算
基本算术运算
Matlab算术运算都是在矩阵意义下进行的。单个数据的算术运算只是矩阵运算的一种特例。
基本算数运算符:+、-、*、/(右除)、(左除)、^(乘方)
- 加减运算
- 要求:进行运算的两个矩阵同型,否则将报错。运算时,两矩阵对应元素相加减。
- 一个标量也可和矩阵进行加减,即把标量和每个矩阵进行加减,得到一个新矩阵
- 乘法运算
- 要求: A×B,A的列数等于B的行数,此时称A、B矩阵可乘,或A、B维数和大小相容,否则将报错。
- 除法运算
- 如果A为非奇异矩阵,则B/A等价于B*inv(A),即B矩阵右乘A的逆矩阵,A\B等价于inv(A)*B,即A的逆矩阵右乘B矩阵。
- 若除法运算有标量参与,则两种除法(左除和右除)结果相同。
- 乘方运算
- 要求:A^x,A为方阵,x为标量
点运算
点运算符:. *(点乘)、. /(点右除)、.\ (点左除)、.^(点乘方)
要求:两矩阵同型,对应元素进行相关运算。如点乘:第一个元素与第一个元素相乘,第二个与第二个相乘。
关系运算
关系运算符:<、<=、>、>=、==、~=(不等于)
- 若两标量比较,直接比较大小,关系成立则运算结果为1,否则为0;
- 若为两同型矩阵比较,则对两矩阵对应元素进行逐个比较,运算结果为由0,1两种元素组成的与原矩阵同型的矩阵;
- 若标量与矩阵比较,则将标量与矩阵各个元素逐一比较,运算结果为由0,1两种元素组成的与原矩阵同型的矩阵;
逻辑运算
- 逻辑运算符:&(与)、|(或)、~(非)
- 在算术运算、关系运算、逻辑运算中,算术运算优先级最高,逻辑运算优先级最低,但逻辑非运算为单目运算,它的优先级比双目运算高,如:~9 == 1,先进行逻辑非运算 ~ 9,结果为0,再进行关系运算0==1,最终结果为0。
- 运算规则同关系运算。