MATLAB基础知识笔记——(矩阵的运算)

%clear ;清空工作区

%clc ;清空命令行窗口

% 鼠标右键选中三行再ctrl + R,那么就是都注释掉了

x = 30;

y = 5;

t = x + y

% ctrl + t 将所写的注释都给取消掉

% Matlab中变量名的基本运用

% MATLAB的命名规则如下

% >>变量名必须以字母开头,之后是任意的字母,数字或者下划线

% >>变量名区分字母的大小写,例如a和A代表不同的变量

% >>变量名不超过63个字符,第63个字符以后的字符将被忽略

% >>不能定义与MATLAB关键词同名的变量(例如if或者end),要获取关键字的完整列表,请在命令行输入iskeyword并运行

% >>特殊变量:ans、pi、inf/-inf等

%

% MATLAB使用等号"="给变量赋值

% MATLAB不需要对变量提前进行声明的

% 对于在编辑器的页面当中选择是否加上分号

% 可以将结果是否显示到命令行窗口当中

%加上";"就是不显示的意思,但是运算结果会存储到默认变量当中

%不加";"就是显示的意思

% 字符和字符串

%

% >>字符用''引起来的

% >>字符串用""引起来的

% 基本的运算符的使用

%

% 针对数值,字符或者逻辑值

% >>加法:+

% >>减法:-

% >>乘法:*

% >>除法:/

% >>乘方:^

%

% 矩阵运算和逻辑运算

%

% 本章小结:

% matlab变量名的规范,MATLAB中预定义的特殊变量

% MATLAB常用变量类型,数值,字符和字符串以及矩阵

%<<对两个字符变量做基本运算>>

%字符和字符串

clear ;%清空工作区

clc ;

ch1 = 'a';

ch2 = 'b';

str = "hello matlab";

%基本运算符

x6 = 35;

X6 = 30;

x6 - X6;

ch1 + ch2;%运算的就是a和b对应的ASCII值

%MATLAB就是matrix(矩阵)和lab(实验)的组合

%>>关于矩阵的创建

% >>矩阵元素元素的修改删除

% >>矩阵的拼接重构和重排

% >>矩阵的运算

% >>本章小结

% >>课后小练

% >>矩阵的创建

% 1.在MATLAB当中是,矩阵的创建方法主要有三种,分别是:直接输入法、函数创建法和导入本地文件中的数据。

% ①直接输入法

% ②函数创建法

% ③导入本地文件中的数据

%

% >>直接输入法

% 适用于矩阵当中数量较少的情况

%

% 输入矩阵时要以中括号[]为标识符号,矩阵的所有元素必须都在中括号当中,矩阵的同行元素

% 之间用空格或者逗号分离,行与行之间用分号或者回车键分离;

%矩阵基础

clear;

clc;

%>>直接输入法

a = [1 2 3;4 5 6];

%>>函数创建法

b = zeros(100);%表示的是100*100的随机方阵

a = zeros(100,99);%表示的100*99的随机矩阵

%>>rand(),randn(),randi();

%rand(n),rand(m,n)

e = rand(5);%生成一个5x5的随机数矩阵,矩阵中的数据在0~1之间标准正态分布随机数

c = rand(5,6);%生成一个5x6的随机数矩阵,矩阵中的数据在0~1之间

%randi([imin,imax],x);

d = randi([1,6],20);%表示20行和列的方阵,其中的元素的值为1~6的整数,i表示的就是整数

%randn(n),randn(m,n)

f = randn(5);%表示的是5x5随机数矩阵,数值是随机正态分布的函数,不是0~1之间的

g = randn(5,6);%表示的就是5x6随机数矩阵,数值就是随机正态分布的函数,也不是在0~1之间

%>>导入本地文件中的数据

% MATLAB可读取本地的文件,支持的常见格式

% >>txt、.dat或者.csv(适用于带有分隔符的文本文件)

% >>xls、.xlsb、.xlsm、.xlsx、.xltm、.xltx、.ods(适用于电子表格文件)

%

% 步骤如下:

% 1.在Excel表格当中创建表格

% 2.在MATLAB当中的主页当中点击导入数据

% 3.点击data.excel文件(MATLAB当中的会比Excel中的数据少一行的)

% 4.备注:是可以选择矩阵中数据的导入范围的

% 5.MATLAB一般默认第一行不是数值的,其实在Excel中第一行也不是数值

%%矩阵元素的修改和删除

clear;

clc;

