【MATLAB学习笔记】Part 3.MATLAB的数值运算

矩阵

先温习一下线性代数中有关于矩阵的知识:
·矩阵式线性代数的基本运算单元
·矩阵含有M行N列数值
·矩阵中的元素可以是实数或复数
·矩阵相关的基本运算:加、减、内积、逆矩阵、转置、线性方程组、特征值、特征向量、矩阵分解

1.矩阵的分类

在MATLAB语言中,矩阵主要分为:
数值矩阵(实数和复数)、符号矩阵、特殊矩阵

2.矩阵的构造

实数数值矩阵的构造

方法一:由命令行窗口直接输入
输入规则
1.同一行中不同元素用逗号或者空格符来分隔
2.空格个数不限
3.不同行用分号分隔或者分行输入
4.所有元素置于一对方括号之内
5.数据元素可以是表达式,由MATLAB自动计算结果

举例:

A = [1, 2, 3, 4; 5, 6, 7, 8; 9, 10, 11, 12; 13, 14, 15, 16]

生成矩阵A如下:

1234
5678
9101112
13141516
方法二:由M文件生成
输入规则
1具体定义矩阵的规则见方法一
2M文件中的变量名称与文件名不能相同,否则会出现变量名与文件名的混乱
方法三:由文本文件生成
输入规则
1建立txt文件,直接使用load调用此文件
2txt文件中不含变量名称,文件名即为矩阵变量名
3每行数值个数必须相等
load matrixAandB.txt

Note:如果从excel中读取数据,使用函数xlsread;如果从dat文件中读取数据,使用函数csvread

复数数值矩阵的构造

    构造方法同实数数值矩阵,元素改为复数即可

A = [1, 2, 3, 4; 5, 6, 7, 8; 1 + 2i, 3 + 4i, 2 - 8i, 9 - 7i]

·符号矩阵的构造
    构造方法同实数数值矩阵,元素改为符号即可

syms x y z;
A = [x, 2, 3, 4; 5, y, 7, 8; 9, 10, 11, z]

·特殊矩阵的构造
    后面再详细介绍

3.矩阵的修改

·部分扩充
调用格式:D = [A; B C]
A为原矩阵,B, C中包含要扩充的元素,D为扩充后的矩阵

举例如下:

D = [A;A]

