一些创建特殊矩阵的内置函数的堆积

2024-08-30 04:58

本文主要是介绍一些创建特殊矩阵的内置函数的堆积,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

(1) 常用特殊矩阵
zeros():产生全0矩阵(零矩阵)     
ones():产生全1矩阵         
eye():产生单位矩阵
rand():产生0~1间均匀分布的随机矩阵;    
randn():产生均值为 0,方差为 1的标准正态分布随机矩阵
blkdiag(A,B) 以A,和B为块创建块对角矩阵
diag() 根据向量创建对角矩阵,即以向量的元素为对角元素


(2)范得蒙矩阵
vander(V):生成以向量V为基础向量的范得蒙矩
范得蒙(Vandermonde)矩阵最后一列全为1,倒数第二列为一个指定的向量,其他各列是其后列与倒数第二列的点乘积。可以用一个指定向量生成一个范得蒙矩阵。


(3)希尔伯特矩阵
hilb(n):生成希尔伯特矩阵的函数
使用一般方法求逆会因为原始数据的微小扰动而产生不可靠的计算结果。MATLAB中,有一个专门求希尔伯特矩阵的逆的函数invhilb(n),其功能是求 n阶的希尔伯特矩阵的逆矩阵。


(4) 托普利兹矩阵
托普利兹(Toeplitz)矩阵除第一行第一列外,其他每个元素都与左上角的元素相同。
生成托普利兹矩阵的函数是toeplitz(x,y),它生成一个以x为第一列,y为第一行的托普利兹矩阵。这里x, y均为向量,两者不必等长。toeplitz(x)用向量x生成一个对称的托普利兹矩阵。
例如   T=toeplitz(1:6)


(5) 伴随矩阵
MATLAB生成伴随矩阵的函数是compan(p),其中p是一个多项式的系数向量,高次幂系数排在前,低次幂排在后。
例如,为了求多项式的x3-7x+6的伴随矩阵,可使用命令:
       p=[1,0,-7,6];
       compan(p)


(6) 帕斯卡矩阵
二次项(x+y)n展开后的系数随n的增大组成一个三角形表,称为杨辉三角形。
由杨辉三角形表组成的矩阵称为帕斯卡(Pascal)矩阵。
函数pascal(n)生成一个n阶帕斯卡矩阵。


(7)魔方数组 
魔方数组是一种较常用特殊数组,这种数组一定是正方形的,而且每一行,每一行的元素之和都相等。
magic(n)


(8)对角矩阵
以向量(在matlab中,1*n、n*1的矩阵都可以看做是一个向量)的形式返回一个矩阵上对角线元素。
X = diag(v,k)
其中v是一个含有n个元素的向量,该调用格式可以构造一个n+abs(k)阶的方阵X。并把v作为方阵X的第k条对角线(k大于0,表示主对角线上方的第k条对角线,k小于0表示主对角线下侧的第k条对角线,k等于0表示主对线)。
X = diag(v)等价于X = diag(v,0)
v = diag(X,k)以向量形式返回矩阵X中第k条对角线上的元素。
v = diag(X)等价于v = diag(X, 0)
相关函数:diag、rank、det、eig、blkdiag、spdiags


(9)测试矩阵
我们可以利用gallery函数来生成各种性质的测试矩阵。
其用法如下:
[A,B,C,...] = gallery(matname,P1,P2,...,classname)
其中matname表示矩阵性质,classname表示矩阵元素是single还是double。
例如 我们要在一个平面上随机生成10个点 并作出这些点的 voronoi diagram。
x = gallery('uniformdata',[1 10],0); 
y = gallery('uniformdata',[1 10],1); 
voronoi(x,y) 
结果为:其中 uniformdata 表示均匀分布, [1 10] 表示x是一个长度为10的数组,最后一个参数 ;0和1表示不同的矩阵,如果反复引用x = gallery('uniformdata',[1 10],0)  那么得到的数组总是相同的。


(10)Hadamard矩阵(哈达玛)
H=hadamard(n)
简单数组进行哈达玛变换的例子
A=[1 1 3 1
2 1 2 2]
for K=1:4
    wht(:,K)=hadamard(2)*A(:,K)/2
end %对每一列进行变换
for J=1:2
    B=wht(J,:)'
    hadamard(4)
    wh(:,J)=hadamard(4)*wht(J:)'/4

