目录
7.4 两个形状相同的矩阵对应元素之间的乘除法(.* ./)
非原创,听清风数学建模做的笔记,曾学过C语言、Python,但在matlab上是小白一枚~
一、matlab基本小常识(使用英文标点符号)
1.1 分号
% 在每一行的语句后面加上分号表示不显示运行结果
a = 3;
>> a = 3;
>>
a = 5
>> a = 5
a =
5
1.2 注释
% (1)多行注释:选中要注释的若干语句,快捷键Ctrl+R
% a = 3;
% a = 5
% (2)取消注释:选中要取消注释的语句,快捷键Ctrl+T
1.3 清除
% clear可以清楚工作区的所有变量
clear
% clc可以清除命令行窗口中的所有文本,让屏幕变得干净
clc
% 这两条一起使用,起到“初始化”的作用
clear;clc
二、输出和输入函数
2.1 disp函数
% matlab中disp()就是屏幕输出函数,类似于c语言中的printf()函数
>> disp('我是清风,大家好鸭~~~记得投币关注我哦')
我是清风,大家好鸭~~~记得投币关注我哦
a = [1,2,3] %同一行中间用逗号分隔,也可以不用逗号,直接用空格
a = [1 2 3]
>> a = [1,2,3]
a =
1 2 3
>> a = [1 2 3]
a =
1 2 3
disp(a)
% 注意,disp函数比较特殊,这里可要分号,可不要分号哦。在每一行的语句后面加上分号,表示不显示结果,但是disp()函数比较特殊,加不加分号,都显示运算结果。因为disp()功能就是在屏幕中打出字符串。
disp(a);
>> disp(a)
1 2 3
>> disp(a);
1 2 3
2.2 字符串合并
% matlab中两个字符串的合并有两种方法
% (1)strcat(str1,str2……,strn)
strcat('字符串1','字符串2')
>> strcat('字符串1','字符串2')
ans =
字符串1字符串2
% (2)[str 1,str 2,……, str n]或[str1 str2 …… strn]
['字符串1' '字符串2']
['字符串1','字符串2']
>> ['字符串1' '字符串2']
['字符串1','字符串2']
ans =
字符串1字符串2
ans =
字符串1字符串2
2.3 将数字转化为字符串
% 一个有用的字符串函数:num2str 将数字转换为字符串
c = 100
num2str(c)
disp(['c的取值为' num2str(c)])
disp(strcat('c的取值为', num2str(c)))
>> c = 100
c =
100
>> num2str(c)
ans =
100
>> disp(['c的取值为' num2str(c)])
c的取值为100
>> disp(strcat('c的取值为', num2str(c)))
c的取值为100
disp(['c的取值为' c]) %这里c并不是字符串,而是数字,num2str(c)才是字符串
disp(c) %输出的是c这个数字
>> disp(['c的取值为' c])
c的取值为d
>> disp(c)
100
2.4 input函数
% 一般我们会将输入的数、向量、矩阵、字符串等赋给一个变量,这里我们赋给A
A = input('请输入A:');
B = input('请输入B:')
% 注意观察工作区,并体会input后面加分号和不加分号的区别。输入A之后,屏幕没有反应,因为我们在语句后加了分号,加了分号就不显示运算的结果;但是如果观察工作区就会发现,有新生成变量A。
>> A = input('请输入A:');
请输入A:1000
>>
>> B = input('请输入B:')
请输入B:2000
B =
2000
三、SUM函数
3.1 向量求和
% 如果是向量(无论是行向量还是列向量),都是直接求和
E = [1,2,3]
sum(E)
E = [1;2;3]
sum(E)
>> E = [1,2,3]
sum(E)
E =
1 2 3
ans =
6
>> E = [1;2;3]
sum(E)
E =
1
2
3
ans =
6
3.2 矩阵求和
% 如果是矩阵,则需要根据行和列的方向作区分
E = [1,2;3,4;5,6]
% a=sum(x); %按列求和(得到一个行向量)
a = sum(E)
a = sum(E,1)
>> E = [1,2;3,4;5,6]
E =
1 2
3 4
5 6
>> a = sum(E)
a =
9 12
>> a = sum(E,1)
a =
9 12
% a=sum(x,2); %按行求和(得到一个列向量)
a = sum(E,2)
>> E = [1,2;3,4;5,6]
E =
1 2
3 4
5 6
>> a = sum(E,2)
a =
3
7
11
% a=sum(x(:));%对整个矩阵求和
a = sum(sum(E))
a = sum(E(:))
>> E = [1,2;3,4;5,6]
E =
1 2
3 4
5 6
>> a = sum(sum(E))
a =
21
>> a = sum(E(:))
a =
21
% E(:) 表示把矩阵转变为一个列向量
>> E = [1,2;3,4;5,6]
E =
1 2
3 4
5 6
>> E(:)
ans =
1
3
5
2
4
6
四、matlab提取矩阵中指定的元素
4.1 取指定行和列的元素
A=[1 1 4 1/3 3;1 1 4 1/3 3;1/4 1/4 1 1/3 1/2;3 3 3 1 3;1/3 1/3 2 1/3 1];
A
A(2,1)
A(3,2)
>> A=[1 1 4 1/3 3;1 1 4 1/3 3;1/4 1/4 1 1/3 1/2;3 3 3 1 3;1/3 1/3 2 1/3 1];
A
A =
1.0000 1.0000 4.0000 0.3333 3.0000
1.0000 1.0000 4.0000 0.3333 3.0000
0.2500 0.2500 1.0000 0.3333 0.5000
3.0000 3.0000 3.0000 1.0000 3.0000
0.3333 0.3333 2.0000 0.3333 1.0000
>> A(2,1)
ans =
1
>> A(3,2)
ans =
0.2500
4.2 取指定某一行的全部元素
% 取指定的某一行的全部元素(输出的是一个列向量)
A=[1 1 4 1/3 3;1 1 4 1/3 3;1/4 1/4 1 1/3 1/2;3 3 3 1 3;1/3 1/3 2 1/3 1];A
A(2,:)
A(5,:)
>> A=[1 1 4 1/3 3;1 1 4 1/3 3;1/4 1/4 1 1/3 1/2;3 3 3 1 3;1/3 1/3 2 1/3 1];
A
A =
1.0000 1.0000 4.0000 0.3333 3.0000
1.0000 1.0000 4.0000 0.3333 3.0000
0.2500 0.2500 1.0000 0.3333 0.5000
3.0000 3.0000 3.0000 1.0000 3.0000
0.3333 0.3333 2.0000 0.3333 1.0000
>> A(2,:)
ans =
1.0000 1.0000 4.0000 0.3333 3.0000
>> A(5,:)
ans =
0.3333 0.3333 2.0000 0.3333 1.0000
4.3 取指定的某一列的全部元素
% 取指定的某一列的全部元素(输出的是一个列向量)
A=[1 1 4 1/3 3;1 1 4 1/3 3;1/4 1/4 1 1/3 1/2;3 3 3 1 3;1/3 1/3 2 1/3 1];A
A(:,1)
A(:,3)
>> A=[1 1 4 1/3 3;1 1 4 1/3 3;1/4 1/4 1 1/3 1/2;3 3 3 1 3;1/3 1/3 2 1/3 1];
A
A =
1.0000 1.0000 4.0000 0.3333 3.0000
1.0000 1.0000 4.0000 0.3333 3.0000
0.2500 0.2500 1.0000 0.3333 0.5000
3.0000 3.0000 3.0000 1.0000 3.0000
0.3333 0.3333 2.0000 0.3333 1.0000
>> A(:,1)
ans =
1.0000
1.0000
0.2500
3.0000
0.3333
>> A(:,3)
ans =
4
4
1
3
2
4.4 取指定的某些行的全部元素
% 取指定的某些行的全部元素(输出的是一个矩阵)
A=[1 1 4 1/3 3;1 1 4 1/3 3;1/4 1/4 1 1/3 1/2;3 3 3 1 3;1/3 1/3 2 1/3 1];A
A([2,5],:) % 只取第二行和第五行(一共2行)
A(2:5,:) % 取第二行到第五行(一共4行)
A(2:2:5,:) % 取第二行和第四行 (从2开始,每次递增2个单位,到5结束)
>> A=[1 1 4 1/3 3;1 1 4 1/3 3;1/4 1/4 1 1/3 1/2;3 3 3 1 3;1/3 1/3 2 1/3 1];
A
A =
1.0000 1.0000 4.0000 0.3333 3.0000
1.0000 1.0000 4.0000 0.3333 3.0000
0.2500 0.2500 1.0000 0.3333 0.5000
3.0000 3.0000 3.0000 1.0000 3.0000
0.3333 0.3333 2.0000 0.3333 1.0000
>> A([2,5],:)
ans =
1.0000 1.0000 4.0000 0.3333 3.0000
0.3333 0.3333 2.0000 0.3333 1.0000
>> A(2:5,:)
ans =
1.0000 1.0000 4.0000 0.3333 3.0000
0.2500 0.2500 1.0000 0.3333 0.5000
3.0000 3.0000 3.0000 1.0000 3.0000
0.3333 0.3333 2.0000 0.3333 1.0000
>> A(2:2:5,:) % 取第二行和第四行 (从2开始,每次递增2个单位,到5结束)
ans =
1.0000 1.0000 4.0000 0.3333 3.0000
3.0000 3.0000 3.0000 1.0000 3.0000
1:3:10
10:-1:1
>> 1:3:10
ans =
1 4 7 10
>> 10:-1:1
ans =
10 9 8 7 6 5 4 3 2 1
A(2:end,:) % 取第二行到最后一行
A(2:end-1,:) % 取第二行到倒数第二行
>> A=[1 1 4 1/3 3;1 1 4 1/3 3;1/4 1/4 1 1/3 1/2;3 3 3 1 3;1/3 1/3 2 1/3 1];
A
A =
1.0000 1.0000 4.0000 0.3333 3.0000
1.0000 1.0000 4.0000 0.3333 3.0000
0.2500 0.2500 1.0000 0.3333 0.5000
3.0000 3.0000 3.0000 1.0000 3.0000
0.3333 0.3333 2.0000 0.3333 1.0000
>> A(2:end,:)
ans =
1.0000 1.0000 4.0000 0.3333 3.0000
0.2500 0.2500 1.0000 0.3333 0.5000
3.0000 3.0000 3.0000 1.0000 3.0000
0.3333 0.3333 2.0000 0.3333 1.0000
>> A(2:end-1,:)
ans =
1.0000 1.0000 4.0000 0.3333 3.0000
0.2500 0.2500 1.0000 0.3333 0.5000
3.0000 3.0000 3.0000 1.0000 3.0000
4.5 取全部元素
% 取全部元素(按列拼接的,最终输出的是一个列向量)
A=[1 1 4 1/3 3;1 1 4 1/3 3;1/4 1/4 1 1/3 1/2;3 3 3 1 3;1/3 1/3 2 1/3 1];A
A(:)
>> A=[1 1 4 1/3 3;1 1 4 1/3 3;1/4 1/4 1 1/3 1/2;3 3 3 1 3;1/3 1/3 2 1/3 1];
A
A =
1.0000 1.0000 4.0000 0.3333 3.0000
1.0000 1.0000 4.0000 0.3333 3.0000
0.2500 0.2500 1.0000 0.3333 0.5000
3.0000 3.0000 3.0000 1.0000 3.0000
0.3333 0.3333 2.0000 0.3333 1.0000
>> A(:)
ans =
1.0000
1.0000
0.2500
3.0000
0.3333
1.0000
1.0000
0.2500
3.0000
0.3333
4.0000
4.0000
1.0000
3.0000
2.0000
0.3333
0.3333
0.3333
1.0000
0.3333
3.0000
3.0000
0.5000
3.0000
1.0000
五、size函数
% size(A)函数是用来求矩阵A的大小的,它返回一个行向量,第一个元素是矩阵的行数,第二个元素是矩阵的列数
A = [1,2,3;4,5,6]
B = [1,2,3,4,5,6]
size(A)
size(B)
>> A = [1,2,3;4,5,6]
A =
1 2 3
4 5 6
>> size(A)
ans =
2 3
>> B = [1,2,3,4,5,6]
B =
1 2 3 4 5 6
>> size(B)
ans =
1 6
% 将矩阵A的行数返回到第一个变量r,将矩阵的列数返回到第二个变量c
[r,c] = size(A)
>> A = [1,2,3;4,5,6]
A =
1 2 3
4 5 6
>> [r,c] = size(A)
r =
2
c =
3
r = size(A,1) %返回行数
c = size(A,2) %返回列数
>> A = [1,2,3;4,5,6]
A =
1 2 3
4 5 6
>> r = size(A,1)
r =
2
>> c = size(A,2)
c =
3
六、repmat函数
% B = repmat(A,m,n):将矩阵A复制m×n块,即把A作为B的元素,B由m×n个A平铺而成。
A = [1,2,3;4,5,6]
B = repmat(A,2,1)
B = repmat(A,3,2)
>> A = [1,2,3;4,5,6]
A =
1 2 3
4 5 6
>> B = repmat(A,2,1)
B =
1 2 3
4 5 6
1 2 3
4 5 6
>> B = repmat(A,3,2)
B =
1 2 3 1 2 3
4 5 6 4 5 6
1 2 3 1 2 3
4 5 6 4 5 6
1 2 3 1 2 3
4 5 6 4 5 6
七、matlab中矩阵的运算
7.1 矩阵间的乘法(* )
% MATLAB在矩阵的运算中,“*”号和“/”号代表矩阵之间的乘法与除法(A/B = A*inv(B))
A = [1,2;3,4]
B = [1,0;1,1]
A * B
>> A = [1,2;3,4]
A =
1 2
3 4
>> B = [1,0;1,1]
B =
1 0
1 1
>> A * B
ans =
3 2
7 4
7.2 求逆矩阵( inv() )
inv(B) % 求B的逆矩阵
>> B = [1,0;1,1]
B =
1 0
1 1
>> inv(B)
ans =
1 0
-1 1
7.3 矩阵间的除法(/ inv() )
% MATLAB在矩阵的运算中,“*”号和“/”号代表矩阵之间的乘法与除法(A/B = A*inv(B))
B * inv(B)
A * inv(B)
A / B
>> B = [1,0;1,1]
B =
1 0
1 1
>> inv(B)
ans =
1 0
-1 1
>> B * inv(B)
ans =
1 0
0 1
>> A = [1,2;3,4]
A =
1 2
3 4
>> B = [1,0;1,1]
B =
1 0
1 1
>> inv(B)
ans =
1 0
-1 1
>> A * inv(B)
ans =
-1 2
-1 4
>> A / B
ans =
-1 2
-1 4
7.4 两个形状相同的矩阵对应元素之间的乘除法(.* ./)
% 两个形状相同的矩阵对应元素之间的乘除法需要使用“.*”和“./”
A = [1,2;3,4]
B = [1,0;1,1]
A .* B
A ./ B
>> A = [1,2;3,4]
A =
1 2
3 4
>> B = [1,0;1,1]
B =
1 0
1 1
>> A .* B
ans =
1 0
3 4
>> A ./ B
ans =
1 Inf
3 4
7.5 矩阵中每个元素和常数相乘相除(* .* / ./)
% 每个元素同时和常数相乘或相除操作都可以使用
A = [1,2;3,4]
A * 2
A .* 2
A / 2
A ./ 2
>> A = [1,2;3,4]
A =
1 2
3 4
>> A * 2
ans =
2 4
6 8
>> A .* 2
ans =
2 4
6 8
>> A / 2
ans =
0.5000 1.0000
1.5000 2.0000
>> A ./ 2
ans =
0.5000 1.0000
1.5000 2.0000
7.6 矩阵内每个元素同时乘方(.^)
% 每个元素同时乘方时只能用 .^
A = [1,2;3,4]
A .^ 2
>> A = [1,2;3,4]
A =
1 2
3 4
>> A .^ 2
ans =
1 4
9 16
A ^ 2
A * A
>> A = [1,2;3,4]
A =
1 2
3 4
>> A .^ 2
ans =
1 4
9 16
>> A ^ 2
ans =
7 10
15 22
>> A * A
ans =
7 10
15 22
八、matlab中求矩阵的特征值和特征向量
8.1 求矩阵的特征值
% 在Matlab中,计算矩阵A的特征值和特征向量的函数是eig(A)
A = [1 2 3 ;2 2 1;2 0 3]
% E=eig(A):求矩阵A的全部特征值,构成向量E。
E=eig(A)
>> A = [1 2 3 ;2 2 1;2 0 3]
A =
1 2 3
2 2 1
2 0 3
>> E=eig(A)
E =
-1.3166
5.3166
2.0000
8.2 求矩阵的特征向量
A = [1 2 3 ;2 2 1;2 0 3]
E=eig(A)
% [V,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。(V的每一列都是D中与之相同列的特征值的特征向量)
[V,D]=eig(A)
>> A = [1 2 3 ;2 2 1;2 0 3]
A =
1 2 3
2 2 1
2 0 3
>> E=eig(A)
E =
-1.3166
5.3166
2.0000
>> [V,D]=eig(A)
V =
0.8364 -0.6336 -0.2408
-0.3875 -0.5470 -0.8427
-0.3875 -0.5470 0.4815
D =
-1.3166 0 0
0 5.3166 0
0 0 2.0000
九、find函数的基本用法
9.1 返回向量中不为0的元素的位置索引
% find函数,它可以用来返回向量或者矩阵中不为0的元素的位置索引。
clc;X = [1 0 4 -3 0 0 0 8 6]
ind = find(X)
>> X = [1 0 4 -3 0 0 0 8 6]
X =
1 0 4 -3 0 0 0 8 6
>> ind = find(X)
ind =
1 3 4 8 9
% 其有多种用法,比如返回前2个不为0的元素的位置:
ind = find(X,2)
X =
1 0 4 -3 0 0 0 8 6
>> ind = find(X,2)
ind =
1 3
9.2 返回矩阵中不为0的元素的位置索引
%上面针对的是向量(一维),若X是一个矩阵(二维,有行和列),索引该如何返回呢?
X = [1 -3 0;0 0 8;4 0 6]
ind = find(X)
>> X = [1 -3 0;0 0 8;4 0 6]
X =
1 -3 0
0 0 8
4 0 6
>> ind = find(X)
ind =
1
3
4
8
9
% 这是因为在Matlab在存储矩阵时,是一列一列存储的,我们可以做一下验证:
X(4)
>> X = [1 -3 0;0 0 8;4 0 6]
X =
1 -3 0
0 0 8
4 0 6
>> X(4)
ans =
-3
% 假如你需要按照行列的信息输出该怎么办呢?
[r,c] = find(X)
[r,c] = find(X,1) %只找第一个非0元素
>> X = [1 -3 0;0 0 8;4 0 6]
X =
1 -3 0
0 0 8
4 0 6
>> [r,c] = find(X)
r =
1
3
1
2
3
c =
1
1
2
3
3
>> X = [1 -3 0;0 0 8;4 0 6]
X =
1 -3 0
0 0 8
4 0 6
>> [r,c] = find(X,1) %只找第一个非0元素
r =
1
c =
1
十、矩阵与常数的大小判断运算
% 共有三种运算符:大于> ;小于< ;等于 == (一个等号表示赋值;两个等号表示判断)
clc
X = [1 -3 0;0 0 8;4 0 6]
X > 0
X == 4
>> X = [1 -3 0;0 0 8;4 0 6]
X =
1 -3 0
0 0 8
4 0 6
>> X > 0
ans =
1 0 0
0 0 1
1 0 1
>> X == 4
ans =
0 0 0
0 0 0
1 0 0
十一、判断语句
% Matlab的判断语句,if所在的行不需要冒号,语句的最后一定要以end结尾 ;中间的语句要注意缩进。
a = input('请输入考试分数:')
if a >= 85
disp('成绩优秀')
elseif a >= 60
disp('成绩合格')
else
disp('成绩挂科')
end
>> a = input('请输入考试分数:')
if a >= 85
disp('成绩优秀')
elseif a >= 60
disp('成绩合格')
else
disp('成绩挂科')
end
请输入考试分数:77
a =
77
成绩合格