A = [1 2 3 4;2:5;3:6] %生成了一个3行4列的矩阵,第一行是1 2 3 4;第二行是2 3 4 5;第三行是3 4 5 6;

A(1,3) = 10;%这里就是将第一行第3列的数字改成了10

A(1,:) = 10;%将第一行的数都变成了10

A %在命令行当中输出A矩阵

A([1,2],[1,3]) = 6; %将第一行第二列和第一行第3列的数字改为6

A %在命令行当中输出A矩阵

A(3) = 0; %按列进行排列,第三个数字改为0,第六个数字改为0;(线性索引)

A(6) = 0;

A(5,6) = 888 %这里就是将5行列的元素改为888,而且MATLAB将矩阵A给我进行了自动扩展

%原来是三行四列的矩阵改为了五行六列的矩阵,从而对满足用户的要求

% 矩阵元素的删除和修改

%

% 矩阵元素的删除:

%

% >>如果我们将等号的右侧变成空间向量[];则可以删除对应位置的元素。需要注意的是

% 通常只能通过删除矩阵的整行或者整列,否则会进行报错

%

% >>也可以通过线性引索来删除的元素。使用线性索引删除后,MATLAB会将矩阵中剩下的元素按照线性索引的顺序

% 放入到一个向量当中,另外,使用线性索引可以删除矩阵的一整行或者一整列

A(:,1) = [] %这里就是将第一列的数字进行删除,这种方法只能将一整行或者一整列的数字进行删除

A(1,:) = [] %将第一行的数字进行删除,这种方法只能将一整行或者一整列的数字进行删除

% >>关于矩阵的拼接重构和重排

%

% 矩阵的拼接:

%

% 横向拼接:A和B的行数相同,那么使用[A,B]、[A B]以及cat(2,A,B)都能将A和B横向拼接成一个大的矩阵

%

% 纵向拼接:A和B的列数相同,那么使用[A;B]以及cat(1,A,B)都能将A和B纵向拼接成一个巨大的矩阵

clear;

clc;

A = [1 2 3 4;2:5;3:6];

B = ones(3,2);

C = [A,B] ;%A和B的矩阵的行数相同,所以可以将A和B按照行进行拼接

C2 = [A B];%A和B的矩阵的行数相同,所以可以将A和B按照行数进行拼接

C3 = cat(2,A,B); %2代表的是水平串联,1代表的是垂直串联

B2 = ones(2,4);

D2 = [7:10;11:14;15:18];

C4 = cat(1,A,B2); %A和B2的矩阵列数相同,所以将A和B2的按照列进行拼接

C5 = [A;B2]; %和C4的效果一样的

C6 = [D2;A;B2];%将D2、A、B2三个矩阵进行拼接

C7 = cat(1,D2,A,B2);%C6和C7的效果是一样的

% 矩阵的重排和重构

% >>reshape函数:更改矩阵的形状,reshape(A,m,n)或者reshape(A,[m,n])

%

% >>sort函数:对向量或者进行排序,sort(A,dim),在最后面加一个输入参数'descend',变成

% 从大到小的降序排列

% ~dim = 1时,沿着行的方向(从上到下)对矩阵的每一列升序排列

% ~dim = 2时,沿着列的方向(从左到右)对矩阵的每一行升序排列

%

% sortrows函数:基于矩阵的某一列对矩阵进行排序,同一行的元素不会改变。

% sortows(score,列),在最后面加上一个输入参数'descend',变成从大到小的降序排列

clear;

clc;

A = randi(10,2,6) %生成一个1~10的随机数,矩阵的大小的是一个2行6列

E = reshape(A,[3,4]) %将2x6的A矩阵修改成一个3x4的E矩阵

%这里不能改为3x5的矩阵,因为元素的数量不能够进行更改

%注意:A和E的关系就是将A矩阵中的数一列一列取出再放入E矩阵当中

% 如果不知道是几行或者几列,那么可以在'[]'设置空号,这样的话MATLAB就可以自动的进行排列

%

% 例如

clear;

clc;

A = randi(20,5,6);

B = reshape(A,3,[]) %这里就是我想转三行,至于列是多少MATLAB自己算吧

clear;

clc;

C = randi(20,5,6)

D = sort(C,1) ;% 1代表的就是按照行对每一列进行升序排列

E = sort(C,2) ;% 2代表的就是按照列队每一行进行升序排列

G = sort(C,1,'descend');% 后面加了一个descend就是对其进行降序排列

H = sort(C,2,'descend');% 后面加了一个descend就是对其进行降序排列

% 矩阵的运算

%

% 矩阵基础

% 调用函数

% 善用帮助文档

% sum 求和函数

% prod 求乘机函数(product)

% cumsum 计算累积和(cumlative sum)

% diff 计算差分(difference)

% mean 计算平均值

% median 计算中位数

% mode 计算众数

% var 计算方差

% std 计算标准差

% min 求最小值

% max 求最大值

clear;

clc;

A = randi(10,3,4);

A

sum(A,1); %这里就是将每一列进行加和 形成一个列向量

sum(A,2); %这里就是将每一行进行加和 形成一个行向量

sum(sum(A)); %将矩阵当中的所有元素进行加和,得到一个数字

%上一行的写法不是很美观,那么改进一下代码

sum(A(:)); %将矩阵当中的所有元素进行加和,得到一个数字,这里的冒号就是索引的意思

%冒号索引得到一个向量

sum(A,"all"); %将矩阵当中的所有元素进行加和,得到一个数字

prod(A(:)); %冒号进行索引,得到一个向量,再进行相乘

prod(A,"all"); %将矩阵中的所有元素进行相乘,得到其乘积

prod(prod(A)); %将矩阵中的所有元素进行相乘,得到其乘积

% 矩阵的加减运算

% >>在线性代数当中,只有两个大小完全相同的矩阵才能进行加减运算

% >>但是在MATLAB当中,只要两个矩阵的大小兼容就可以进行加减运算

% (五种算术运算的兼容模式、按对应位置进行加减乘除运算,知道五种矩阵加减的模式情况)

%

%

%

% 矩阵的乘除和乘方

% >> *和.*分别表示线代中的矩阵相乘和两个矩阵中对应的元素相乘

% >> /(右除)、\(左除)、和./

% >> ^和.^

%

% 矩阵的转置 '

%%算术运算

clear;

clc;

A = randi(10,3,4);

B = randi(10,4,4);

C = A*B %将A和B矩阵进行线性代数上的矩阵相乘

%D = A.*B % .*将两个矩阵上对应位置的梳子进行相乘,前提是这两个矩阵要满足MATLAB的五项兼容原则

%将A 和 B 两个矩阵进行修改,就可以进行对应位置上的点乘

clear;

clc;

D = randi(10,3,4);

E = randi(10,1,4);

G = D.*E %这里就是矩阵D和矩阵E进行点乘

%在线性代数里面,是不支持矩阵的除法运算,但是在MATLAB里面是支持矩阵的除法的

%关于在MATLAB中的点除:就只要满足5中兼容方式就可以了

F = D./E

%关于矩阵的乘方:就是只是用于方阵

clear;

clc;

A = randi(10,4,4)

B = randi(10,4,4)

E = A * A * A

C = A ^ 3 %对矩阵A进行3的乘方。就是将A进行连乘三次,C和E就是两个相同的矩阵

F = A .^ 3 %这里就是矩阵A中的每个元素进行三次乘方

%%关于矩阵的转置,对于一般的矩阵来说都是实数矩阵,所以 ' 和 .' 是同样的效果

clear;

clc;

A = randi(10,4,4)

B = randi(10,4,5)

C = A' %将A进行矩阵的转置

D = B' %将B进行矩阵的转置

%对于矩阵当中含有复数是矩阵的算法

A2 = [1 2 3+i;2 4 5+i]

A2' %当使用了'的时候MATLAB默认将复数变为共轭复数,因为A2中的1,2 ,2, 4 ,5 不是复数

%所以就默认他们不是复数,尽管显示出来了他们就是复数,但是我们不用管

A2.' % .' 这里就不会将矩阵中的复数变为共轭复数

%%关于矩阵的关系运算

% 关系运算

%

% == 等于

% ~= 不等于

% > 大于

% >= 大于等于

% < 小于

% <= 小于等于

%

% 关系运算符可以用来比较两个数组中的元素的关系,如果比较的结果为真,则MATLAB会返回逻辑值1;

% 如果结果为假,则返回逻辑值为0;

clear;

clc;

A = [1:4]; %生成矩阵A,A中的元素就是一行四列,其中的元素就是1到4的元素

B = ones(3,4); %生成了一个三行四列的单位矩阵

A

B

A == B %这里就是将A矩阵自动生成三行,然后矩阵A和矩阵B在进行比较,然后在再将逐个进行比较

%%关于矩阵的相关知识的补充

% j : k , 相当于向量[j,j+1.j+2,...,k]

%

% j : i : k , 相当于向量

%

% A(:,j) , 矩阵A的第j列

% A(i, : ), 矩阵A的第i行

% A(:,j:k), 表示的是A(:,j) 、A(:,j+1)、A(:,j+2)、....、A(:,K)

% A(:,:) 二维数组,相当于矩阵A

% A(:) 将A看成是一个列向量,表示A的所有元素

% 这里的i,j,k,必须为标量

%

% 在MATLAB当中,还可以使用linspace函数产生行向量,其调用格式为

% linspace(a,b,c)

% 其中a和b表示的向量的第一个元素和最后一个元素,n是元素的总数,当n省略时,自动产生100

% 个元素。显然,linspace(a,b,c) 与 a:(b-a)/(n-1):b 等价

clear;

clc;

a = linspace(1,10,10)

%此外,还可以在对数空降当中建立向量,采用函数logspace,其调用格式为:

%a = logspace(n1,n2,n3);

% 关于矩阵的建立:对于比较大且复杂的矩阵,可以为它专门建立一个M文件。

% 建立大的矩阵可由小矩阵或者向量建立起来

A = [1 2 3 4;4 5 6 7;7 8 9 10];

B = [A;eye(size(A));ones(size(A));A]

C = [A,eye(size(A));ones(size(A)),A]

%B和C表示的矩阵两种不同的拼接方式

%%关于矩阵的拆分

%采用矩阵元素的序号来引用矩阵元素,矩阵元素的序号就是相应元素在内存中的排列顺序。在MATLAB当中

%矩阵的元素按照列进行存储,先是第一列,在第二列,以此类推

A = [1 2 3;4 5 6;7 8 9]

A(3) = 100;

A

%利用冒号表达式获得子矩阵

% ①A(:,j)表示矩阵A的第j列的全部元素;A(i,:)表示矩阵A的第i行的全部元素;A(i,j)表示矩阵的第i行第j列的元素

% ②A(i:i+m,:)表示矩阵A的第i行到i+m行的全部元素;A(:,K:K+m)表示的是矩阵A从第K列到K+m列的所有元素

% ③A(i:i+m,j:j+k)表示矩阵A第i行到i+m行的全部元素以及第j列到第j+k列的全部元素

A(:)%将矩阵A的每一列元素堆叠起来,成为一个列向量,,这也是MATLAB的变量的存储方式

E = randi(10,9,9)

F = E([(end-2):1:end],[end-1,end])%这里就是截取矩阵E的最后三行和最后两列的矩阵元素

%%利用空矩阵删除矩阵中的元素

% 在MATLAB当中,定义[]为空矩阵,给变量X赋空矩阵的语句为X = [].注意,X = []和clear X不同,clear是将X从

% 工作空间当中删除,而[]则存在于工作空间当中,只是位数是0

% 关于矩阵的点运算,矩阵的点运算也称作数组运算,其运算符就是在算术运算符的前面加点。点运算符有 .* ./

% .\ .^。两个矩阵的点运算就是他们对应元素进行相关的运算,要求两个元素的位数相同。

clear;

clc;

a = [1 2;3 4];

b = [3 5;5 9];

c = a+b,d = a - b, e = a * b,f = a / b,g = a \ b,h = a^3

相关推荐
_dindong13 小时前
Linux网络编程:Socket编程TCP
linux·服务器·网络·笔记·学习·tcp/ip
摇滚侠14 小时前
Spring Boot 3零基础教程,WEB 开发 Thymeleaf 属性优先级 行内写法 变量选择 笔记42
java·spring boot·笔记
摇滚侠14 小时前
Spring Boot 3零基础教程,WEB 开发 Thymeleaf 总结 热部署 常用配置 笔记44
java·spring boot·笔记
rechol14 小时前
汇编与底层编程笔记
汇编·arm开发·笔记
wearegogog12314 小时前
负荷聚类及其在MATLAB中的实现
matlab·php·聚类
lzj_pxxw15 小时前
嵌入式开发技巧:舍弃标志位,用宏定义函数实现程序单次运行
笔记·stm32·单片机·嵌入式硬件·学习
润 下16 小时前
C语言——回调函数的典型示例(分析详解)
c语言·开发语言·人工智能·经验分享·笔记·程序人生
朝新_16 小时前
【EE初阶 - 网络原理】传输层协议
java·开发语言·网络·笔记·javaee
张晓~1833994812116 小时前
碰一碰发抖音源码技术搭建部署方案
线性代数·算法·microsoft·矩阵·html5
koo36416 小时前
李宏毅机器学习笔记27
人工智能·笔记·机器学习