end %对wht的每一行进行变换得到wh


----------%n must be an integer and n, n/12 or n/20 must be a power of 2.



(11)Hilbert matrix 希尔矩阵
每个矩阵元素的值都等于 1/(行索引+列索引-1)。
>> a=hilb(3)
a =
    1.0000    0.5000    0.3333
    0.5000    0.3333    0.2500


(12)invhilb逆希尔伯特矩阵


由于希尔伯特矩阵中,数据的微小抖动都会引起逆矩阵的巨大变化,因此采用一般方法无法求希尔伯特矩阵的逆矩阵。MATLAB有专门的invhilb函数解决这个问题。
H=invhilb(n) 生成n阶希尔伯特逆矩阵。


eg:生成一个3阶希尔伯特逆矩阵。


>> invhilb(3)        %3阶希尔伯特逆矩阵  
ans =  
     9   -36    30  
   -36   192  -180  
    30  -180   180  


ps:用invhilb函数才能可靠地求出希尔伯特矩阵的逆矩阵。
    0.3333    0.2500    0.2000


(13)rosser 经典对称特征值测试矩阵


(14)toeplitz矩阵 常对角矩阵(从左上到右下分别对准,右上到左下无要求


做一般解n条线性方程的问题,其自由度2n-1,不是n^2
对于方阵,Toeplitz方阵可以描述为:任一条平行于主对角线的直线上的元素相同。
matlab中生成托普利兹矩阵的函数是toeplitz(x,y),它生成一个以x为第一列,y为第一行的托普利兹矩阵。这里x, y均为向量,两者不必等长。


toeplitz(x)用向量x生成一个对称的托普利兹矩阵。有弱鲁棒性。
例如:T=toeplitz(1:6).


(15)Pascal矩阵


由杨辉三角形表组成的矩阵称为帕斯卡(Pascal)矩阵。
杨辉三角形表是二次项 (x+y)^n 展开后的系数随自然数 n 的增大组成的一个三角形表。
如4阶帕斯卡矩阵为:
Pascal(4)=
[1 1 1 1
1 2 3 4
1 3 6 10
1 4 10 20]
A=pascal(n),n为正整数,可得到阶数为n的帕斯卡矩阵


Pascal矩阵的第一行元素和第一列元素都为1,其余位置处的元素是该元素的左边元素加起上一行对应位置相加而得,如元素Ai,j=Ai,j-1+Ai-1,j。Ai,j表示第i行,第j列位置上的元素。


(16)vander函数
Vandermonde矩阵范德蒙矩阵,其第i 行、第j 列可以表示为(αi)^(j-1)。
范德蒙矩阵行数为m,列数为n,矩阵具有最大的秩max(m, n)。
应用之一就是在纠错编码中,常用的纠错码Reed-solomon 编码中冗余块的编码采用的即为范德蒙矩阵。




ps:里德-所罗门码(里所码,Reed-solomon codes,简称RS codes)


是一种前向错误更正的信道编码,对由校正过采样数据所产生的多项式有效。编码过程首先在多个点上对这些多项式求冗余,然后将其传输或者存储。对多项式的这种超出必要值得采样使得多项式超定(过限定)。
当接收器正确的收到足够的点后,它就可以恢复原来的多项式,即使接收到的多项式上有很多点被噪声干扰失真。
里德-所罗门码被广泛的应用于各种商业用途,最显著的是在CD、DVD和蓝光光盘上的使用;
在数据传输中,它也被用于DSL和WiMAX;广播系统中DVB和ATSC也闪现着它的身影;
在计算机科学里,它是RAID 6标准的重要成员。


是定长码。这意味着一个固定长度输入的数据将被处理成一个固定长度的输出数据。在最常用的(255,223)里所码中,223个里德-所罗门输入符号(每个符号有8个位元)被编码成255个输出符号。
大多数里所错误校正编码流程是成体系的。这意味着输出的码字中有一部分包含着输入数据的原始形式。
符号大小为8位元的里所码迫使码长(编码长度)最长为255个符号。

标准的(255,223)里所码可以在每个码字中校正最多16个里所符号的错误。由于每个符号事实上是8个位元,这意味着这个码可以校正最多16个短爆发性错误。


里德-所罗门码,如同卷积码一样,是一种透明码。这代表如果信道符号在队列的某些地方被反转,解码器一样可以工作。解码结果将是原始数据的补充。但是,里所码在缩短后会失去透明性。在缩短了的码中,“丢失”的比特需要被0或者1替代,这由数据是否需要补足而决定。(如果符号这时候反转,替代的0需要变成1)。于是乎,需要在里所解码前对数据进行强制性的侦测决定(“是”或者“补足”)。


这种码依靠一个代数理论,这个代数理论说明任何k个唯一的确定点表示一个阶数至少为k-1的多项式。
发送者表明一个在有限域中的k-1阶的多项式,它表示k个数据点。这个多项式就根据它在各点的赋值被“编码”,实际传送的是这些值。在传输中,一些值会被破坏。所以,实际发送的点不止k个。只要正确地接收了足量的数值,接收方就可以推算出原始多项式,进而译出原始数据。
同样的,我们可以通过插值来修正曲线。RS码可以将一组有错误序列的信息码转换到找回画出原始曲线的多项式的系数。


RS码的两种定义方式有着非常大的区别,而它们的等价关系并不是显而易见的。在第一种定义中,码字是多项式的值,而在第二种定义中,码字是多项式的系数。另外,第一种定义要求多项式具有特定的比较小的幂次,而在第二种定义中,多项式需要有特定的根。
这两种定义的等价性可以通过有限域上的离散傅立叶变换来证明。


(17)wilkinson函数
wilkinson特征值测试矩阵
W=wilkinson(n) 
生成n阶特征值测试矩阵,它是一个对称的三对角矩阵。
eg:生成4阶特征值测试矩阵。它是一个三角对矩阵。


>> wilkinson(4)    %4阶特征值测试矩阵  
ans =  
    1.5000    1.0000      0          0  
    1.0000    0.5000    1.0000       0  
       0      1.0000    0.5000    1.0000  
       0         0      1.0000    1.5000
 

这篇关于一些创建特殊矩阵的内置函数的堆积的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1119859

相关文章

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

Spring创建Bean的八种主要方式详解

《Spring创建Bean的八种主要方式详解》Spring(尤其是SpringBoot)提供了多种方式来让容器创建和管理Bean,@Component、@Configuration+@Bean、@En... 目录引言一、Spring 创建 Bean 的 8 种主要方式1. @Component 及其衍生注解

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

MySQL中REPLACE函数与语句举例详解

《MySQL中REPLACE函数与语句举例详解》在MySQL中REPLACE函数是一个用于处理字符串的强大工具,它的主要功能是替换字符串中的某些子字符串,:本文主要介绍MySQL中REPLACE函... 目录一、REPLACE()函数语法:参数说明:功能说明:示例:二、REPLACE INTO语句语法:参数

Nginx添加内置模块过程

《Nginx添加内置模块过程》文章指导如何检查并添加Nginx的with-http_gzip_static模块:确认该模块未默认安装后,需下载同版本源码重新编译,备份替换原有二进制文件,最后重启服务验... 目录1、查看Nginx已编辑的模块2、Nginx官网查看内置模块3、停止Nginx服务4、Nginx

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

python中update()函数的用法和一些例子

《python中update()函数的用法和一些例子》update()方法是字典对象的方法,用于将一个字典中的键值对更新到另一个字典中,:本文主要介绍python中update()函数的用法和一些... 目录前言用法注意事项示例示例 1: 使用另一个字典来更新示例 2: 使用可迭代对象来更新示例 3: 使用

MySQL 临时表创建与使用详细说明

《MySQL临时表创建与使用详细说明》MySQL临时表是存储在内存或磁盘的临时数据表,会话结束时自动销毁,适合存储中间计算结果或临时数据集,其名称以#开头(如#TempTable),本文给大家介绍M... 目录mysql 临时表详细说明1.定义2.核心特性3.创建与使用4.典型应用场景5.生命周期管理6.注

MySQL的触发器全解析(创建、查看触发器)

《MySQL的触发器全解析(创建、查看触发器)》MySQL触发器是与表关联的存储程序,当INSERT/UPDATE/DELETE事件发生时自动执行,用于维护数据一致性、日志记录和校验,优点包括自动执行... 目录触发器的概念:创建触www.chinasem.cn发器:查看触发器:查看当前数据库的所有触发器的定