利用MATLAB构建特殊通用矩阵

news2024/11/27 20:57:58

在MATLAB编程中,经常需要遇到一些特殊的通用矩阵,本篇主要介绍的是MATLAB中可能会用到特殊矩阵。

1、零矩阵

MATLAB使用zeros函数来创建零矩阵,所谓零矩阵就是矩阵中所有元素皆为0的矩阵。zeros函数的调用方式如下所示:

(1)zeros(n):n为常数,生成一个n×n的矩阵。

例如,生成一个4×4的零矩阵的代码为:

a=zeros(4)

运行结果如下所示:

a =
     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     0     0

当n的值省略的时候,那么生成一个1×1的向量,结果如下所示:

ans =

     0

(2)zeros(m,n):m,n均为常数,生成一个m×n的零矩阵。生成一个m×n的零矩阵也可以写成zeros([m,n])的方式。

例如生成一个3×4的零矩阵的代码如下:

a=zeros(3,4)

运行结果如下所示:

a =
     0     0     0     0
     0     0     0     0
     0     0     0     0

(3)zeros(size(A)):A为矩阵,zeros生成一个与矩阵A相同行和列的零矩阵。

例如:

A=[3,4,5;2,7,8];
a=zeros(size(A))

运行结果如下所示:

a =
     0     0     0
     0     0     0

(4)zeros(m,n,'like',p):p为矩阵,生成一个与p类型相同,大小为m行n列的零矩阵。

例如:

p=[2+1i,3;4,2+3i];
zeros(3,2,'like',p)

在上述代码段中的p矩阵为一个复数矩阵,那么matlab中所求的结果应为一个3行2列的复数矩阵。运行结果如下所示:

ans =
   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.0000 + 0.0000i

(5)zeros(m,n,typename):生成一个m行n列的矩阵,其中矩阵的中所有元素的类型通过typename指定的。

例如,生成一个3行4列的int类型的矩阵代码如下所示:

a=zeros(3,4,'int16')

运行结果如下所示:

a =

  3×4 int16 矩阵

   0   0   0   0
   0   0   0   0
   0   0   0   0

在例如,生成一个3行4列的logical类型的矩阵代码如下所示:

a=zeros(4,4,'logical')

运行结果如下如所示:

a =

  4×4 logical 数组

   0   0   0   0
   0   0   0   0
   0   0   0   0
   0   0   0   0

在typename中可以选择的值包括:'double'、'single'、‘logical’、‘int8‘、’int16‘、'int32'、’uint8‘、'uint16'、’uint32‘或者是zeros函数支持的其他类的名称。

(5)flase函数

在MATLAB中,false函数用于生成全为0的逻辑矩阵。

例如,生成一个3行4类的全0逻辑矩阵,代码如下所示:

a=false(3,4)

运行结果如下所示:

a =

  3×4 logical 数组

   0   0   0   0
   0   0   0   0
   0   0   0   0

需要注意的是,false(3,4)和zeros(3,4,'logical')所达成的效果是相同的。

2、幺矩阵

在线性代数中,矩阵中的所有元素的值全为1的矩阵的称为幺矩阵,在MATLAB中初始化幺矩阵通常使用ones函数,其中ones函数所使用的调用格式与zeros函数类似。

(1)例如,建立一个4行6列的ones函数的代码如下所示:

a=ones(4,6)

运行结果如下所示:

a =

     1     1     1     1     1     1
     1     1     1     1     1     1
     1     1     1     1     1     1
     1     1     1     1     1     1

通过与zeros函数进行类比,可以对于ones函数使用相同的操作。

(2)true函数

在MATLAB中,true函数用于生成全为1的逻辑矩阵。

例如,生成一个3行4类的全1逻辑矩阵,代码如下所示:

a=true(3,4)

运行结果如下所示:

a =

  3×4 logical 数组

   1   1   1   1
   1   1   1   1
   1   1   1   1

需要注意的是,true(3,4)和ones(3,4,'logical')所达成的效果是相同的。

3、eye函数

在MATLAB中,eye函数可以初始化单位矩阵,即对角线上元素均为1其余元素均为0的方阵。

例如初始化一个3行3列的单位矩阵代码如下:
 

a=eye(3,3)

