x = int8(129) //因为有符号型默认-127 - 127, 129超过范围
x = 129x = uint8(129) //无符号型默认0-255,未超范围
class(4)
ans = singleclass(single(4))
数值数据的输出格式
format命令的格式:format格式符,只影响输出格式,但不影响计算进度与存储格式精度。
format long //输出小数点后15位
50/3
ans =
16.666666666666668
format //默认short格式,输出小数点后4位
50/3
ans =
16.6667
sind(180/2)
ans =
1
sin(pi/2)
ans =
1
绝对值函数
abs(-4)
ans =
4
abs(3+4i)
ans =
5
abs(‘a’)
ans =
97
取整函数 fix,floor,ceil,round
round(4.7)
ans =
5
fix(-3.2) //固定取靠近小数点的整数。
ans =
-3
fix(4.7)
ans =
4
floor(3.6)
ans =
3
ceil(3.6)
ans =
4
floor(-3.6)
ans =
-4
ceil(-3.6)
ans =
-3
分别求三位正整数的个位数,十位数,百位数?
除以10的余数:个位数
除以10取整后,再除以10,余数即为原来的十位数
除以100后,余数即为原来的百位数
m=345
m =
345
m1 = rem(m,10)
m1 =
5
m2 = rem(fix(m/10),10)
m2 =
4
m3 = fix(m/100)
m3 =
3
求1-100之前所有素数(isprime())
x=1:100;
k=isprime(x);
k1=find(k) //生成k1向量,由x向量中k=1对应的元素组成。
k1 =
Columns 1 through 23
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83
Columns 24 through 25
89 97
p = x(k1)
p =
Columns 1 through 23
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83
Columns 24 through 25
89 97
3. 变量及其操作
计算的值,并将结果赋值给变量z
,然后显示计算结果。
x = sqrt(7) - 2i;
y = exp(pi/2);
z = (5 + cosd(47)) / (1 + abs(x - y))
z =
1.4395
预定义变量:由系统本身定义的变量
ans: 是默认赋值变量
i:代表虚数单位
pi:代表圆周率
NaN:代表非数
内存变量文件:用于存储matlab工作区变量的文件,其扩展名为mat,也叫.MAT文件
save命令:创建内存变量文件
load命令:装入内存变量文件
save mydata x y z
load(‘mydata.mat’)
利用已经建好的矩阵建立更大的矩阵:一个大矩阵可以由已经建立好的小矩阵拼接而成
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
冒号表达式
linspace函数 linspace(a, b, n) //a start; b end; n quantity
linspace(0,pi,10)
ans =
0 0.3491 0.6981 1.0472 1.3963 1.7453 2.0944 2.4435 2.7925 3.1416
结构矩阵和单元矩阵
(1)结构矩阵
结构矩阵.成员名=表达式
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 = 14; a(3).x2 = ‘cai’; a(3).x3 = [13,890; 67, 231];
a
a =
1x3 struct array with fields:
x1
x2
x3
a(1)
ans =
x1: 10
x2: 'liu'
x3: [2x2 double]
>> a(2)
ans =
x1: 12
x2: 'wang'
x3: [2x2 double]
a(3)
ans =
x1: 14
x2: 'cai'
x3: [2x2 double]
(2)单元矩阵
建立单元矩阵和一般矩阵相似,直接输入即可,只是单元矩阵用大括号括起来
b ={10, ‘liu’, [11,21; 34, 78]; 12, ‘wang’, [34,191; 27, 578]; 14, ‘cai’, [13,890; 67, 231]}
b =
[10] 'liu' [2x2 double]
[12] 'wang' [2x2 double]
[14] 'cai' [2x2 double]
矩阵元素的引用方式
(1)通过下标来引用
A = [1, 2, 3; 4, 5, 6];
A(4,5) = 10
A =
1 2 3 0 0
4 5 6 0 0
0 0 0 0 0
0 0 0 0 10
(2)通过序号来引用
在matlab中,矩阵元素按列存储,即首先存储第1列元素,然后第2列元素,一直到矩阵的最后一列元素
矩阵元素的序号就是矩阵元素在内存中的排列顺序
A = [1, 2, 3; 4, 5, 6];
A
A =
1 2 3
4 5 6
A(2)
ans =
4
A(3)
ans =
2
A(4)
ans =
5
序号与下标是一一对应的,以MxN矩阵A为例,矩阵A(i,j)的序号为(j-1)x(m+i)
矩阵元素的序号与下标可以用sub2ind和ind2sub函数实现相互转换
sub2ind函数:将矩阵中指定元素的行、列下标转换成存储的序列号。调用格式为:
D=sub2ind(S,I,J)
D:序号
S:行数和列数组成的向量
I:转换矩阵元素的行下标
J:转换矩阵元素的列下标
A
A =
1 2 3
4 5 6
D=sub2ind(size(A),[1,2;2,2],[1,1;3,2])
D =
1 2
6 4
//此处D为序号: A(1,1) 对应序号为1; A(2,1)对应序号为2,因为是按列存储。A(2,3)对应序号为6, A(2,2)对应序号为4
A = [1,2,3;4,5,6]
A =
1 2 3
4 5 6
A(1)
ans =
1
A(1,1)
ans =
1
A(2)
ans =
4
A(2,1)
ans =
4
A(6)
ans =
6
A(2,3)
ans =
6
A(4)
ans =
5
A(2,2)
ans =
5
ind2sub函数:将矩阵元素的序号转换成对应的下标
[I,J]=ind2sub(S,D)
[I,J]=ind2sub([3,3],[1,3,5])
I =
1 3 2
J =
1 1 2
利用冒号表达式获取子矩阵
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行的全部元素
A=[1,2,3,4,5;6,7,8,9,10;11,12,13,14,15]
A =
1 2 3 4 5
6 7 8 9 10
11 12 13 14 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=[1,2,3,4,5;6,7,8,9,10;11,12,13,14,15;16,17,18,19,20]
A =
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
A([1,4],3:end)
ans =
3 4 5
18 19 20
A(end,:)
ans =
16 17 18 19 20
删除元素:
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):在矩阵总元素保持不变的前提下,将矩阵重新排成mxn的二维矩阵
注意:reshape函数只改变元矩阵的行数和列数,但并不改变元矩阵元素个数以及原有的存储顺序。
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
y=reshape(A,5,3)
y =
1 4 2
7 3 1
1 9 0
2 -1 6
0 0 8
A(:):将矩阵Adequate每一列元素堆叠起来,成为一个列向量。等价于reshape(A,15,1)
B=A(:)
B =
1
7
1
2
0
4
3
9
-1
0
2
1
0
6
8
C=reshape(A,15,1)
C =
1
7
1
2
0
4
3
9
-1
0
2
1
0
6
8
算术运算
(1)基本算术运算
基本算术运算符+,-,*,/(右除),\左除,^乘方
matlab算术运算是在矩阵意义下进行的
单个数据的算术运算只是矩阵运算的一种特例
加减运算
若两矩阵同型,则运行时两矩阵的对应元素相加减
若两矩阵不同型,matlab给出错误信息
一个标量也可以跟矩阵进行加减运算,此时标量和矩阵的每一个元素进行加减运算。
乘法运算
矩阵A和矩阵B进行乘法运算,要求矩阵A的列数和矩阵B的行数相同,此时则称矩阵A,B是可乘的,或称矩阵A,B维数和大小相容
如果两者的维数或大小不相容,则给出错误信息,提示两个矩阵不可乘
除法运算
Matlab中有两种除法运算,右除或左除
若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 = B/A
C1 =
-0.1667 -3.3333 2.5000
-0.8333 -7.6667 5.5000
12.8333 63.6667 -36.5000
C2 = A\B
C2 =
0.5000 -0.5000 44.5000
1.0000 0.0000 46.0000
0.5000 1.1667 -44.8333
3/4
ans =
0.7500
a=[10,25]
a =
10 25
a/5
ans =
2 5
乘方运算
矩阵的乘方可以表示为A^x,要求A为方阵,x为标量
A=[1,2,3;4,5,6;7,8,0];
A^2
ans =
30 36 15
66 81 42
39 54 69
(2)点运算
点运算符:./, ., .^, .*
两矩阵进行点运算是指他们的对应元素进行相关运算,要求两矩阵同型
A=[1,2,3;4,5,6;7,8,9];
B=[-1,0,1;1,-1,0;0,1,1];
C=A.*B
C =
-1 0 3
4 -5 0
0 8 9
D=A*B
D =
1 1 4
1 1 10
1 1 16
x=[0.1:0.3:1]
x =
0.1000 0.4000 0.7000 1.0000
y=sin(x).*cos(x) //此时的sinx cosx是向量
y =
0.0993 0.3587 0.4927 0.4546
关系运算
关系运算符:<, <=, >, >=, ==, ~=
当两个标量进行比较时,直接比较两个数的大小。若成立,关系表达式的结果为1,否则返回0
3>4
ans =
0
x=5
x =
5
x==5
ans =
1
当参与比较的量是两个同型矩阵时,比较按照两个矩阵相同位置对应元素按标量关系逐个比较。最终关系运算的结果是一个与原矩阵同型矩阵,元素由0,1构成
当参与比较的一个是标量,另一个是矩阵时,则把标量与矩阵中的每一个元素按照标量关系逐一比较,最终关系运算的结果是一个与原矩阵同型矩阵,元素由0,1构成
建立3阶方阵,判断A的元素是否为偶数
A=[24,35,13;22,63,23;39,47,80]
A =
24 35 13
22 63 23
39 47 80
P=rem(A,2)==0
P =
1 0 0
1 0 0
0 0 1
逻辑运算
逻辑运算符& | ~
当参与比较的量是两个同型矩阵时,比较按照两个矩阵相同位置对应元素按标量关系逐个比较。最终关系运算的结果是一个与原矩阵同型矩阵,元素由0,1构成
当参与比较的一个是标量,另一个是矩阵时,则把标量与矩阵中的每一个元素按照标量关系逐一比较,最终关系运算的结果是一个与原矩阵同型矩阵,元素由0,1构成
水仙花数是指各位数字的立方等于该数本身的三位正整数,求所有的水仙花总数。
m=100:999;
m1=rem(m,10);
m2 = rem(fix(m/10),10);
m3 = fix(m/100);
k = find(m==(m1.*m1.*m1 + m2.*m2.*m2 + m3.*m3.*m3))
k =
54 271 272 308
s=m(k)
s =
153 370 371 407
字符串的表示
Matlab中,字符串是用单引号括起来的字符序列
xm = ‘Centural South University’;
xm(1:3)
ans =
Cen
若字符串中的字符含有单引号,则该单引号字符用两个单引号来表示
‘I”m a student’
ans =
I’m a student
建立多行字符串,形成字符串矩阵
ch=[‘abcdef’;’123456’]
ch =
abcdef
123456
ch(2,3)
ans =
3
ch=[‘a,b,c,d,e,f’;’1,2,3,4,5,6’]
ch =
a,b,c,d,e,f
1,2,3,4,5,6
ch(2,3)
ans =
2
ch(2,2)
ans =
,
建立一个字符串向量,然后对该向量做如下处理
1.取第1~5个字符组成字符串
2.将字符串倒过来重新排序
3.将字符串中的小写字母变成大写字母,其余字母不变
4. 统计字符中小写字母的个数
ch=’ABc123d4e56Fg9’;
subch=ch(1:5)
subch =
ABc12
revch=ch(end:-1:1)
revch =
9gF65e4d321cBA
k=find(ch>=’a’ & ch<=’z’)
k =
3 7 9 13
ch(k)=(ch(k)-(‘a’-‘A’))
ch =
ABC123D4E56FG9
length(k)
ans =
4
(1)字符串的执行
格式:eval(s)
t=pi;
m=’[t,sin(t),cos(t)]’;
y=eval(m)
y =
3.1416 0.0000 -1.0000
(2)字符串与数值之间转换
abs与double函数都可以用于获取字符串矩阵所对应的ASICII码数值矩阵
char函数可以把ASICII码矩阵转换成字符串矩阵
s1=’MATLAB’;
a=abs(s1)
a =
77 65 84 76 65 66
char(a)
ans =
MATLAB
char(a+32)
ans =
matlab
(3)字符串的比较
字符串比较有两种形式,关系运算符比较,或字符串比较函数
关系运算符比较:两个字符串里对应元素按照ASICII值的大小逐个比较,比较的结果是一个数值向量,元素由0,1构成
‘www0’>’W123’
ans =
1 1 1 0
字符比较函数用于判断字符串是否相当,有4中比较方式
1.strcmp(s1,s2):比较两个字符串s1与s2是否相等,相等返回1,否则返回0
2.strncmp(s1,s2,n):比较两个字符串s1与s2前n个字符是否相等,相等返回1,否则返回0
3.strcmpi(s1,s2):在忽略字母大小写的前提下,比较两个字符串s1与s2是否相等,相等返回1,否则返回0
4.strncmpi(s1,s2,n):在忽略字母大小写的前提下,比较两个字符串s1与s2前n个字符是否相等,相等返回1,否则返回0
strcmp(‘www0’,’w123’)
ans =
0
strncmpi(‘www0’,’w123’,1)
ans =
1
(4)字符串的查找与替换
findstr(s1,s2):返回短字符串在长字符串中的开始位置
strrep(s1,s2,s3):将字符串s1中的所有子字符串s2替换为s3中的开始位置
p=findstr(‘This is a test!’,’is’)
p =
3 6
p=findstr(‘is’,’This is a test!’)
p =
3 6
result = strrep(‘This is a Test!’,’Test’,’Class’)
result =
This is a Class!