此部分为慕课,中南大学科学计算与MATLAB语言课程所做笔记。
设置当前文件夹窗口:
cd e:\matlab_work
Matlab的搜索路径:
用 path 命令设置 文件 搜索路径 :
path(path,‘e:\matlab_work’)
(2)浮点型
single函数:将其他类型的数据转换为单精度型。
double函数:将其他类型的数据转换为双精度型 。
class(4):返回数据类型。
(3)复数型
复型数据包括实部和虚部两个部分,实部和虚部默认为双精度型,虚数单位用i或j来表示。
real 函数 :求复数的实部。
imag 函数:求复数的虚部。
>> 1+2i
ans =
1.0000 + 2.0000i
>> 1+2j
ans =
1.0000 + 2.0000i
format命令的格式:format 格式符
>> foamat long
>> 50/3
ans =
16.6666666666666668
>> format
>> 50/3
ans =
16.6667
注意:format 命令只影响数据输出格式,而不影响数据的计算和存储 。
求[0,100]所有素数:
>> x = 0:100;
>> k = isprime(x);
>> k1 = find(k);
>> p = x(k1)
在MATLAB中,变量名是以字母开头,后接字母、数字或下画线的字符序列,最多 63个字符。
预定义变量是在MATLAB工作空间中驻留,由系统本身定义的变量 。
(1)who和whos
who:返回变量名
whos:返回变量名及其信息
(2)内存变量文件
用于保存MATLAB工作区变量的文件叫做内存变量文件,其扩展名为.mat,也叫 MAT 文件 。
>> save mydata k k1;
>> load mydata
(1) 利用直接输入法建立矩阵: : 将矩阵的元素用中括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用 逗号或空格分隔,不同行的元素之间用分号分隔。
(2)利用已建好的矩阵建立更大的矩阵,一个大矩阵可以由已经建立好的小矩阵拼接而成。
>> 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]
(3)用实部矩阵和虚部矩阵构成复数矩阵
>> A = [1,2,3;4,5,6;7,8,9];
>> B = [-1,-2,-3;-4,-5,-6;-7,-8,-9];
>> C = A + B*i
(1)格式:初始值:步长:中止值
(2)linspace(a,b,n):[a,b]之间产生n个数。
注意:当n省略时,自动产生100个元素
(1) 结构矩阵
由结构数据构成的矩阵就是结构矩阵,结构矩阵里的每个元素就是结构数据类型。
格式为:
结构矩阵元素.成员名=表达式
>>a(1).x1=10;
>>a(1).x2='sang';
>>a(1).x3=[1,2;3,4];
(2)单元矩阵
建立单元矩阵和一般矩阵相似,直接输入就可以了,只是单元矩阵元素用大括号括起来。
a = {10,'sang', [1,2,;3,4];11, 'tian', [9,9;7,8]};
(1)通过下标来引用 矩阵的元素
A(3,2)表示A矩阵第3行第2列的元素
>> A(3,2) = 10
注意:如果给出的行下标或列下标大于原来矩阵的行数和列数,那么 MATLAB 将自动扩展原来的矩阵,并将扩展后没有赋值的矩阵元素置为0。
>> 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 中,矩阵元素按列存储,即首先存储矩阵的第一列元素,然后存储第二列元素,一直到矩阵的最后一列元素。
矩阵元素的序号就是矩阵元素在内存中的排列顺序。
>> A = [1,2,3;4,5,6];
>> A(3)
ans =
2
序号与下标是一一对应的,以m*n矩阵A为例,矩阵元素 A(i,j)的序号为 (j-1) *m+i。
sub2ind函数举例:
>> clear
>> A = [1:3;4:6];
>> 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
ind2sub函数举例:
>> [I,J] = ind2sub([3,3],[1,3,5])
I =
1 3 2
J =
1 1 2
子矩阵是指由矩阵中的一部分元素构成的矩阵
end 运算符:表示某一维的末尾元素下标。
空矩阵是指没有任何元素的矩阵。
>> clear
>> 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 m ×n n 的二维矩阵。
注意: reshape 函数只是改变原矩阵的行数和列数,但并不改变原矩阵元素个数及其存储顺序。
>> clear
>> A = [1,2,3,4,5,6,7,8,9];
>>> B = reshape(A,3,3)
B =
1 4 7
2 5 8
3 6 9
(1)基本算术运算
基本算术运算符:+(加) 、-(减) 、*(乘) 、 /( 右除) ) 、(左除) 、^(乘方) 。
注意:MATLAB的运算是在矩阵意义下进行的,单个数据的算术运算只是矩阵运算的一种特例。
加减运算
乘法运算
除法运算
在MATLAB中,有两种矩阵除法运算:右除/和左除\ 。如果A矩阵是非奇异方阵,则B/A等效于B*inv (A) ,A\B等效于inv(A)*B 。
>> clear
>> 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
乘方运算
一个矩阵的乘方运算可以表示成A^x,要求A为方阵,x为标量。
>> clear
>> A=[1,2,3;4,5,6;7,8,0];
>> A^2
ans =
30 36 15
66 81 42
39 54 69
(2)点运算
>> clear
>> 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.4、0.7、1时,分别求y=sin(x) * cos(x)的值。
>> clear
>> x = 0.1:0.3:1;
>> y = sin(x).*cos(x)
y =
0.0993 0.3587 0.4927 0.4546```
### 关系运算
- 关系运算符: <( 小于)、<=(小于或等于) 、>(大于) 、>=(大于或等于) 、==(等于) 、~=(不等于) 。
- 当两个比较量是标量时,直接比较两数的大小。若关系成立,关系表达式结果为1,否则为0 。
- 当参与比较的量是两个同型的矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,最终的关系运算的结果是一个与原矩阵同型的矩阵 ,它的元素由0或1组成。
- 当参与比较的一个是标量,而另一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,最终的关系运算的结果是一个与原矩阵同型的矩阵,它的元素由0或1组成。
例:建立3阶方阵A,判断A的元素是否为偶数。
```markup
>> clear
>> A = [24,35,13;22,63,23;39,47,80];
>> A
A =
24 35 13
22 63 23
39 47 80
>> P = rem(A,2)
P =
0 1 1
0 1 1
1 1 0
逻辑运算符: &(与) 、 |(或) 和~(非)
设参与逻辑运算的是两个标量a和b,那么运算规则为:
例如:水仙花数是指各位数字的立方之和等于该数本身的三位正整数,求全部水仙花数。
>> clear
>> x = 100:999;
>> x1 = rem(x,10);
>> x2 = rem(fix(x/10),10);
>> x3 = fix(x/100);
>> k = find((x1.^3+x2.^3+x3.^3 == x));
>> s = x(k)
(1)在MATLAB中,字符串是用单引号括起来的字符序列:
>> clear
>> name = 'My name is sang';
>> a = name(1:2)
a =
'My'
(2)若字符串中的字符含有单引号,则该单引号字符要用两个单引号来表示:
>> clear
>> name = 'I''m sang!'
name =
'I'm sang!'
(3)建立多行字符串,形成字符串矩阵
>> clear
>> x = ['abcde';'12345'];
>> x
x =
2×5 char 数组
'abcde'
'12345'
>> x(2,5)
ans =
'5'
length():计算长度。
(1)字符串的执行
格式: eval(s) s为字符串
>> clear
>> t = pi;
>> m = '[t,sin(t),cos(t)]';
>> y = eval(m)
y =
3.1416 0.0000 -1.0000
(2)字符串之间的转换
>> clear
>> s1 = 'MATLAB';
>> a = abs(s1)
a =
77 65 84 76 65 66
>> char(s1+32)
ans =
'matlab'
(3)字符串的比较
字符串的比较有两种方法:利用关系运算符或字符串比较函数。
>> clear
>> strcmp('www0','w123')
ans =
logical
0
>> strncmpi('www0','W123',1)
ans =
logical
1
(3)字符串的 查找与替换