运行结果如下所示:

a =
     1     0     0
     0     1     0
     0     0     1

需要注意的是,eye函数不仅可以初始化单位矩阵,同时可以初始化行和列不相同的矩阵,其中主对角线的元素全为1,其余元素均为0。例如:

a=eye(3,4)
b=eye(4,3)

运行结果如下所示:

a =
     1     0     0     0
     0     1     0     0
     0     0     1     0
b =
     1     0     0
     0     1     0
     0     0     1
     0     0     0

4、随机矩阵

在MATLAB中,有多个函数用于生成随机矩阵,包括rand函数、randi函数、randn函数和randperm函数:

(1)rand(m,n):生成一个m行n列的矩阵,矩阵中所有元素的值均在0-1之间。

例如初始化一个3行4列的随机矩阵,代码如下:

a=rand(3,4)

运行结果如下所示:

a =
    0.8147    0.9134    0.2785    0.9649
    0.9058    0.6324    0.5469    0.1576
    0.1270    0.0975    0.9575    0.9706

(2)randi(imax,m,n):生成一个m行n列的矩阵,其中矩阵的所有元素为[1,imax]均匀分布的随机矩阵。

例如初始化一个4行5列,元素从[1,6]之间的矩阵,代码如下所示:

a=randi(6,4,5)

运行结果如下所示:

a =
     6     3     4     5     4
     3     6     1     5     2
     5     5     6     5     5
     1     6     6     3     1

(3)randn(m,n):生成一组3行4列的矩阵,其中矩阵中的所有元素为平均值为0、方差为1的标准正太分布随机数。

例如,初始化一个均值为0、方差为1的4行5列的矩阵,代码如下所示:

a=randn(4,5)

运行结果如下所示:

a =
    0.6007    1.5326    1.1174    1.1006   -0.7423
   -1.2141   -0.7697   -1.0891    1.5442   -1.0616
   -1.1135    0.3714    0.0326    0.0859    2.3505
   -0.0068   -0.2256    0.5525   -1.4916   -0.6156

(4)randperm(n,k):将[1,n]的整数随机排列,生成一个指定长度为k的向量:

例如初始化一个长度为6,将[1,6]之间的整数随机排列的向量:

a=randperm(6,6)

运行结果如下所示:

a =
     2     1     5     3     4     6

需要注意的是randperm(n,k)中,但k的小于n时(k必须小于等于n),运行结果是随机选取k个[1,n]的整数进行随机排列的向量。

例如,初始化一个长度为4,将区间[1,6]的整数随机排列的向量,代码如下所示:

a=randperm(6,4)

运行结果如下所示:

a =

     3     6     4     1

5、魔方矩阵

魔方矩阵又称幻方、九宫格、纵横线,是有相同的行数和列数,并在每行每列、对角线上的和都相等的矩阵,其中矩阵的每一行以及每一列的和均为\frac{n(n^2+1)}{2}。魔方矩阵中的每个元素不能相同。(本段定义参考百度百科魔方矩阵)

在MATLAB中,提供magic函数来生成一个魔方矩阵,调用格式如下所示:

magic(n):生成n阶的魔方矩阵。

例如生成一个4阶的魔方矩阵,代码如下所示:

a=magic(4)

运行结果如下所示:

a =
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1

6、范德蒙德矩阵

使用MATLAB所生成的范德蒙德矩阵中,最后一列的元素全为1,倒数第二列的元素为用户指定的向量,而其余列是其后一列向量与倒数第二列向量的点乘积。在MATLAB中,使用vander函初始化一个范德蒙德矩阵。

例如,初始一个倒数第二行元素从上到下依次是1、3、4、7、8的5阶矩阵,代码如下:

a=vander([1,3,4,7,8])

运行结果如下所示:

a =
           1           1           1           1           1
          81          27           9           3           1
         256          64          16           4           1
        2401         343          49           7           1
        4096         512          64           8           1

7、帕斯卡矩阵

帕斯卡矩阵是由(x+y)^n展开之后系数随n的增大组成的三角形表,又称为杨辉三角表。其矩阵的第1行和第1列的元素均为1,其余第i行第j列的元素a_{ij}=a_{i,j-1}+a_{i-1,j}。在MATLAB中使用pascal函数生成一个n阶帕斯卡矩阵。