·部分删除
调用格式:A(:, n) = [], A(m, 😃 = []
A(:, n) = []表示删除矩阵A的第n列
A(m, 😃 = []表示删除矩阵A的第m行

举例如下:

A(:, 2) = []	% 删除矩阵A的第2列
A(3, :) = []	% 删除矩阵A的第3行

·部分修改
调用格式:A(m, n) = a, A(m, 😃 = [a], A(:, n) = [b]
A(:, n) = []表示修改矩阵A的(m, n)元素为a
A(m, 😃 = [a]表示修改矩阵A的第m行元素为a
A(:, n) = [b]表示修改矩阵A的第n列元素为b

举例如下:

A(:, 2) = [1]	% 修改矩阵A的第2列元素全为1
A(3, :) = [2]	% 修改矩阵A的第3行元素全为2

假设矩阵A第2列有三个元素,想改为1 3 7,可以使用:

A(:, 2) = [1;3;7]

·结构改变——左右翻转
函数命令:fliplr
调用格式:fliplr(A)
fliplr(A)表示矩阵A行数不变,其元素左右翻转

·结构改变——上下翻转
函数名伶:flipud
调用格式:flipud(A)
flipud(A)表示矩阵A行数不变,其元素上下翻转

·结构改变——逆时针旋转
函数命令:rot90
调用格式:rot90(A), rot90(A, k)
rot90(A)表示矩阵A元素逆时针翻转90度
rot90(A, k)表示矩阵A元素逆时针翻转k个90度

举例如下:

rot90(A, 2)		% 矩阵A中元素逆时针旋转180度
rot90(A, -2)	% 矩阵A中元素顺时针旋转180度

·结构改变——按指定维数翻转矩阵
函数命令:filpdim
调用格式:flipdim(A, dim)
flipdim(A, 1) = flipud(A)
filpdim(A, 2) = fliplr(A)

·结构改变——平铺矩阵
函数命令:repmat
调用格式:repmat(A, m, n), repmat(A, [m, n])

4.矩阵的变维

· :
调用格式:B(😃 = A(😃

举例如下:

A = [1, 2, 5, 4; 6, 7, 0, 1];
B = ones(4, 2);
B(:) = A(:);

·reshape
调用格式:B = reshape(A, m, n)
注意:使用reshape时,B中元素个数与A中相同

举例如下:

A = [1:8];
B = reshape(A, 2, 4);
B = reshape(A, 4, 2);

5.矩阵的引用

矩阵的引用含义
arrayName(m ,n)引用二维数组第m行第n列的元素
arrayName(m, : )引用二维数组第m行的所有列元素
arrayName(:, n)引用二维数组第n列的所有行元素
arrayName(m1:m2, n)引用二维数组第n列中m1到m2行的元素
arrayName(m, n1:n2)引用二维数组第m行中n1到n2列的元素
arrayName([m1 m2], n)引用二维数组第n列中m1行和m2行的元素
arrayName(m, [n1 n2])引用二维数组第m行中n1列和n2列的元素
arrayName([m1 m2], [n1 n2])引用m1行、m2行,n1列、n2列的四个元素
Note:如果想获得不同行也不同列的散列的若干个数据可依照列序的方法

6.常用特殊矩阵

  • 空矩阵
    函数命令:[]
    调用格式:B = []

  • 单位矩阵
    函数命令:eye

调用格式含义
B = eye(n)生成n*n的单位阵
B = eye(m, n)生成m*n的单位阵
B = eye(size(A))生成与A维度相同的单位阵
  • 全零矩阵
    函数命令:zeros
调用格式含义
B = zeros(n)生成n*n零矩阵
B = zeros(m, n)生成m*n零矩阵
B = zeros(size(A))生成与A维度相同的全零矩阵
  • 全一矩阵
    函数命令:ones
调用格式含义
B = ones(n)生成n*n全一矩阵
B = ones(m, n)生成m*n全一矩阵
B = ones(size(A))生成与A维度相同的全一矩阵
  • 随机矩阵(0~1之间均匀分布)
    函数命令:rand
调用格式含义
B = rand产生一个随机数
B = rand(n)生成n*n随机矩阵
B = rand(m, n)生成m*n随机矩阵
B = rand(size(A))生成与A维度相同的随机矩阵
  • 随机矩阵(零矩阵单位方差正态分布)
    函数命令:randn
调用格式含义
B = randn产生一个随机数
B = randn(n)生成n*n随机矩阵
B = randn(m, n)生成m*n随机矩阵
B = randn(size(A))生成与A维度相同的随机矩阵

Note: 如果要生成均值为mu, 方差为sigma的正态分布的三阶随机矩阵,可以

B = mu + sqrt +(sigma)*randn(3)
  • 魔方矩阵
    函数命令:magic
    调用格式:B = magic(n) 生成n*n魔方矩阵

Tip:魔方矩阵行、列、正反对角线之和均相等,且n != 2

  • 稀疏矩阵
    函数命令:sparse, full
调用格式含义
B = sparse(A)转换A矩阵为稀疏矩阵
B = full(A)转换A矩阵为完全矩阵

7.特殊数组

字符数组

调用格式:s = ‘string’, name = [‘str1’ ‘str2’ ‘str3’]

·字符串转换方式一
函数命令:char
调用格式:S = char(T) 表示将正整数矩阵转换成字符串矩阵S
代码示例:

T = [102 67 132; 50 95 78];
S = char(T);

·字符串转换方式二
函数命令:int2str, num2str
调用格式:int2str(A), num2str(A, k), num2str(A, format)
表示将数或矩阵转换成字符串或字符串矩阵

·字符串转换方式三
函数命令:eval, str2num
调用格式:eval(S), str2num(S)
表示将字符串S转化为数值
代码示例:

a = [1, 2];
w = [1, 3];
x = [1, 2];
S = 'a.*sin(w.*x)';
val = eval(S);

·字符串比较
函数命令:strcmp
调用格式:strcmp(str1, str2)
表示将两个字符串进行比较,相等时返回逻辑值为真

·结构数组
定义:根据属性名组织起来的不同类型数据的集合
引用:通过数组名和属性名来引用
函数命令:struct
调用格式:sn = struct(‘filed1’, {}, ‘filed2’, {}, …)
代码示例:

student = struct('name', {'Liu', 'Wang'}, 'age', {'20', '21'});
student(1)
student(2)
student(2).name

其他的几个相关的命令:fieldnames, size, rmfield, getfield, setfield
结构数组可以进项嵌套,如:

a = struct('name', 'Mike', 'number', '1000', 'score', struct('math', '90', 'english', '89', 'physics', '97'));
a 
a(1).number
a(1).score

·细胞数组
函数命令:cell
通常使用{}创建,数据通过数组下标引用

B = cell(5, 3);
B(1, 1) = {[1, 4, 3; 0, 5, 8; 7, 2, 9]};
B(1, 2) = {'Anne cat'};
B(2, 1) = {3 + 7i};
B(2, 2) = {0:pi/10:pi};
B(3, 1) = [3, 4, 2; 9, 7, 6; 8, 5, 1];
B(3, 2) = 'Anne Smith';
B(4, 1) = 3 + 7i;
B(4, 2) = -pi:pi/10:pi;

通常可以使用celldisp和cellplot两种方法来查看细胞数组的示意图
代码示例:

B(1, 1) = {[1, 4, 3; 0, 5, 8; 7, 2, 9]};
B(1, 2) = {'Anne cat'};
B(2, 1) = {3 + 7i};
B(2, 2) = {0:pi/10:pi};

celldisp(B)
cellplot(B)

引用一般可采用:

D = B{1, 1}(2, 2)

细胞数组同样可以使用reshape命令,如下:

A = cell(3, 4)
size(A)
B = reshape(A, 6, 2)
size(B)

小例子:将一个二维细胞数组F转换为三维数值数据

F{1, 1} = [1, 2; 3, 4];
F{1, 2} = [-1, 0; 0, 1];
F{2, 1} = [7, 8; 4, 1];
F{2, 2} = [4i, 3 + 2i; 1 - 8i, 5];
for k = 1:4
	for i = 1:2
		for j = 1:2
			NUM(i, j, k) = F{k}(i, j);
		end
	end
end
F
NUM

·结构细胞数组
将结构数组放入细胞数组中,可组成结构细胞数组
代码示例:

c_str = cell(1, 2);
c_str{1}.label = '12/2/94;12/5/94';
c_str{1}.test = [47, 52, 55, 48; 17, 22, 35, 11];
c_str{2}.xdata = [-0.003, 0.41, 1.98, 2.12, 17.11];
c_str{2}.ydata = [-3, 5, 18, 0, 9];
c_str{2}.zdata = [0.6 0.8 1 2.2 3.4];
c_str{1}(1).test(2, 2) 

矩阵的运算

1.矩阵的加减运算

运算符:+, -
运算规则:对应元素相加减

2.矩阵的乘法运算

运算符:, .
运算规则:* 矩阵乘法, .* 矩阵对应元素相乘(数组运算)

3.矩阵的除法运算

运算符:, /, ./, .
运算规则:\ 矩阵左除, /矩阵右除, ./矩阵点左除, .\矩阵点右除
进一步解释:x = A\B是方程Ax = B的解,x = A/B是方程xA = B的解
若A为非奇异矩阵,则A\B和B/A可如下获得:
A\B = inv(A)B
A/B = B
inv(A)

4.矩阵的乘方运算

运算符:^, .^
运算规则:^ A^p表示矩阵的乘方, .^ A.^B表示矩阵A的数量乘方
^ 具体要求:A为方阵,p为大于零的整数时,Ap表示A自乘p次;p为小于零的整数时,Ap表示A的逆的|p|次方
.具体要求:A.p表示A中每个元素的p次乘方。维度相同的A、B矩阵求A.^B,表示矩阵A中元素对矩阵B中对应元素求幂。结果矩阵与原矩阵维度相同

5.矩阵的转置

运算符:’

运算规则
若矩阵A的元素为实数、则A’返回A的转置
若矩阵A为复数矩阵,则A’中的元素由A对应元素的共轭复数构成

6.矩阵的逆

运算符:inv
调用格式:B = inv(A)

7.矩阵的特征值

运算符:eig
调用格式:eig(A)

8.求矩阵的特征多项式

运算符:poly
调用格式:ploy(A)

9.求矩阵的秩

运算符:rank
调用格式:rank(A)

10.求矩阵元素的个数

运算符:numel
调用格式:numel(A)

11.方阵的行列式

运算符:det
调用格式:det(A)

12.方阵的迹

运算符:trace
调用格式:trace(A)


矩阵的关系运算和逻辑运算

1.关系运算符

运算符:==, ~=, >, >=, <, <=
主要用来对矩阵与数,矩阵与矩阵进行比较,返回两者关系的,由数0和数1组成的矩阵,0和1分别表示不满足和满足指定关系。

2.逻辑运算符

运算符:&, |, ~, xor
在MATLAB中,所有非零数值均被认为是真,零为假,在判断结果中,判断为真输出1,判断为假输出0

3.逻辑函数

函数名用途
all判断是否所有的元素为非零值
any判断是否存在一个元素为非零值
exist查看变量或者函数是否存在
find找出向量或矩阵中非零元素的位置标识
isempty判断矩阵是否为空矩阵
isequal判断几个对象是否相等
isnumeric判断对象是否为数值型

代码示例:

a = [1, 3, 5];
A = [1, 2, 3; 0, 4, 5];
B1 = all(a);
B2 = all(a);		% 按照列序
B3 = all(a, 2);		% 按照行序

a = [0, 3, 0];
A = [1, 0, 3; 0, 0, 5];
B1 = any(a);
B2 = any(A);
B3 = any(A, 2);

a1 = exist('works');
a2 = exist('filtdes');
a3 = exist('c:\windows');

A = [1.2, 0, 3.5; 0, 0, 5.4];
k = find(A);
[m, n] = find(A);
[m, n, v] = find(A);

A = [0.34, 0.6];
B = [0.34, 0.6];
C = ['who'];
isequal(A, B);
isequal(A, C);

A = [0.34, 0.6];
B = [1 + 2i, 0.6 + 3i];
C = ['who'];
isnumeric(A);
isnumeric(B);
isnumeric(C);

多项式

在MATLAB中,多项式用行向量表示:P = [a_0, a_1, a_2, … , a_n-1, a_n]

多项式的构造

1.直接输入法

A = [1, 3, 5, 7, 9, 0, 0]

2.使用poly方法(根因式展开)

A = [1, -34, -80, 0, 0]
poly(A)

3.使用poly2sym方法

A = [1, -34, -80, 0, 0];
PA = ploy(A);
poly2sym(PA)

多项式的运算

1.多项式的加减运算

运算符:+, -
注意事项:运算符两侧应具有相同的阶次,如果阶次不同,低阶的多项式必须用零填补到高阶多项式的阶次

2.多项式的乘法运算

调用函数:conv(a, b)

3.多项式的除法运算

调用函数:deconv(a, b)
调用格式:[div, rest] = deconv(a, b)
其中,div是商多项式,rest是余数多项式。

a = [5, 4, 3, 2, 1];
b = [3, 0, 1];
[div, rest] = deconv(a, b);

4.多项式的微分运算

调用函数:polyder
调用格式:B = polyder(A)

5.多项式求根

调用函数:roots
调用格式:X = roots(A)

6.多项式求值

调用函数:polyval, polyvalm
调用格式:
对点求值:B = polyval(A, a)
对矩阵求值:B = polyvalm(A, M)

已标记关键词 清除标记
课程简介: 历经半个多月的时间,Debug亲自撸的 “企业员工角色权限管理平台” 终于完成了。正如字面意思,本课程讲解的是一个真正意义上的、企业级的项目实战,主要介绍了企业级应用系统中后端应用权限的管理,其中主要涵盖了六大核心业务模块、十几张数据库表。 其中的核心业务模块主要包括用户模块、部门模块、岗位模块、角色模块、菜单模块和系统日志模块;与此同时,Debug还亲自撸了额外的附属模块,包括字典管理模块、商品分类模块以及考勤管理模块等等,主要是为了更好地巩固相应的技术栈以及企业应用系统业务模块的开发流程! 核心技术栈列表: 值得介绍的是,本课程在技术栈层面涵盖了前端和后端的大部分常用技术,包括Spring Boot、Spring MVC、Mybatis、Mybatis-Plus、Shiro(身份认证与资源授权跟会话等等)、Spring AOP、防止XSS攻击、防止SQL注入攻击、过滤器Filter、验证码Kaptcha、热部署插件Devtools、POI、Vue、LayUI、ElementUI、JQuery、HTML、Bootstrap、Freemarker、一键打包部署运行工具Wagon等等,如下图所示: 课程内容与收益: 总的来说,本课程是一门具有很强实践性质的“项目实战”课程,即“企业应用员工角色权限管理平台”,主要介绍了当前企业级应用系统中员工、部门、岗位、角色、权限、菜单以及其他实体模块的管理;其中,还重点讲解了如何基于Shiro的资源授权实现员工-角色-操作权限、员工-角色-数据权限的管理;在课程的最后,还介绍了如何实现一键打包上传部署运行项目等等。如下图所示为本权限管理平台的数据库设计图: 以下为项目整体的运行效果截图: 值得一提的是,在本课程中,Debug也向各位小伙伴介绍了如何在企业级应用系统业务模块的开发中,前端到后端再到数据库,最后再到服务器的上线部署运行等流程,如下图所示:
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页