文档库 最新最全的文档下载
当前位置:文档库 › 复数矩阵求逆运算

复数矩阵求逆运算

复数矩阵求逆运算
复数矩阵求逆运算

所以按照以上介绍的方法,用C语言实现过程如下:

#include

#include

float getA(float **arcs, int n)//按第一行展开计算|A|

{

if(n==1)

{

return arcs[0][0];

}

int i,j,k;

float ans = 0;

float **temp = (float **)malloc(sizeof(float *) * n);

for(i = 0; i < n; i++){

temp[i] = (float *)malloc(sizeof(float *) * n);

}

for(i=0;i

{

for(j=0;j

{

for(k=0;k

{

temp[j][k] = arcs[j+1][(k>=i)?k+1:k];

}

}

float t = getA(temp,n-1);

if(i%2==0)

{

ans += arcs[0][i]*t;

}

else

{

ans -= arcs[0][i]*t;

}

}

return ans;

}

void getAStart(float **arcs,int n,float **ans)

{

if(n==1)

{

ans[0][0] = 1;

return;

}

int i,j,k,t;

float num = getA(arcs,n);

float **temp = (float **)malloc(sizeof(float *) * n);

for(i = 0; i < n; i++){

temp[i] = (float *)malloc(sizeof(float *) * n);

}

for(i=0;i

{

for(j=0;j

{

for(k=0;k

{

for(t=0;t

{

temp[k][t] = arcs[k>=i? k+1:k][t>=j? t+1:t]; //找出除第i行第j列的(n-1)矩阵

}

}

ans[j][i] = getA(temp,n-1) / num; //计算arcs[i][j]的余子式

if((i+j)%2 == 1)

{

ans[j][i] = - ans[j][i]; //计算arcs[i][j]的代数余子式}

}

}

}

void Matrix_Add(float **a,float **b, float **c,int n){

//矩阵相加

int i, j;

for(i = 0; i < n; i++)

for(j = 0; j < n; j++){

c[i][j] = a[i][j] + b[i][j];

}

}

//c = a * b

void Matrix_Mul(float **a,float **b,float **c,int n){

int i, j, k;

for(i = 0;i<3;i++)

{

for(j =0;j<3;j++)

{

c[i][j] = 0; //清零

for(k = 0;k<3;k++)

{

c[i][j] += a[i][k]*b[k][j];

}

}

}

}

void Inverse(float **a, float **b, int n){

int i, j;

float **c = (float **)malloc(sizeof(float *) * n);

for(i = 0; i < n; i++){

c[i] = (float *)malloc(sizeof(float) * n);

}

float **d = (float **)malloc(sizeof(float *) * n);

for(i = 0; i < n; i++){

d[i] = (float *)malloc(sizeof(float) * n);

}

getAStart(a,n,c); //求实部矩阵的逆:C = A~-1

printf("实部矩阵的逆:C = A~-1\n");

for(i=0;i

{

for(j=0;j

{

printf("%0.5f ",c[i][j]);

}

printf("\n");

} printf("\n");

Matrix_Mul(c,b,d,n); //D = A~-1 * B

printf("实部矩阵的逆与虚部矩阵相乘:D = A~-1 * B\n");

for(i=0;i

{

for(j=0;j

{

printf("%0.5f ",d[i][j]);

}

printf("\n");

} printf("\n");

Matrix_Mul(b,d,c,n); //C = B * A~-1 * B

printf("C = B * A~-1 * B\n");

for(i=0;i

{

for(j=0;j

{

printf("%0.5f ",c[i][j]);

}

printf("\n");

} printf("\n");

Matrix_Add(a,c,c,n); //C = A + B * A~-1 * B

printf("C = A + B * A~-1 * B\n");

for(i=0;i

{

for(j=0;j

{

printf("%0.5f ",c[i][j]);

}

printf("\n");

} printf("\n");

getAStart(c,n,a); //A = (A + B * A~-1 * B)~-1,复数矩阵的求逆后的实部printf("复数矩阵的求逆后的实部:A = (A + B * A~-1 * B)~-1\n");

for(i=0;i

{

for(j=0;j

{

printf("%0.5f ",a[i][j]);

}

printf("\n");

} printf("\n");

Matrix_Mul(d,a,b,n); //B = (A~-1 * B) * (A + B * A~-1 * B)~-1,复数矩阵的求逆后的虚部printf("复数矩阵的求逆后的虚部:B = (A~-1 * B) * (A + B * A~-1 * B)~-1\n");

for(i=0;i

{

for(j=0;j

{

printf("%0.5f ",b[i][j]);

}

printf("\n");

} printf("\n");

}

void main()

{

int i;

float **a = (float **)malloc(sizeof(float *) * 2);

for(i = 0; i < 2; i++){

a[i] = (float *)malloc(sizeof(float) * 2);

}

float **b = (float **)malloc(sizeof(float *) * 2);

for(i = 0; i < 2; i++){

b[i] = (float *)malloc(sizeof(float) * 2);

}

a[0][0] = 4; a[0][1] = 3;

a[1][0] = 2; a[1][1] = 4;

b[0][0] = 1; b[0][1] = 1;

b[1][0] = 1; b[1][1] = 1;

Inverse(a, b, 2);

}

特征值分解与奇异值分解

特征值:一矩阵A作用与一向量a,结果只相当与该向量乘以一常数λ。即A*a=λa,则a 为该矩阵A的特征向量,λ为该矩阵A的特征值。 奇异值:设A为m*n阶矩阵,A H A的n个特征值的非负平方根叫作A的奇异值。记 (A) 为σ i 上一次写了关于PCA与LDA的文章,PCA的实现一般有两种,一种是用特征值分解去实现的,一种是用奇异值分解去实现的。在上篇文章中便是基于特征值分解的一种解释。特征值和奇异值在大部分人的印象中,往往是停留在纯粹的数学计算中。而且线性代数或者矩阵论里面,也很少讲任何跟特征值与奇异值有关的应用背景。奇异值分解是一个有着很明显的物理意义的一种方法,它可以将一个比较复杂的矩阵用更小更简单的几个子矩阵的相乘来表示,这些小矩阵描述的是矩阵的重要的特性。就像是描述一个人一样,给别人描述说这个人长得浓眉大眼,方脸,络腮胡,而且带个黑框的眼镜,这样寥寥的几个特征,就让别人脑海里面就有一个较为清楚的认识,实际上,人脸上的特征是有着无数种的,之所以能这么描述,是因为人天生就有着非常好的抽取重要特征的能力,让机器学会抽取重要的特征,SVD是一个重要的方法。 在机器学习领域,有相当多的应用与奇异值都可以扯上关系,比如做feature reduction的PCA,做数据压缩(以图像压缩为代表)的算法,还有做搜索引擎语义层次检索的LSI(Latent Semantic Indexing) 另外在这里抱怨一下,之前在百度里面搜索过SVD,出来的结果都是俄罗斯的一种狙击枪(AK47同时代的),是因为穿越火线这个游戏里面有一把狙击枪叫做 SVD,而在Google上面搜索的时候,出来的都是奇异值分解(英文资料为主)。想玩玩战争游戏,玩玩COD不是非常好吗,玩山寨的CS有神马意思啊。国内的网页中的话语权也被这些没有太多营养的帖子所占据。真心希望国内的气氛能够更浓一点,搞游戏的人真正是喜欢制作游戏,搞Data Mining的人是真正喜欢挖数据的,都不是仅仅为了混口饭吃,这样谈超越别人才有意义,中文文章中,能踏踏实实谈谈技术的太少了,改变这个状况,从我自己做起吧。 前面说了这么多,本文主要关注奇异值的一些特性,另外还会稍稍提及奇异值的计算,不过本文不准备在如何计算奇异值上展开太多。另外,本文里面有部分不算太深的线性代数的知识,如果完全忘记了线性代数,看本文可能会有些困难。 一、奇异值与特征值基础知识: 特征值分解和奇异值分解在机器学习领域都是属于满地可见的方法。两者有着很紧密的关系,我在接下来会谈到,特征值分解和奇异值分解的目的都是一样,就是提取出一个矩阵最重要的特征。先谈谈特征值分解吧:

奇异值分解及其应用

奇异值分解及其应用 This model paper was revised by the Standardization Office on December 10, 2020

PCA的实现一般有两种,一种是用特征值分解去实现的,一种是用奇异值分解去实现的。特征值和奇异值在大部分人的印象中,往往是停留在纯粹的数学计算中。而且线性代数或者矩阵论里面,也很少讲任何跟特征值与奇异值有关的应用背景。奇异值分解是一个有着很明显的物理意义的一种方法,它可以将一个比较复杂的矩阵用更小更简单的几个子矩阵的相乘来表示,这些小矩阵描述的是矩阵的重要的特性。就像是描述一个人一样,给别人描述说这个人长得浓眉大眼,方脸,络腮胡,而且带个黑框的眼镜,这样寥寥的几个特征,就让别人脑海里面就有一个较为清楚的认识,实际上,人脸上的特征是有着无数种的,之所以能这么描述,是因为人天生就有着非常好的抽取重要特征的能力,让机器学会抽取重要的特征,SVD是一个重要的方法。 在机器学习领域,有相当多的应用与奇异值都可以扯上关系,比如做feature reduction的PCA,做数据压缩(以图像压缩为代表)的算法,还有做搜索引擎语义层次检索的LSI(Latent Semantic Indexing) 奇异值与特征值基础知识 特征值分解和奇异值分解在机器学习领域都是属于满地可见的方法。两者有着很紧密的关系,我在接下来会谈到,特征值分解和奇异值分解的目的都是一样,就是提取出一个矩阵最重要的特征。先谈谈特征值分解吧: 如果说一个向量v是方阵A的特征向量,将一定可以表示成下面的形式: 这时候λ就被称为特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。特征值分解是将一个矩阵分解成下面的形式: 其中Q是这个矩阵A的特征向量组成的矩阵,Σ是一个对角阵,每一个对角线上的元素就是一个特征值。我这里引用了一些参考文献中的内容来说明一下。首先,要明确的是,一个矩阵其实就是一个线性变换,因为一个矩阵乘以一个向量后得到的向量,其实就相当于将这个向量进行了线性变换。比如说下面的一个矩阵: 它其实对应的线性变换是下面的形式:

矩阵的奇异值分解及其应用

矩阵的奇异值分解(SVD)及其应用 版权声明: 本文由LeftNotEasy发布于https://www.wendangku.net/doc/2216788701.html,, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@https://www.wendangku.net/doc/2216788701.html, 前言: 上一次写了关于PCA与LDA的文章,PCA的实现一般有两种,一种是用特征值分解去实现的,一种是用奇异值分解去实现的。在上篇文章中便是基于特征值分解的一种解释。特征值和奇异值在大部分人的印象中,往往是停留在纯粹的数学计算中。而且线性代数或者矩阵论里面,也很少讲任何跟特征值与奇异值有关的应用背景。奇异值分解是一个有着很明显的物理意义的一种方法,它可以将一个比较复杂的矩阵用更小更简单的几个子矩阵的相乘来表示,这些小矩阵描述的是矩阵的重要的特性。就像是描述一个人一样,给别人描述说这个人长得浓眉大眼,方脸,络腮胡,而且带个黑框的眼镜,这样寥寥的几个特征,就让别人脑海里面就有一个较为清楚的认识,实际上,人脸上的特征是有着无数种的,之所以能这么描述,是因为人天生就有着非常好的抽取重要特征的能力,让机器学会抽取重要的特征,SVD是一个重要的方法。 在机器学习领域,有相当多的应用与奇异值都可以扯上关系,比如做feature reduction的PCA,做数据压缩(以图像压缩为代表)的算法,还有做搜索引擎语义层次检索的LSI(Latent Sem antic Indexing) 另外在这里抱怨一下,之前在百度里面搜索过SVD,出来的结果都是俄罗斯的一种狙击枪(AK47同时代的),是因为穿越火线这个游戏里面有一把狙击枪叫做SVD,而在Google上面搜索的时候,出来的都是奇异值分解(英文资料为主)。想玩玩战争游戏,玩玩COD不是非常好吗,玩山寨的CS有神马意思啊。国内的网页中的话语权也被这些没有太多营养的帖子所占据。真心希望国内的气氛能够更浓一点,搞游戏的人真正是喜欢制作游戏,搞Data Mining的人是真正喜欢挖数据的,都不是仅仅为了混口饭吃,这样谈超越别人才有意义,中文文章中,能踏踏实实谈谈技术的太少了,改变这个状况,从我自己做起吧。 前面说了这么多,本文主要关注奇异值的一些特性,另外还会稍稍提及奇异值的计算,不过本文不准备在如何计算奇异值上展开太多。另外,本文里面有部分不算太深的线性代数的知识,如果完全忘记了线性代数,看本文可能会有些困难。 一、奇异值与特征值基础知识: 特征值分解和奇异值分解在机器学习领域都是属于满地可见的方法。两者有着很紧密的关系,我在接下来会谈到,特征值分解和奇异值分解的目的都是一样,就是提取出一个矩阵最重要的特征。先谈谈特征值分解吧: 1)特征值: 如果说一个向量v是方阵A的特征向量,将一定可以表示成下面的形式:

矩阵的奇异值分解

§2 矩阵的奇异值分解 定义 设A 是秩为r 的m n ?复矩阵,T A A 的特征值为 1210r r n λλλ>λλ+≥≥≥=== . 则称i σ=(1,2,,)i n = 为A 的奇异值. 易见,零矩阵的奇异值都是零,矩阵A 的奇异值的个数等于A 的列数,A 的非零奇异值的个数等于其秩. 矩阵的奇异值具有如下性质: (1)A 为正规矩阵时,A 的奇异值是A 的特征值的模; (2)A 为半正定的Hermite 矩阵时,A 的奇异值是A 的特征值; (3)若存在酉矩阵,m m n n ??∈∈U V C C ,矩阵m n ?∈B C ,使=U A V B ,则称A 和B 酉等价.酉等价的矩阵A 和B 有相同的奇异值. 奇异值分解定理 设A 是秩为r (0)r >的m n ?复矩阵,则存 在m 阶酉矩阵U 与n 阶酉矩阵V ,使得 H ??==? ??? O U A V O O ∑?. ① 其中12diag(,,,)r σσσ= ∑,i σ(1,2,,) i r = 为矩阵A 的全部非零奇 异值. 证明 设Hermite 矩阵H A A 的n 个特征值按大小排列为 1210r r n λλλ>λλ+≥≥≥=== . 则存在n 阶酉矩阵V ,使得

12 H H ()n λλ???? ??= =?????? ??? ? O V A A V O O ∑. ② 将V 分块为 12()=V V V , 其中1V ,2V 分别是V 的前r 列与后n r -列. 并改写②式为 2 H ??=? ??? O A AV V O O ∑. 则有 H 2 H 112==A A V V A A V O , ∑. ③ 由③的第一式可得 H H 2 H 1111()()r ==V A A V A V A V E , 或者∑∑∑. 由③的第二式可得 H 222()() ==A V A V O A V O 或者. 令1 11-=U A V ∑ ,则H 11r =U U E ,即1U 的r 个列是两两正交的单位向 量.记作112(,,,)r =U u u u ,因此可将12,,,r u u u 扩充成m C 的标准正交基,记增添的向量为1,,r m +u u ,并构造矩阵21(,,)r m +=U u u ,则 12121(,)(,,,,,,)r r m +==U U U u u u u u 是m 阶酉矩阵,且有 H H 1121 r ==U U E U U O ,. 于是可得 H H H 1121H 2()()???? ===??? ??? ?? O U U AV U AV AV U O O O U ,,∑ ∑. 由①式可得 H H H H 111222r r r σσσ??==+++? ??? O A U V u v u v u v O O ∑ . ④

奇异值分解及其应用

PCA的实现一般有两种,一种是用特征值分解去实现的,一种是用奇异值分解去实现的。特征值和奇异值在大部分人的印象中,往往是停留在纯粹的数学计算中。而且线性代数或者矩阵论里面,也很少讲任何跟特征值与奇异值有关的应用背景。奇异值分解是一个有着很明显的物理意义的一种方法,它可以将一个比较复杂的矩阵用更小更简单的几个子矩阵的相乘来表示,这些小矩阵描述的是矩阵的重要的特性。就像是描述一个人一样,给别人描述说这个人长得浓眉大眼,方脸,络腮胡,而且带个黑框的眼镜,这样寥寥的几个特征,就让别人脑海里面就有一个较为清楚的认识,实际上,人脸上的特征是有着无数种的,之所以能这么描述,是因为人天生就有着非常好的抽取重要特征的能力,让机器学会抽取重要的特征,SVD是一个重要的方法。 在机器学习领域,有相当多的应用与奇异值都可以扯上关系,比如做feature reduction的PCA,做数据压缩(以图像压缩为代表)的算法,还有做搜索引擎语义层次检索的LSI(Latent Semantic Indexing) 奇异值与特征值基础知识 特征值分解和奇异值分解在机器学习领域都是属于满地可见的方法。两者有着很紧密的关系,我在接下来会谈到,特征值分解和奇异值分解的目的都是一样,就是提取出一个矩阵最重要的特征。先谈谈特征值分解吧: 特征值

如果说一个向量v是方阵A的特征向量,将一定可以表示成下面的形式: 这时候λ就被称为特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。特征值分解是将一个矩阵分解成下面的形式: 其中Q是这个矩阵A的特征向量组成的矩阵,Σ是一个对角阵,每一个对角线上的元素就是一个特征值。我这里引用了一些参考文献中的内容来说明一下。首先,要明确的是,一个矩阵其实就是一个线性变换,因为一个矩阵乘以一个向量后得到的向量,其实就相当于将这个向量进行了线性变换。比如说下面的一个矩阵: 它其实对应的线性变换是下面的形式: 因为这个矩阵M乘以一个向量(x,y)的结果是:

矩阵的奇异值分解及数值实现

矩阵的奇异值分解及数值实现 1.引言 矩阵的奇异值分解是数学研究中一种重要的方法, 除了其理论价值外,在工程领域中的应用也很普遍。例如: 在最优化问题、特征值问题、广义逆矩阵计算、高质量的统计计算、信号和图像处理、系统辨识、滤波器设计、谱估计、时间序列分析、控制理论和酉不变范数理论等领域, 奇异值分解都占有极其重要的作用同时它在求线性方程组的数组时也经常使用。它的核心在于在求出矩阵的有效秩的同时不改变矩阵的有关度量特性, 这对统计和检测数据的处理有很重要的作用。但矩阵奇异值分解的严重不足之处在于速度慢、计算量和存储量相当大, 并且到现在仍然没有计算矩阵的奇异值分解的快速算法。因此研究奇异值分解的快速算法,在理论上和工程实际中都有重要意义。 2.矩阵的奇异值分解 在数值分析中,矩阵的奇异值分解具有相当重要的作用, 因此在求矩阵的奇异值分解时, 必须掌握矩阵的奇异值分解的理论及相关概念。 2.1 矩阵的奇异值相关定义 定义2.1.1对于任一个mn阶复(实)矩阵A,设AH(AT)为A的共轭转置矩阵,则AHA的n个特征值的非负平方根称为A的奇异值,也就是A共有n个奇异值,且全部》0。AHA是一个半正定矩

阵,所以它的特征值》0。 设A?HYCmn(r>0),AHA的特征值 为?%d1>?%d夢…》?%dr>?%dr+1=- =?%dn=0则 称?%li=(i=1,2,…,n)为A的奇异值。 从定义可以看出以下性质: (1)mn 矩阵的奇异值的个数等于列数; (2)AHA和AAH的非零特征值相同,A的非零奇异值的个数等 于r?%ZnkA。 定义2。1。2设A为复数域C上的n阶矩阵,如果存在 数?%d?HY(和非零的n维向量x,使得Ax=?%dx就称?%d是矩阵A 的特征值,x是A的属于(或对应于)特征值?%d的特征向量。 定义2。1。3 设mn矩阵A?HYCmn,r?%ZnkA=r(r>0),则AHA 和AAH的特征值都是非负实数。 3.矩阵奇异值分解的性质 既然矩阵奇异值分解在计算中有如此重要的作用, 当然它就具有一些重要的性质, 并且这些性质的应用也相当广泛。 性质3.1 A的奇异值由A惟一确定,但酉矩阵U和V不惟一,故矩阵A的奇异值分解一般不惟一。 性质 3.2 奇异值分解可以计算出矩阵的条件数。 设A?HYCmn且存在可逆矩阵P使得 P- 1AP=di?%Zg(?%d1 …,?%dn),则称?UP-1?U|| PII 为矩阵A关于特征值问题的条件数, 记为k(P) 。

矩阵的奇异值分解在数字图像处理的应用

矩阵的奇异值分解 在数字图像处理的应用浅析 学院:··· 专业:·· 姓名:·· 学号:·· 2011年11月6日

目录 一、绪论 ................................................................................................................................. - 1 - 二、数字图像处理简介 ............................................................................................................. - 2 - 三、矩阵的奇异值分解原理 ..................................................................................................... - 4 - 3.1 矩阵的奇异值 ............................................................................................................. - 4 - 3.2 矩阵的奇异值分解(SVD) ....................................................................................... - 4 - 四、奇异值分解的图像性质 ..................................................................................................... - 5 - 五、图像的奇异值分解压缩方法 ............................................................................................. - 7 - 5.1 奇异值分解压缩原理分析 ......................................................................................... - 7 - 5.2 奇异值分解压缩应用过程 ......................................................................................... - 8 - 六、小结 ................................................................................................................................. - 9 -

PCA(协方差矩阵和奇异值分解两种方法求特征值特征向量)

PCA(协方差矩阵和奇异值分解两种方法求特征值特征向量)

PCA(协方差矩阵和奇异值分解两种方法求特征值特征向量) 2015-12-30 10:43 1157人阅读评论(0) 收藏举报分类: 模式识别(1) 1.问题描述 在许多领域的研究与应用中,往往需要对反映事物的多个变量进行大量的观测,收集大量数据以便进行分析寻找规律。多变量大样本无疑会为研究和应用提供了丰富的信息,但也在一定程度上增加了数据采集的工作量,更重要的是在大多数情况下,许多变量之间可能存在相关性,从而增加了问题分析的复杂性,同时对分析带来不便。如果分别对每个指标进行分析,分析往往是孤立的,而不是综合的。盲目减少指标会损失很多信息,容易产生错误的结论。 2.过程 主成分分析法是一种数据转换的技术,当我们对一个物体进行衡量时,我们将其特征用向量 (a1,a2,a3,...an)进行表示,每一维都有其对应的variance(表示在其均值附近离散的程度);其所有

维的variance之和,我们叫做总的variance;我们对物体进行衡量时,往往其特征值之间是correlated 的,比如我们测量飞行员时,有两个指标一个是飞行技术(x1),另一个是对飞行的喜好程度(x2),这两者之间是有关联的,即correlated的。我们进行PCA(主成分分析时),我们并没有改变维数,但是我们却做了如下变换,设新的特征为(x1,x2,x3...,xn); 其中 1)x1的variance占总的variance比重最大; 2)除去x1,x2的variance占剩下的variance比重最大; .... 依次类推; 最后,我们转换之后得到的(x1,x2,...xn)之间都是incorrelated,我们做PCA时,仅取(x1,x2,....xk),来表示我们测量的物体,其中,k要小于n。主成分的贡献率就是某主成分的方差在全部方差中的比值。这个值越大,表明该主成分综合X1,X2,…,XP信息的能力越强。如果前k个主成分的贡献率达到85%,

相关文档
相关文档 最新文档