matlab语言主要功能:
数值计算 符号计算 图形绘制 程序流程控制 工具箱
1.1matlab系统环境
…:续行符
更改当前文件夹:cd+路径
clear:清除工作区的全部变量
1.2数值数据
分类:整型,浮点型,复数型
(1)整型
uint8:转换为无符号8位整型(0-28-1)
int8:转换为带符号8位整型(-27-1, 27-1)
eg:
x=int8(129)
x =
127
x=uint(129)
x =
NumericType (具有属性):
DataTypeMode: 'Fixed-point: binary point scaling'
Signedness: 'Unsigned'
WordLength: 129
FractionLength: 0
IsAlias: 0
DataScope: 'Auto'
HeaderFile: ''
Description: ''
(2)浮点型
单精度:4字节
双精度:8字节(默认)
single:转换为单精度
double:转换为双精度
eg:>> class(4) class是类型
ans =
double
class(single(4))
ans =
single
(3)复数型:实部+虚部(默认双精度)
虚数单位用i或j表示
eg:
6+5i
ans =
6.0000 + 5.0000i
6+5j
ans =
6.0000 + 5.0000i
数值数据的输出格式:format格式符(只影响输出格式,不影响运算和存储)
eg:>> format long
50/3
ans =
16.666666666666668
format (回到默认short)
50/3
ans =
16.6667
常用数学函数:
(1)函数的调用格式:函数名(函数自变量的值)
eg: >> a=[4,2;3,6]
a =
4 2
3 6
b=exp(a) # exp(x)=ex
b =
54.5982 7.3891
20.0855 403.4288
(2)常用函数的应用
①:以°为单位的函数在函数后面加d
eg:
sin(pi/2)
ans =
1
sind(90)
ans =
1
②:abs可求实数的绝对值,复数的模,字符串的ASCII值
eg:
abs(-4)
ans =
4
abs(4+3i)
ans =
5
abs(‘a’)
ans =
97
3.取整函数
- round:四舍五入取整
- ceil:向上取整
- floor:向下取整
- fix:固定取靠近0的整数
eg:
round(4.7)
ans =
5
ceil(-3.8)
ans =
-3
floor(3.6)
ans =
3
fix(-3.2)
ans =
-3
④:函数应用举例
1.分别求一个三位整数的个位,十位,百位
m=345;
m1=rem(m,10)
m1 =
5
m2=rem(fix(m/10),10)
m2 =
4
m3=fix(m/100)
m3 =
3
2.求【1,100】之间所有素数
isprime(n):n为素数返回1,否则返回0
x=1:100;
k=isprime(x);
k1=find(k); #find找出k1向量中的元素为k向量中非0元素的序号
p=x(k1) #输出x中所有素数
p =
1 至 14 列
2 3 5 7 11 13 17 19 23 29 31 37 41 43
15 至 25 列
47 53 59 61 67 71 73 79 83 89 97
1.3变量及其操作
变量名:字母+数字下划线(区分字母大小写)
注:标准函数名,命令名必须小写
eg:
5
+
c
o
s
47
°
1
+
∣
x
−
y
∣
\frac{5+cos47°}{1+|x-y|}
1+∣x−y∣5+cos47°
其中x=
7
\sqrt 7
7-2i ,y=
e
p
i
/
2
e^{pi/2}
epi/2
x=sqrt(7)-2i;
y=exp(pi/2);
z=(5+cosd(47))/(1+abs(x-y))
z =
1.4395
预定义变量:由系统本身定义的变量
eg:ans是默认赋值变量
NaN是非数
变量的管理:who与whos命令:显示已有的变量信息
1.4矩阵的表示
矩阵的建立:(1)直接法
(2)用先建立好的小矩阵拼接成大矩阵
eg:
a=[1,2];
b=[3,4];
c=[a,b;b,a]
c =
1 2 3 4
3 4 1 2
(3)复数矩阵
eg:
d=a+i*b
d =
1.0000 + 3.0000i 2.0000 + 4.0000i
冒号表达式:
格式:e1:e2:e3 初值:步长:终值
t=0:1:5
t =
0 1 2 3 4 5
linspace函数:产生行向量
linspace(a,b,n) 第一个元素:最后一个元素:元素总数
注:n省略时,自动产生100个元素
l=linspace(0,pi,6)
l =
0 0.6283 1.2566 1.8850 2.5133 3.1416
结构矩阵和单元矩阵:
(1)结构矩阵:
格式:结构矩阵元素.成员名=表达式
a(1).x1=1;a(1).x2=‘liu’;a(1).x3=[1,2];
a(2).x1=2;a(2).x2=‘liu’;a(2).x3=[3,4];
a(3).x1=3;a(3).x2=‘liu’;a(3).x3=[5,6];
a
a =
1x3 struct array with fields:
x1
x2
x3
(2)单元矩阵:用大括号
b={1,‘liu’,[1,2];2,‘cai’,[3,4];3,‘wang’,[5,6]}
b =
[1] 'liu' [1x2 double]
[2] 'cai' [1x2 double]
[3] 'wang' [1x2 double]
1.5矩阵元素的引用
(1)通过下标:
A=[1,2;3,4];
A(3,4)=5
A =
1 2 0 0
3 4 0 0
0 0 0 5
(2) 通过序号:矩阵再matlab中按列存储
A=[1,2,3;4,5,6]
A =
1 2 3
4 5 6
A(5)
ans =
3
相互转换:
- sub2ind:行列下标转换为存储序号
d=sub2ind(S,I,J) 行数和列数组成的向量,转换矩阵元素的行下标,列下标
注:A矩阵如上,D时一个序号矩阵,每一个元素都代表序号
D=sub2ind(size(A),[1,2;2,2],[1,1;3,2])
D =
1 2
6 4
- 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如上
A(end,:)
ans =
11 12 13 14 15
A([1,3],3:end) #【1,3】是第一行和第三行
ans =
3 4 5
13 14 15
利用空矩阵删除矩阵元素:
A(:,[2,5])=[] # 删除第二列和第五列的元素
A =
1 3 4
6 8 9
11 13 14
改变矩阵的形状:
reshape(A,m,n):总元素保持不变,重新排列成m*n的二维矩阵
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
reshape(A,5,3)
ans =
1 12 9
6 3 14
11 8 5
2 13 10
7 4 15
A(:):将矩阵A中每一列元素堆叠起来,成为一个列向量
1.6matlab基本运算
算术运算:矩阵意义下进行的
基本运算符:+,-,,/(右除),(左除),^(乘方)
(1)基本算术运算
加减:矩阵同型,就是矩阵的加减法
乘法:矩阵的乘法,A的行数要和B的列数相同
B/A=Binv(A)
A\B=inv(A)*B
注:前提是A矩阵可逆,inv是求逆矩阵
乘方:A^x,要求A为方阵,x为标量
(2)点运算:要求矩阵同型
A=[1,2,3;,4,5,6;7,8,9];
B=[1,0,1;1,0,1;1,0,1];
C=A.*B
C =
1 0 3
4 0 6
7 0 9
D=A*B
D =
6 0 6
15 0 15
24 0 24
当x=1,4,7,10时,分别求y=sinxcosx的值
x=1:3:10;
y=sin(x).*cos(x)
y =
0.4546 0.4947 0.4953 0.4565
关系运算:==(等于) ~=(不等于)
- 当两个比较量是标量时,直接比较大小,成立1,否则0.
- 当两个同型矩阵,对两矩阵相同位置的元素逐个比较,最终结果也是一个同型矩阵,元素由0,1构成
- 标量与矩阵,则把标量与矩阵的每一个元素逐个比较,得出与原矩阵同型的矩阵,元素由0,1构成
eg:建立A-3,判断A 的元素是否为偶数
A=[1,2,3;,4,5,6;7,8,9];
P=rem(A,2)==0
P =
0 1 0
1 0 1
0 1 0
逻辑运算:&(与) |(或) ~(非)
单目>双目
eg:水仙花数:各位数字的立方和等于该数本身的三位数
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
r=m(k)
r =
153 370 371 407
1.7字符串处理
**字符串的表示:**字符串中的单引号要用双引号替换表示
eg:
- 取第1-5个字符组成的子字符串
- 将字符串倒序重新排列
- 小写变大写,其余不变
- 统计小写字母个数
ch=‘ABc123d4e56Fg9’;
subch=ch(1:5)
subch =
ABc12
revch=ch(end👎1)
revch =
9gF65e4d321cBA
k=find(ch>=‘a’&ch<=‘z’)
k =
3 7 9 13
ch(k)=ch(k)-(‘a’-‘A’) #小写字母减去大小写字母之间的差值(32)得到大写字母
ch =
ABC123D4E56FG9
length(k)
ans =
4
字符串的操作:
(1)字符串的执行:matlab中eval()函数的功能就是将括号内的字符串视为语句并运行。
t=pi;
m=’[t,sin(t),cos(t)]’;
y=eval(m)
y =
3.1416 0.0000 -1.0000
(2)字符串与数值之间的转换
char可把ASCII码矩阵转化为字符串矩阵
s=‘MATLAB’;
s1=abs(s)
s1 =
77 65 84 76 65 66
char(s1+32)
ans =
matlab
(3)字符串的比较:
关系运算符:按ASCII码依次比较,1,0
‘www0’>=‘W123’
ans =
1 1 1 0
字符串比较函数:1,0
- strcmp(s1,s2):比较是否相等
- strncmp(s1,s2,n):比较两字符串前n个字符是否相等
- strcmpi(s1,s2):忽略字母大小写,比较是否相等
- strncmpi(s1,s2,n):忽略字母大小写,比较两字符串前n个字符是否相等
(4)字符串的查找与替换
findstr(s1,s2):返回短字符串在长字符串中的开始位置
strrep(s1,s2,s3):将字符串s1中的所有子字符串s2替换为字符串s3
p=findstr(‘This is a test!’,‘is’)
p =
3 6
m=findstr(‘is’,‘This is a test!’)
m =
3 6
n=strrep(‘This is a test!’,‘test’,‘class’)
n =
This is a class!