%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