例如,生成一个5阶帕斯卡矩阵,代码如下:

a=pascal(5)

运行结果如下所示:

a =
     1     1     1     1     1
     1     2     3     4     5
     1     3     6    10    15
     1     4    10    20    35
     1     5    15    35    70

同时帕斯卡矩阵可以计算(x+y)^n的展开式中各项的系数,第1至第n项的系数为从a_{n1}a_{n-1,2}...a_{1n}例如计算(x+y)^4的展开式的系数:

a=pascal(4)

运行结果如下所示:

a =
     1     1     1     1
     1     2     3     4
     1     3     6    10
     1     4    10    20

(x+y)_4的各项系数为顺着副对角线从左下角至右上角(或从右上角值左下角)各个元素的值,即:(x+y)^4=x^{3}+3x^{2}y+3xy^{2}+y^{3}

8、托普利兹矩阵

托普利兹矩阵是矩阵第一行和第一列的元素,其他元素都是和左上角的元素相同。在MATLAB中,toeplitz(v1,v2):v1和v2分别表示托普利兹矩阵的第一列的列向量和第一行的行向量。其中v1向量和v2向量的首元素必须相同。

例如初始化化一个托普利兹矩阵:

 a=toeplitz([4,3,2,6],[4,6,9,10,12])

运行结果如下所示:

a =
     4     6     9    10    12
     3     4     6     9    10
     2     3     4     6     9
     6     2     3     4     6

9、希尔伯特矩阵

希尔伯特矩阵是一个数学变化矩阵,每个元素的值a_{ij}=\frac{1}{i+j-1},希尔伯特矩阵是个高度病态的矩阵(即任何一个元素发生变化,整个矩阵的行列式和逆矩阵都会发生巨大变化),MATLAB提供了hilb函数生成希尔伯特矩阵。其中hilb函数有两种调用格式:

hilb(n):n为常数,返回一个n阶的希尔伯特矩阵。

hilb(n,classname):n为常数,表示的是希尔伯特矩阵的阶数,classname表示矩阵的类,classname的矩阵的类,可以取值为‘double’和‘single’,其中默认值为‘double’。

例如初始化一个4阶希尔伯特矩阵:

a=hilb(4)

运行结果如下所示:

a =
    1.0000    0.5000    0.3333    0.2500
    0.5000    0.3333    0.2500    0.2000
    0.3333    0.2500    0.2000    0.1667
    0.2500    0.2000    0.1667    0.1429

在例如初始化一个single类的5阶矩阵。

a=hilb(5,'single')

运行结果如下所示:

a =

  5×5 single 矩阵

    1.0000    0.5000    0.3333    0.2500    0.2000
    0.5000    0.3333    0.2500    0.2000    0.1667
    0.3333    0.2500    0.2000    0.1667    0.1429
    0.2500    0.2000    0.1667    0.1429    0.1250
    0.2000    0.1667    0.1429    0.1250    0.1111

MATLAB中有专门求希尔伯特矩阵的逆矩阵的函数invhilb函数,当n小于15时,invhilb(n)生成希尔伯特矩阵的精确的逆矩阵,当n大于15时,invhilb(n)生成的是Hilbert矩阵的近似矩阵。

10、伴随矩阵

MATLAB对于一个多项式p(x)=a_{n}x^{n}+a_{n-1}x^{n-1}+...+a_{1}x+a_{0}的伴随矩阵为:

A=\begin{bmatrix} - \frac{a_{n-1}}{a_n}& -\frac{a_{n-2}}{a_{n}} & -\frac{a_{n-3}}{a_n} & ... & -\frac{a_{1}}{a_{n}} & -\frac{a_{0}}{a_{n}}\\ 1 & 0 & 0 & ... & 0 & 0\\ 0& 1 & 0 & ... & 0 & 0\\ 0 & 0 & 1& ... & 0 & 0\\ \vdots & \vdots & \vdots & \ddots & \vdots &\vdots \\ 0 & 0 & 0 & \cdots & 1 & 0 \end{bmatrix}

方程p(x)的根称为A的特征值。

