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

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

相关文章

Python在固定文件夹批量创建固定后缀的文件(方法详解)

《Python在固定文件夹批量创建固定后缀的文件(方法详解)》文章讲述了如何使用Python批量创建后缀为.md的文件夹,生成100个,代码中需要修改的路径、前缀和后缀名,并提供了注意事项和代码示例,... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果5.

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

使用SpringBoot创建一个RESTful API的详细步骤

《使用SpringBoot创建一个RESTfulAPI的详细步骤》使用Java的SpringBoot创建RESTfulAPI可以满足多种开发场景,它提供了快速开发、易于配置、可扩展、可维护的优点,尤... 目录一、创建 Spring Boot 项目二、创建控制器类(Controller Class)三、运行

Oracle的to_date()函数详解

《Oracle的to_date()函数详解》Oracle的to_date()函数用于日期格式转换,需要注意Oracle中不区分大小写的MM和mm格式代码,应使用mi代替分钟,此外,Oracle还支持毫... 目录oracle的to_date()函数一.在使用Oracle的to_date函数来做日期转换二.日

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

手把手教你idea中创建一个javaweb(webapp)项目详细图文教程

《手把手教你idea中创建一个javaweb(webapp)项目详细图文教程》:本文主要介绍如何使用IntelliJIDEA创建一个Maven项目,并配置Tomcat服务器进行运行,过程包括创建... 1.启动idea2.创建项目模板点击项目-新建项目-选择maven,显示如下页面输入项目名称,选择

Perl 特殊变量详解

《Perl特殊变量详解》Perl语言中包含了许多特殊变量,这些变量在Perl程序的执行过程中扮演着重要的角色,:本文主要介绍Perl特殊变量,需要的朋友可以参考下... perl 特殊变量Perl 语言中包含了许多特殊变量,这些变量在 Perl 程序的执行过程中扮演着重要的角色。特殊变量通常用于存储程序的

C++11的函数包装器std::function使用示例

《C++11的函数包装器std::function使用示例》C++11引入的std::function是最常用的函数包装器,它可以存储任何可调用对象并提供统一的调用接口,以下是关于函数包装器的详细讲解... 目录一、std::function 的基本用法1. 基本语法二、如何使用 std::function

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal