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

相关推荐
孤亭远见2 小时前
COMSOL with Matlab
matlab
图南楠4 小时前
simulink离散传递函数得到差分方程并用C语言实现
matlab
冷眼看人间恩怨5 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
信号处理学渣5 小时前
matlab画图,选择性显示legend标签
开发语言·matlab
云云3216 小时前
搭建云手机平台的技术要求?
服务器·线性代数·安全·智能手机·矩阵
云云3216 小时前
云手机有哪些用途?云手机选择推荐
服务器·线性代数·安全·智能手机·矩阵
ThreeYear_s7 小时前
基于FPGA 的4位密码锁 矩阵键盘 数码管显示 报警仿真
fpga开发·矩阵·计算机外设
十年一梦实验室7 小时前
【C++】sophus : sim_details.hpp 实现了矩阵函数 W、其导数,以及其逆 (十七)
开发语言·c++·线性代数·矩阵
15年网络推广青哥7 小时前
国际抖音TikTok矩阵运营的关键要素有哪些?
大数据·人工智能·矩阵
阿正的梦工坊7 小时前
范德蒙矩阵(Vandermonde 矩阵)简介:意义、用途及编程应用
线性代数·矩阵