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

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

相关文章

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

kotlin的函数forEach示例详解

《kotlin的函数forEach示例详解》在Kotlin中,forEach是一个高阶函数,用于遍历集合中的每个元素并对其执行指定的操作,它的核心特点是简洁、函数式,适用于需要遍历集合且无需返回值的场... 目录一、基本用法1️⃣ 遍历集合2️⃣ 遍历数组3️⃣ 遍历 Map二、与 for 循环的区别三、高

Spring 中使用反射创建 Bean 实例的几种方式

《Spring中使用反射创建Bean实例的几种方式》文章介绍了在Spring框架中如何使用反射来创建Bean实例,包括使用Class.newInstance()、Constructor.newI... 目录1. 使用 Class.newInstance() (仅限无参构造函数):2. 使用 Construc

C语言字符函数和字符串函数示例详解

《C语言字符函数和字符串函数示例详解》本文详细介绍了C语言中字符分类函数、字符转换函数及字符串操作函数的使用方法,并通过示例代码展示了如何实现这些功能,通过这些内容,读者可以深入理解并掌握C语言中的字... 目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现3.1strlen函数3.2st

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

MySQL中COALESCE函数示例详解

《MySQL中COALESCE函数示例详解》COALESCE是一个功能强大且常用的SQL函数,主要用来处理NULL值和实现灵活的值选择策略,能够使查询逻辑更清晰、简洁,:本文主要介绍MySQL中C... 目录语法示例1. 替换 NULL 值2. 用于字段默认值3. 多列优先级4. 结合聚合函数注意事项总结C

基于Python实现一个PDF特殊字体提取工具

《基于Python实现一个PDF特殊字体提取工具》在PDF文档处理场景中,我们常常需要针对特定格式的文本内容进行提取分析,本文介绍的PDF特殊字体提取器是一款基于Python开发的桌面应用程序感兴趣的... 目录一、应用背景与功能概述二、技术架构与核心组件2.1 技术选型2.2 系统架构三、核心功能实现解析