Matlab 专题一
一、系统环境
1、“...” 换行符号
2、变量名的优先级,高于内部的函数;变量名要避开内有特定含义词。
3、设置文件搜索路径,“ path ”命令,>>path(path,'d:\work'); 将D盘下的work文件夹设为文件搜索路径
4、Matlab 首先执行当前文件夹下的文件,然后再去执行搜索路径文件夹下的同名M文件。
5、重点时设置当前文件夹和文件搜索路径
6、Ctrl + R 注释掉一行;Ctrl + T 撤销注释此行
二、数值数据
数值数据默认为双精度型:
“class()” 函数,可以用来查看变量的数据类型
1、整型(int8; uint8; int16; uint16; int32; uint32; int64; uint64)共有八种类型的你函数
int8()函数: 将其他类型的数据转换为有符号8位整型,取值范围: -2^7 ~ 2^7-1;
uint8()函数:将其他类型的数据转换为无符号8位整型,取值范围: 0 ~ 2^8-1;
%{ 多行注释语句写在这 %} x = int8(129); %将数值数据129定义为有符号8位整型数据 y = uint8(129); %将数值数据129定义为无符号8位整型数据
2、浮点型(single; double)共两种类型的函数
single()函数:将其他类型的数据转换为单精度型;
double()函数:将其他类型的数据转换为双精度型;
3、复型(包括实部和虚部,实部和虚部默认都是双精度)(虚数单位用 i 或者 j 来表示)
real()函数:求复数的实部;
imag()函数:求复数的虚部;
4、数值数据的输出格式
format 命令的格式:format 格式符 (只会影响数据输出格式,不会影响数据的输出和存储)
>> format long %输出格式设置为 小数点后15位 >> 4/3 ans = 1.333333333333333 >> format %恢复默认的输出格式 小数点后4位 >> 4/3 ans = 1.3333
5、常用数学函数
函数的调用格式为:函数名(函数自变量值)
函数的自变量规定为矩阵变量,当然也可以是标量,标量本身是矩阵的一种特例。函数在运算时是将函数逐项作用于矩阵的每个元素上,所以最后运算的结果就是一个与自变量同型的矩阵。
>> A = [4,2;3,6] A = 4 2 3 6 >> B = exp(A) B = 54.5982 7.3891 20.0855 403.4288
①三角函数( sin(); sind() )
>> sin(pi/2) %以弧度为自变量的三角函数 ans = 1 >> sind(90) %以角度为自变量的三角函数,后面有个d以示区分 ans = 1
②abs函数(可以用来求实数的绝对值、复数的模、字符串的ASCII码值)
>> abs(-pi) %求实数的绝对值 ans = 3.1416 >> abs(5+12j) %求复数的模值 ans = 13 >> abs('%') %字符串的ASCII码值 ans = 37
③取整的函数( fix()、floor()、ceil()、round() )
fix()函数:固定取靠近0的整数,即直接舍去小数点后的整数;
round()函数:四舍五入取整;
ceil()函数:向上取整,取大于这个数的最小整数;
floor()函数:向下取整,取小于这个数的最大整数;
④取余数的函数( rem() )
求[1,100]区间内的所有素数(实例)
x = 1:100; %定义一个1到100的向量 k = isprime(x); %isprime()函数:是素数返回1,不是素数返回0 k1 = find(k); %find()函数:返回向量k中不是零的元素的序号 p = x(k1); disp(p); %输出p到命令行 %{ x k都是长度为100向量 %}
三、变量及其操作
1、变量本质上讲是内存单元的一个抽象。变量一般都有一个名字,通过名字就能访问到该变量,或者说通过名字就能访问到内存单元。
2、变量名区分大小写,标准函数名和命令名一般都用小写字母。
3、ans是默认赋值变量
4、i和j代表虚数单位
5、pi代表圆周率
6、NaN代表非数(绘图)
变量管理
who命令,用来查看已定义变量的变量名。
whos命令,用来查看已定义变量的详细信息。
变量保存,.mat文件,MAT文件
变量保存与调用
%变量永久保存与调用%
%变量初始化%
>> x = 3;
>> y = 4;
>> z = 5;
>> save mydate1 x y z %将变量 x y z 保存到 mydate1.mat文件中
%下次要使用 mydate1 中的变量时,输入以下命令即可%
>> load mydate1 %将mydate1中保存的变量装载到工作区的变量中
四、Matlab矩阵的表示
1、矩阵的建立
(1)直接建立矩阵
>>A = [1,2,3;4,5,6;7,8,9] 分行用逗号,分列用分号
A =
1 2 3
4 5 6
7 8 9
(2)拼接矩阵
多个行列合适的矩阵可以拼接到一起
(3)同型矩阵可以构成复数矩阵
例如:A和B是同型矩阵,C = A + i*B; 则C就是一个复数矩阵
2、行向量
(1)冒号表达式
(2)linspace函数
linspace(a,b,n) ;
a 是第一个元素
b 是最后一个元素
n 是向量总数
3、结构矩阵和单元矩阵
(1)结构矩阵
(2)单元矩阵
五、矩阵元素的引用
1、矩阵元素通过下标来引用
>>A=[1,2,3;4,5,6]; >>A(4,5)=12
引用用小括号
2、通过序号来引用
矩阵元素的存储是按列存储的、首先是第一列元素、然后再存储第二列元素...一直到最后一列元素。
矩阵元素的序号就是矩阵元素在内存中的序号。
3、sub2ind()函数 与 ind2sub()函数
sub2ind()函数:将矩阵中指定元素的行、列下标转换成存储的序号。
ind2sub()函数:将矩阵中指定元素的存储的序号转换成元素的行、列下标
>> A =
1 2 3
4 5 6
>> D = sub2ind(size(A),[1,2;2,1],[3,2;3,2])
D =
5 4
6 3
% D = sub2ind(矩阵的行数、列数组成的二维向量,行下标,列下标)%
A =
1 2 3 4 5
6 7 8 9 10
>> [I,J] = ind2sub(size(A),[1,2,3,4])
I =
1 2 1 2
J =
1 1 2 2
% [I,J] = ind2sub(矩阵行数、列数组成的向量,序号) %
4、利用冒号表达式获得子矩阵
A(i,:) 第i行的全部元素
A(:,j) 第j列的全部元素
A(i:i+m,k:k+m) 矩阵第i至i+m行、第k至k+m列的全部元素
end运算符:表示某一维的末尾元素下标(是一个数)
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) % 结果为:第1行和第4行 的 第3到5列 组成的子矩阵 % ans = 3 4 5 18 19 20
5、删除矩阵中的元素
利用空矩阵来删除矩阵中的元素
>> A A = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 >> x=[] x = [] >> A(1,:)=[] A = 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
6、改变矩阵的形状
reshape(A,m,n): 在矩阵总元素保持不变的前提下,将矩阵A重新排成m×n的二维矩阵。
reshape()函数只会改变矩阵的行数和列数,不会改变元素的总数,不会改变元素的存储顺序。
A = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 >> reshape(A,5,4) ans = 1 7 13 19 6 12 18 5 11 17 4 10 16 3 9 15 2 8 14 20 >> reshape(A,2,10) ans = 1 11 2 12 3 13 4 14 5 15 6 16 7 17 8 18 9 19 10 20
A(:):将矩阵A的每一列元素堆叠起来,成为一个列向量。
>> B=[1:4;5:8] B = 1 2 3 4 5 6 7 8 >> B(:) ans = 1 5 2 6 3 7 4 8
六、Matlab基本运算
1、基本算术运算
矩阵加减运算:必须是两个同型矩阵,相加减后得到新的矩阵。
矩阵乘法运算:A乘B,要求A、B矩阵是可乘的,A的列数要与B的行数相等。(线性代数中矩阵的乘法)
矩阵的除法运算:有两种,右除/ 和 左除\;如果A矩阵是非奇异方阵,则B/A等效于B* inv(A),A\B等效于inv(A)*B。(inv()是取矩阵的逆)
CS理解:被除号压在下面的是被除数。
对于矩阵运算,一般情况下A\B 不等于 B/A ,含有标量(非向量)的运算两种除法结果相同
% 左除右除的区别 % >> a=[10.5,50] a = 10.5000 50.0000 >> a/5 ans = 2.1000 10.0000 >> 5\a ans = 2.1000 10.0000
乘方运算:
一个矩阵的乘方运算可以表示成A^x,要求A为方阵,x为标量(非向量)。
>> A A = 1 2 3 4 2 6 7 4 9 >> A^2 ans = 30 18 42 54 36 78 86 58 126 >> A*A ans = 30 18 42 54 36 78 86 58 126
点运算:
点运算符:.* ./ .\ .^,分别是点乘、点右除、点左除、点乘方。
要求连个矩阵为同型矩阵,两矩阵进行点运算,是指它们的对应元素进行相关运算。
思考:
>> x=0.1:0.3:1; >> y=sin(x).*cos(x); >> y y = 0.0993 0.3587 0.4927 0.4546
此程序中x是一个向量,包含0.1、0.4、0.7、1四个元素;
sin(x)和cos(x)同样都是向量;所以要用点运算。
2、关系运算符
<、<=、>、>=、==(等于)、~=(不等于)
当参与比较的量是两个同型矩阵时,比较是对两矩阵相同位置的元素按标量关系规则逐个进行,最终的关系运算的结果是一个与原矩阵同型的矩阵,它的元素由0或1组成。
当参与比较的量一个是标量,而另一个是矩阵时,则把标量与矩阵的每个元素按标量关系规则逐个比较,最终的关系运算的结果是一个与原矩阵同型的矩阵,它的元素由0或1组成。
3、逻辑运算
&、|、~ : 与、或、非
若参与逻辑运算的是两个同型矩阵,那么将对矩阵相同位置
上的元素按标量规则逐个进行运算,最终运算结果是一个与
原矩阵同型的矩阵,其元素由或0组成。若参与逻辑运算的一个是标量,一个是矩阵,那么将在标量
与矩阵中的每个元素之间按标量规则逐个进行运算,最终运
算结果是一个与原矩阵同型的矩阵,其元素由1或0组成。水仙花数例子
>> 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= 'Central South University'
>>xm(1:3)
ans =
Cen>> 'I''am a teacher' ans = 'I'am a teacher'
字符串中有单引号,则要用两个单引号来表示实际上的一个单引号。
建立多行字符串,形成字符串矩阵。
1、字符串操作
(1)字符串执行函数 eval(s) ,其中 s 是字符串。就是将s字符串的内容作为matlab命令来执行
(2)字符串与数值之间的转换(小写字母比大写字母ASCII码值大32)
》》》abs和 double函数都可以用来获取字符串矩阵所对应的
ASCII码数值矩阵。
》》》char函数可以把ASCII码矩阵转换为字符串矩阵。>> s1 = 'MATLAB'; >> a = abs(s1) a = 77 65 84 76 65 66 >> char(a+32) ans = 'matlab' >> char(a) ans = 'MATLAB'
(3)字符串比较
字符串的比较有两种方法:利用关系运算符或字符串比较函数。
关系运算符比较:两个字符串里的每个字符依按ASCII值大小逐个进行比较,比较的结果是一个数值向量,向量中的元素要么是1,要么是0。
字符串比较函数用于判断字符串是否相等,有4种比较方式,函数如下:
① strcmp(s1,s2):用来比较字符串s1和s2是否相等,如果相等,返回结果为1,否则返回0.
② strncmp(sl, s2n):用来比较两个字符串前n个字符是否相等,如果相等返回1,否则返回0.
③ stromal(sl,S2):在忽略字母大小写前提下,比较字符串S1和s2是否相等,如果相等,返回,否则返回0.
④ strncmpl(sl,s2n):在忽略字符串大小写前提下,比较两个字符串前n个字符是否相等,如果相等,返回,否则返回0。字符串的查找与替换函数
1、findstr(sl,s2):返回短字符串在长字符串中的开始位置。
2、strep(sls2,s3):将字符串s1中的所有子字符串s2替換为字符串s3。