MATLAB学习笔记1 MATLAB基础知识
文章目录
1.1 MATLAB数值类型
数值数据类型的分类
-
整型
无符号整数:无符号8、16、32、64位整数
带符号整数:带符号8、16、32、64位整数
>>x=int8(129) x=127 >>x=uint8(129) x=129
-
浮点型
单精度型实数:4个字节
双精度型实数:8个字节
>>class(4) ans= double >>class(single(4)) ans= single
-
复数型
复型数据包括实部和虚部两个部分,默认都为双精度型,虚数单位用i或者j来表示
real函数:求复数的实部
imag函数:求复数的虚部
数据数值的输出格式
format命令的格数:format 格式符
>>format long
>>50/3
ans=
16.666666666666668
>>format
>>50/3
ans=
16.6667
format short:默认格式,小数点后保留4位
format long:有效数字16位
format long e:有效数字16位加3位指数
format short e:有效数字5位加3位指数
format bank:保留两位小数位
format +:只给出正负
format rational:以分数的形式表示
format hex:以16进制数表示
format long g:15位有效数
format short g:5位有效数
常用的科学函数
-
函数的调用格式为
函数名(函数自变量的值)
函数的自变量规定为矩阵变量,当然也可以是标量,标量本身是矩阵的一种特例。
>> A=[4,2;3,6] A = 4 2 3 6 >> B=exp(A) B = 54.5982 7.3891 20.0855 403.4288
-
常见函数的应用
-
三角函数有以弧度为单位的函数和以角度为单位的函数,如果是以角度为单位的函数就在函数名后面加“d”,以示区别
>> sin(pi/2) ans = 1 >> sind(90) ans = 1
-
abs函数可以求实数的绝对值、复数的模、字符串的ASCII码值
>> abs(-4) ans = 4 >> abs(3+4i) ans = 5 >> abs('a') ans = 97
-
用于取整的函数有fix、floor、ceil、round
round函数按照四舍五入的规则取整
ceil函数是向上取整,取大于等于这个数的第一个整数
floor函数是向下取整,取小于等于这个数的第一个整数
fix函数是固定取靠近0的那个函数,即舍去小数取整
-
函数应用举例
%求一个三位正整数的个位数字、十位数字和百位数字 >> m=345; >> m1=rem(m,10) m1 = 5 >> m2=rem(fix(m/10),10) m2 = 4 >> m3=fix(m/100) m3 = 3
%求1-100的所有质数 >> x=1:100; >> k=isprime(x); >> k1=find(k); >> p=x(k1) p = 1 至 19 列 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 20 至 25 列 71 73 79 83 89 97
-
1.2 变量及其操作
变量与赋值语句
-
变量
-
变量本质上讲是内存单元的一个抽象
-
变量名是以字母开头,后接字母、数字或下划线的字符序列,最多63的字符
-
变量名区分字母的大小写
-
标准函数名以及命令名一般用小写字母
-
-
赋值语句
- 变量=表达式
- 表达式
>> y=exp(pi/2); >> x=sqrt(7)-2i; >> y=exp(pi/2); >> z=(5+cosd(47))/(1+abs(x-y)) z = 1.4395
-
预定义变量
预定义变量是由系统本身定义的变量
-
ans是默认赋值变量
-
i和j代表虚数单位
-
pi代表圆周率
-
NaN代表非数
-
变量的管理
-
内存变量的删除与修改
在右侧工作区窗口右键修改
-
who命令和whos命令
>> who 您的变量为: ans k k1 p x y z >> whos Name Size Bytes Class Attributes ans 1x25 200 double k 1x100 100 logical k1 1x25 200 double p 1x25 200 double x 1x1 16 double complex y 1x1 8 double z 1x1 8 double
-
内存变量文件
用于保存MATLAB工作区变量的文件叫做内存变量文件,其扩展名为.mat,也叫MAT文件
- save命令:创建内存变量文件
- load命令:装入内存变量文件
>> save mydata ans k >> load('mydata.mat')
1.3 MATLAB矩阵的表示
矩阵的建立
-
利用直接输入法建立矩阵:将矩阵的元素用中括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用逗号或空格分隔,不同行的元素之间用分号分隔。
>> A=[1,2,3;4,5,6;7,8,9] A = 1 2 3 4 5 6 7 8 9
-
利用已建好的矩阵建立更大的矩阵:一个大矩阵可以由已经建立好的小矩阵拼接而成。
>> 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 = 1 2 3 -1 -2 -3 4 5 6 -4 -5 -6 7 8 9 -7 -8 -9 -1 -2 -3 1 2 3 -4 -5 -6 4 5 6 -7 -8 -9 7 8 9
-
可以由实部矩阵和虚部矩阵构成复数矩阵
>> B=[1,2,3;4,5,6]; >> C=[6,7,8;9,10,11]; >> A=B+i*C A = 1.0000 + 6.0000i 2.0000 + 7.0000i 3.0000 + 8.0000i 4.0000 + 9.0000i 5.0000 +10.0000i 6.0000 +11.0000i
冒号表达式
格式: e1(初始值):e2(步长):e3(终止值)
linspace函数
linspace(a,b,n)
% a 第一个数 b 最后一个数 n 总个数
% 当n省略时,自动产生100个元素
结构矩阵和单元矩阵
-
结构矩阵
格式为: 结构矩阵元素.成员名=表达式
>> a(1).x1=10;a(1).x2='liu';a(1).x3=[11,21;34,78]; >> a(2).x1=12;a(2).x2='wang';a(2).x3=[34,191;27,578]; >> a(3).x1=10;a(3).x2='liu';a(3).x3=[11,21;34,78];
-
单元矩阵
建立单元矩阵和一般矩阵相似,直接输入就可以了,只是单元矩阵元素用大括号括起来
>> b={10,'liu',[11,21;34,78];12,'wang',[34,191;27,578];14,'cai',[13,890;67,231]} b = 3×3 cell 数组 {[10]} {'liu' } {2×2 double} {[12]} {'wang'} {2×2 double} {[14]} {'cai' } {2×2 double}
1.4 矩阵元素的引用
矩阵元素的引用方式
-
通过下标来引用矩阵的元素
>> A=[1,2,3;4,5,6]; >> A(4,5)=10; >> A A = 1 2 3 0 0 4 5 6 0 0 0 0 0 0 0 0 0 0 0 10
-
通过序号来引用
>> A=[1,2,3;4,5,6]; >> A(3) ans = 2
序号与下标是对应的,以m*n的矩阵A为例,矩阵元素A(i,j)的序号为(j-1)*m+i
也可以通过sub2ind和ind2sub函数实现相互转换
-
sub2ind函数:将矩阵中指定元素的行、列下标转换成储存的序号。
调用格式为D=sub2ind(S,I,J)S是矩阵的行数和列数,I是代表某个元素的行下标,J表示某个元素的列下标
>> A = [1:3;4:6]; >> D=sub2ind(size(A),[1,2;2,2],[1,1;3,2]) D = 1 2 6 4
-
ind2sub函数:将矩阵元素的序号转换成对应的下标。
调用格式为[I,J]=ind2sub(S,D)
S是矩阵的行数和列数,I是代表某个元素的行下标,J表示某个元素的列下标
>> [I,J]=ind2sub(size(A),D) I = 1 2 2 2 J = 1 1 3 2
-
-
利用冒号表达式获得子矩阵
子矩阵是指由矩阵中的一部分元素构成的矩阵
>> A=[1:5;6:10;11:15]; >> A(1:2,:) ans = 1 2 3 4 5 6 7 8 9 10 >> A(2:3,1:2:5) ans = 6 8 10 11 13 15
end运算符:表达某一维的末尾元素下标
>> A(end,:) ans = 11 12 13 14 15 >> A([1,3],3:end) ans = 3 4 5 13 14 15
删除矩阵中的元素
利用空矩阵删除矩阵的元素
>> A=[1,2,3,0,0;7,0,9,2,6;1,4,-1,1,8]
A =
1 2 3 0 0
7 0 9 2 6
1 4 -1 1 8
>> A(:,[2,4])=[]
A =
1 3 0
7 9 6
1 -1 8
改变矩阵的形状
reshape(A,m,n):在矩阵总元素保持不变的前提下,将矩阵A重新排成m*n的二位矩阵。
>> x=[1:12];
>> reshape(x,3,4)
ans =
1 4 7 10
2 5 8 11
3 6 9 12
A(:)矩阵A的每一列元素堆叠起来,成为一个列向量。
>> A=[-45,65,71;27,35,91]
A =
-45 65 71
27 35 91
>> B=A(:)
B =
-45
27
65
35
71
91
1.5 MATLAB基本运算
基本算数运算
-
加减运算:两个矩阵必须同型,如果是标量与矩阵进行加减运算,把标量和矩阵中的每一个元素进行加减运算
-
乘法运算:要求A的列数和B的行数要相等
-
除法运算:如果A为非奇异方阵,则B/A=B*inv(A),A\B=inv(A)*B
>> A=[1,2,3;4,2,6;7,4,9]; >> B=[4,3,2;7,5,1;12,7,92]; >> C1=A/B C1 = 7.9623 -4.2453 -0.0943 -4.5472 2.9434 0.1321 -5.1321 3.6415 0.1698 >> C2=A\B C2 = 0.5000 -0.5000 44.5000 1.0000 0.0000 46.0000 0.5000 1.1667 -44.8333 >> C3=A*inv(B) C3 = 7.9623 -4.2453 -0.0943 -4.5472 2.9434 0.1321 -5.1321 3.6415 0.1698 >> C4=inv(A)*B C4 = 0.5000 -0.5000 44.5000 1.0000 0.0000 46.0000 0.5000 1.1667 -44.8333
-
乘方运算
点运算
>> A=[1,2,3;4,2,6;7,4,9];
B=[4,3,2;7,5,1;12,7,92];
>> C=A.*B
C =
4 6 6
28 10 6
84 28 828
>> C=A*B
C =
54 34 280
102 64 562
164 104 846
关系运算
- 关系运算符:<、>、<=、>=、==、~=
- 当两个比较量是标量时,直接比较两数的大小。若关系成立,关系表达式结果为1,否则为0
- 当参与比较的量是两个同型的矩阵时,按照每个位置分别比较,得到1和0的矩阵
- 标量和矩阵比较时,将标量与矩阵每个值进行比较,得到1和0的矩阵
逻辑运算
逻辑运算符:&、|、~
- a&b a、b全为非0的时候,结果才为1,否则为0
- a|b a、b中只要有一个非0,结果为1,否则为0
- ~a如果a为非0,结果为0否则为1
- 如果参与逻辑运算是两个同型的矩阵时,按照每个位置分别运算,得到1和0的矩阵
- 标量和矩阵运算时,将标量与矩阵每个值进行逐个计算,得到1和0的矩阵
在各个运算中,算数运算的优先级最高,逻辑运算的优先级最低,但逻辑非运算是单目运算,它的优先级比双目运算要高
%求全部水仙花数 各位数字的立方之和等于该数字本身的三位正整数
>> A=[100:999];
>> A1=rem(A,10);%个位
A2=rem(fix(A/10),10);%十位
A3=rem(fix(A/100),10);%百位
>> k=find(A==A1.*A1.*A1+A2.*A2.*A2+A3.*A3.*A3)
k =
54 271 272 308
>> S=A(k)
S =
153 370 371 407
1.6 MATLAB中的字符串
字符串的表示
在matlab中字符串是用单引号括起来的字符序列
>> xm='Northwestern Polytechnical University'
xm =
'Northwestern Polytechnical University'
>> xm(1:3)
ans =
'Nor'
若字符串中的字符含有单引号,则该单引号字符要用两个单引号来表示
建立多行字符串形成字符串矩阵
>> ch=['abcdef';'123456'];
>> ch(2,3)
ans =
'3'
字符串的操作
-
字符串的执行
格式:eval(s) 将参数字符串中的内容当作作为对应的MATLAB命令来执行
>> t=pi t = 3.1416 >> m='[t,sin(t),cos(t)]' m = '[t,sin(t),cos(t)]' >> eval(m) ans = 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码值大小逐个进行比较,比较的结果是一个数值向量,向量中的元素为1或0 -
字符串比较函数
strcmp(s1,s2):用于比较字符串s1、s2是否相等,如果相等返回1,否则反回0
strncmp(s1,s2,n):用于比较两个字符串前n个字符是否相等,如果相等返回1,否则返回0
strcmpi(s1,s2):在忽略字母大小的前提下,比较字符串s1和s2是否相等,如果相等,返回1,否则返回0
strcmpi(s1,s2):在忽略字母大小的前提下,比较两个字符串前n个字符是否相等,如果相等,返回1,否则返回0
-
-
字符串的查找与替换
findstr(s1,s2):返回短字符串在长字符串中的开始位置
以用来获取字符串矩阵所对应的ASCII码数值矩阵**
-
char函数可以把ASCII码矩阵转换为字符串矩阵
>> s1='MATLAB'; >> a=abs(s1) a = 77 65 84 76 65 66 >> char(a+32) ans = 'matlab'
-
字符串的比较
-
利用关系运算符
每个字符依次按照ASCII码值大小逐个进行比较,比较的结果是一个数值向量,向量中的元素为1或0 -
字符串比较函数
strcmp(s1,s2):用于比较字符串s1、s2是否相等,如果相等返回1,否则反回0
strncmp(s1,s2,n):用于比较两个字符串前n个字符是否相等,如果相等返回1,否则返回0
strcmpi(s1,s2):在忽略字母大小的前提下,比较字符串s1和s2是否相等,如果相等,返回1,否则返回0
strcmpi(s1,s2):在忽略字母大小的前提下,比较两个字符串前n个字符是否相等,如果相等,返回1,否则返回0
-
-
字符串的查找与替换
findstr(s1,s2):返回短字符串在长字符串中的开始位置
strrep(s1,s2,s3):将字符串s1中的所有字符串s2替换为字符串s3