MATLAB生成使用compan函数生成伴随矩阵,例如求4x^{4}+5x^{3}+12x^{2}+4x+6的伴随矩阵,代码如下:

运行结果如下所示:

a=compan([4,5,12,4,6])

运行结果如下所示:

a =

   -1.2500   -3.0000   -1.0000   -1.5000
    1.0000         0         0         0
         0    1.0000         0         0
         0         0    1.0000         0

11、级联矩阵

MATLAB将用指定方向进行合并两个或者多个矩阵,函数调用如下如下:

(1)cat(dim,A1,A2,A3,A4,...An):在指定维度合并矩阵,cat(1,A,B)等同于cat(1,A,B)等同于[A;B],而cat(2,A,B)等同于[A,B]。

例如将三个矩阵的纵向合并矩阵:

A=[1,2,3;4,3,5];
B=[1,2,1;5,4,1];
C=[0,1,6;7,3,1];
D=cat(1,A,B,C)
E=cat(2,A,B,C)

运行结果如下:

D =
     1     2     3
     4     3     5
     1     2     1
     5     4     1
     0     1     6
     7     3     1

E =
     1     2     3     1     2     1     0     1     6
     4     3     5     5     4     1     7     3     1

(2)horzcat(A1,A2,...An):横向合并矩阵,horzcat(A,B)等同于[A,B]。

例如:

A=[1,3;4,6;3,1];
B=[3,2;1,4;5,1];
A=horzcat(A,B)

运行结果如下所示:

A =
     1     3     3     2
     4     6     1     4
     3     1     5     1

(3)horzcat(A1,A2,...An):纵向合并矩阵,horzcat(A,B)等同于[A;B]。

例如:

A=[1,3,4;6,3,1];
B=[3,2,1;4,5,1];
A=vertcat(A,B)

运行结果如下所示:

A =
     1     3     4
     6     3     1
     3     2     1
     4     5     1

(4)repmat(A,m,n):复制矩阵A来构造一个新的矩阵,其中纵向复制m个A,横向复制有n个A。

例如:

A=[1,4;5,8]
A=repmat(A,2,3)

运行结果如下所示:

A =
     1     4     1     4     1     4
     5     8     5     8     5     8
     1     4     1     4     1     4
     5     8     5     8     5     8

12、累计矩阵

在MATLAB中,使用accumarray对于指定的向量进行累计,然后用计算的结果构造一个新的矩阵。accumarray有如下几种调用格式:

(1)accumarray(subs,val):subs是下标矩阵或者是向量,而val是数据,val可以是一个标量或者是一个向量。

当subs是一个向量时:

val=1;
subs=[1;2;5;2;4];
a=accumarray(subs,val)

运行结果如下所示:

a =
     1
     2
     0
     1
     1

由上图中的运行显示,返回的是一个计数向量,表示的subs向量中下标出现次数与val的积。如果将val的值改为2:

val=2;
subs=[1;2;5;2;4];
a=accumarray(subs,val)

运行结果如下所示:

a =
     2
     4
     0
     2
     2

对比两次运行结果可以看到,当val变化增加一倍时,返回的结果也同样增加一倍。

当val是一个向量时:

val=10:10:50;
subs=[1;2;5;3;4];
a=accumarray(subs,val)

运行结果如下所示:

a =
    10
    20
    40
    50
    30

当subs是一个二维矩阵的时候,subs矩阵中的每行是val中对应元素的位置。

例如:

val = 10:10:50;
subs=[1,3;3,1;2,2;3,2;2,1];
a=accumarray(subs,val)

运行结果如下所示:

a =

     0     0    10
    50    30     0
    20    40     0

当subs中如果两行元素相同的时候,那么对应的val就会累计起来。例如:

val = 10:10:50;
subs=[1,3;3,1;2,2;3,2;3,1];
a=accumarray(subs,val)

运行结果如下所示:

a =

     0     0    10
     0    30     0
    70    40     0

(2)accumarray(subs,val,sz):subs和val同(1)相同,而sz表示的是输出数组的大小。其中,ALL(MAX(subs)<=sz),例如:

val=10:10:50;
subs=[1;2;5;3;4];
sz=[6 1]
a=accumarray(subs,val,sz)

运行结果如下所示:

a =
    10
    20
    40
    50
    30
     0

由运行结果可以看出,返回的结果为6行1列的矩阵,其中大于原来行数的内容会用0来补充。

(3)accumarray(subs,val,sz,fun):subs和val同(1)相同,sz表示的输出数组的大小,其中,其中ALL(MAX(subs)<=sz),fun表示的是函数,默认情况下为[],例如;

val = 1:5;
subs = [1,1;2,1;2,2;1,2;2,1];
a = accumarray(subs,val,[],@(x) {x})

运行结果如下所示:

a =

  2×2 cell 数组

    {[       1]}    {[4]}
    {2×1 double}    {[3]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1341692.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android 13 - Media框架(28)- MediaCodec(三)

上一节我们了解到 ACodec 执行完 start 流程后&#xff0c;会把所有的 input buffer 都提交给 MediaCodec 层&#xff0c;MediaCodec 是如何处理传上来的 buffer 呢&#xff1f;这一节我们就来了解一下这部分内容。 1、ACodecBufferChannel::fillThisBuffer ACodec 通过调用 A…

【Linux】指令(本人使用比较少的)——笔记(持续更新)

文章目录 ps -axj&#xff1a;查看进程ps -aL&#xff1a;查看线程echo $?&#xff1a;查看最近程序的退出码jobs&#xff1a;查看后台运行的线程组fd 任务号&#xff1a;将后台任务提到前台bg 任务号&#xff1a;将暂停的后台程序重启netstat -nltp&#xff1a;查看服务及监听…

<软考高项备考>《论文专题 - 34 沟通管理(2) 》

3 过程2-管理沟通 3.1 问题 4W1H过程做什么确保项目信息及时且恰当地收集、生成、发布、存储、检索、管理、监督和最终处置的过程作用&#xff1a;促成项目团队与干系人之间的有效信息流动为什么做实现有效率、有效果沟通谁来做项目管理团队/项目团队&#xff08;如果项目规模…

CSS 纵向扩展动画

上干货 <template><!-- mouseenter"startAnimation" 表示在鼠标进入元素时触发 startAnimation 方法。mouseleave"stopAnimation" 表示在鼠标离开元素时触发 stopAnimation 方法。 --><!-- 容器元素 --><div class"container&q…

如何借助边缘网关打造智慧配电房安全方案

配电房是电力系统的重要组成部分&#xff0c;通常设置有各种高压配电装置和箱柜&#xff0c;是企业安全管理的重点。传统的人工巡检和监控总是难以避免疏漏&#xff0c;导致风险隐患的产生和扩大。 随着物联网、边缘计算、设备联动控制等技术的普及应用&#xff0c;佰马针对配电…

B3842 起动电流小,工作频率 可达500kHz的Dc-Dc开关电源芯片

B3842/43/44是专为脱线和Dc-Dc开关电源应用设计的恒频电流型Pwd控制器内部包含温度补偿精密基准、供精密占空比调节用的可调振荡器、高增益混放大器、电流传感比较器和适合作功率MOST驱动用的大电流推挽输出颇以及单周期徊滞式限流欠压锁定、死区可调、单脉冲计数拴锁等保护电路…

一文入门Qt Quick

以下内容为本人的著作&#xff0c;如需要转载&#xff0c;请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/dvamU6q5lZQb5hztfD2zNg 初识Qt Quick 很高兴可以来到这一章&#xff0c;终于可以开始讲讲最近几年Qt的热门技术Quick这一块了。 啥是Qt&#xff1…

Qt+Opencv:人脸检测

话接上一篇&#xff0c;我们仍使用在上篇《QtOpencv&#xff1a;Qt中部署opencv》创建的Qt项目来测试opencv提供的sample。 在正式开始本篇之前&#xff0c;我们先说做一下准备工作&#xff1a; 一、opencv官方文档 学习最权威和最可靠的方式&#xff0c;就是阅读官方文档和…

太空中的人形机器人:探索新疆界

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

YOLOv5改进 | 2023Neck篇 | CCFM轻量级跨尺度特征融合模块(RT-DETR结构改进v5)

一、本文介绍 本文给大家带来的改进机制是轻量级跨尺度特征融合模块CCFM&#xff08;Cross-Scale Feature Fusion Module&#xff09;其主要原理是&#xff1a;将不同尺度的特征通过融合操作整合起来&#xff0c;以增强模型对于尺度变化的适应性和对小尺度对象的检测能力。我将…

SolidWorks高级装配技能

SolidWorks高级装配技能有协调技能&#xff0c;配合计算速度:关系协调(巧合、平行)&#xff0c;逻辑配合(宽度、凸轮、齿轮)&#xff0c;距离/角度配合&#xff0c;有限配合&#xff0c;使用子组件。 使用子组件根据产品的层次结构组织产品&#xff0c;避免将所有零件添加到一个…

代码随想录-刷题第四十一天

343. 整数拆分 题目链接&#xff1a;343. 整数拆分 思路&#xff1a;动态规划五步曲 dp[i]&#xff1a;拆分数字i&#xff0c;可以得到的最大乘积为dp[i]。 递推公式&#xff1a;dp[i] max(dp[i], max((i - j) * j, dp[i - j] * j)) 从1遍历j&#xff0c;有两种渠道得到dp[…

【STM32】程序在SRAM中运行

程序在RAM中运行 1、配置内存分配。 2、修改跳转文件 FUNC void Setup(void) { SP _RDWORD(0x20000000); PC _RDWORD(0x20000004); } LOAD RAM\Obj\Project.axf INCREMENTAL Setup(); 3、修改下载ROM地址和RAM地址&#xff1b; 中断向量表映射 中断向量表映射到SRA…

需求分析 :不得不重新去面对的一关。

软件需求分析 背景 深入需求产生的背景明确项目目标了解用户群体 需求优先级 需求的分类与整理明确需求优先级让团队成员都参与到需求分析中来&#xff0c;增加团队合作能力与效率 编写需求文档 整理好的需求编写成详细的需求文档包括需求的描述、输入/输出格式、功能流程…

Oracle-审计表AUD$无法正常清理数据问题

问题背景: 用户通过数据库管理审计日志包DBMS_AUDIT_MGMT里面的存储过程CREATE_PURGE_JOB创建了定期清理审计日志数据的job&#xff0c;job每1小时执行一次&#xff0c;清理1天以前的审计表数据&#xff0c;运行了一段时间后&#xff0c;用户发现审计表AUD$里面的数据并没有减少…

STL——list容器

目录 1.list基本概念 2.list构造函数 3.list赋值和交换 4.list大小操作 5.list插入和删除 6.list数据存取 7.list反转和排序 8.排序案例 1.list基本概念 功能&#xff1a;将数据进行链式存储。 链表&#xff08;list&#xff09;是一种物理存储单元上非连续的存储结构&…

2023-12-29 服务器开发-Centos部署LNMP环境

摘要: 2023-12-29 服务器开发-Centos部署LNMP环境 centos7.2搭建LNMP具体步骤 1.配置防火墙 CentOS 7.0以上的系统默认使用的是firewall作为防火墙&#xff0c; 关闭firewall&#xff1a; systemctl stop firewalld.service #停止firewall systemctl disable fire…

redis 三主六从高可用docker(不固定ip)

redis集群(cluster)笔记 redis 三主三从高可用集群docker swarm redis 三主六从高可用docker(不固定ip) 此博客解决&#xff0c;redis加入集群后&#xff0c;是用于停掉后重启&#xff0c;将nodes.conf中的旧的Ip替换为新的IP&#xff0c;从而达到不会因为IP变化导致集群无法…

设计模式-多例模式

设计模式专栏 模式介绍多例模式和单例模式的区别应用场景Spring中多例模式的优缺点代码示例Java实现多例模式Python实现多例模式 多例模式在spring中的应用 模式介绍 多例模式是一种创建型设计模式&#xff0c;属于对象创建类型。多例模式的特点是允许一个类有多个实例&#x…

在Adobe Acrobat上如何做PDF文档签名

Adobe Acrobat如何做PDF文档签名&#xff1f;PDF文档签名是指对PDF文档进行基于证书的数字签名&#xff0c;类似于传统的手写签名&#xff0c;可标识签名文档的人员。与手写签名不同&#xff0c;数字签名难以伪造&#xff0c;因为其包含签名者唯一的加密信息。为PDF文档进行基于…