《实现 矩阵对称化和反对称化》由会员分享,可在线阅读,更多相关《实现 矩阵对称化和反对称化(7页珍藏版)》请在金锄头文库上搜索。
1、C#实现将一个矩阵分解为对称矩阵与反称矩阵之和的方法2016/1/3转自:http:/ 字体:增加 减小 类型:转载 时间:2015-08-12 我要评论这篇文章主要介绍了 C#实现将一个矩阵分解为对称矩阵与反称矩阵之和的方法,较为详细的分析了矩阵分解运算的原理与 C#实现技巧,需要的朋友可以参考下本文实例讲述了 C#实现将一个矩阵分解为对称矩阵与反称矩阵之和的方法。分享给大家供大家参考。具体如下:1. 理论依据因为反对称矩阵满足 AT = -A设 A = (aij)则有 aii = -aii所以 aii = 0.即主对角线上元素全为 0.对任意 n 阶方阵 A,有 A=(A+T(A)/2+(
2、A-T(A)/2,其中 T(A)是 A 的转置,(A+T(A)/2 是一个对称矩阵,(A-T(A)/2 是一个反称矩阵。2.求出对称矩阵部分的函数/ / 把矩阵分解为对称矩阵与反称矩阵之和:对称矩阵/ / 矩阵/ private static double SymmetricPart(double matrix)/合法性校验:矩阵必须为方阵if ( MatrixCR(matrix)0 != MatrixCR(matrix)1)throw new Exception(matrix 不是一个方阵);/矩阵中没有元素的情况if (matrix.Length = 0)return new double
3、 ;/生成一个与 matrix 同型的空矩阵double result = new doublematrix.Length;for (int i = 0; i / 把矩阵分解为对称矩阵与反称矩阵之和:反称矩阵/ / 矩阵/ private static double SkewSymmetricPart(double matrix)/合法性校验:矩阵必须为方阵if (MatrixCR(matrix)0 != MatrixCR(matrix)1)throw new Exception(matrix 不是一个方阵);/矩阵中没有元素的情况if (matrix.Length = 0)return ne
4、w double ;/生成一个与 matrix 同型的空矩阵double result = new doublematrix.Length;for (int i = 0; i / 判断一个二维数组是否为矩阵/ / 二维数组/ true:是矩阵 false:不是矩阵private static bool isMatrix(double matrix)/空矩阵是矩阵 if (matrix.Length / 计算一个矩阵的行数和列数/ / 矩阵/ 数组:行数、列数private static int MatrixCR(double matrix)/接收到的参数不是矩阵则报异常if (!isMatri
5、x(matrix)throw new Exception(接收到的参数不是矩阵);/空矩阵行数列数都为 0if (!isMatrix(matrix) | matrix.Length = 0)return new int2 0, 0 ;return new int2 matrix.Length, matrix0.Length ;/ / 打印矩阵/ / 待打印矩阵private static void PrintMatrix(double matrix)for (int i = 0; i matrix.Length; i+) for (int j = 0; j matrixi.Length; j+
6、)Console.Write(matrixij + t);/注意不能写为:Console.Write(matrixij + t);Console.WriteLine();5.Main 函数代码及程序运行示例static void Main(string args)double matrix = new double new double 1, 2, 3 ,new double 4, 5, 6 ,new double 7, 8, 9 ;Console.WriteLine(原矩阵);PrintMatrix(matrix);Console.WriteLine(对称矩阵);PrintMatrix(Sy
7、mmetricPart(matrix);Console.WriteLine(反称矩阵);PrintMatrix(SkewSymmetricPart(matrix);Console.ReadLine();运行效果如下图所示:希望本文所述对大家的 C#程序设计有所帮助。为什么要研究对称矩阵与反对称矩阵的性质与应用?先说对称矩阵吧.可以从代数和几何两个方面上来讲.代数方面,首先每个对称矩阵 A 唯一对应于一个二次型 xAx.因此对称矩阵对二次型的研究有着重要的作用.二次型是什么呢 ?从代数角度上讲, 他是一个函数.是 n 唯向量 x 到数 的映射.因此研究对称矩阵有助于研究二次型,进而 ,在二次型的
8、概念下 .可以对矩阵进行合同分类(如同在线性变换的概念下对矩阵进行相似分类一样).我们以前学习过矩阵的相似,他把具有相同性质的矩阵划归到了一起,例如两个矩阵相似他们的行列式 迹和特征值都分别相等.合同也是为了将矩阵分类,比如正定 ,负定矩阵.我要说的是研究对称矩阵本身是为了在合同的代数概念下对矩阵进行一个分类,合同这种概念由于是从二次型那里来的所以只对对称矩阵产生作用.从几何的角度上讲,一个对称矩阵对应的二次型 ,与距离空间 (常叫做欧氏空间)联系在一起.我们高中知识知道如果选自然基底,那么向量 x 的长度就是他坐标的内积 xx.根据矩阵乘法的定义我们可以用二次型表示长度为 xEx 其中 E
9、是单位矩阵. 由于实际应用的需要或是理论研究的推广,我们往往不能选到自然基底 ,甚至是标准正交的基底 .那么对于一般的基底而言,这个向量 x 的坐标就不是 x 而是 y 了,他的长度就可以表示成 yAy 的形式, 用线性代数坐标变换的知识可以证明 A 是一个对称矩阵 .写了这么多,就是要说对称矩阵与欧式空间中长度的概念密不可分.继续深入欧式空间,我们知道 直角坐标系下的欧式空间距离的概念是|x-y|,也就是(x-y)(x-y) 这又与上边的长度一样,与对称矩阵密不可分了 .综上,对称矩阵是二次型和合同概念的基础 ,是欧式空间的需要 .只有在对称矩阵的基础上欧式空间才有意义.这就直接涉及到他的应
10、用了 .理论上,实变函数和勒贝格积分都要与长度这个概念产生关系那里边叫测度,就是与欧式空间有关系. 泛函分析要研究泛函的赋范空间也要与长度产生关系.因此由于欧式空间的应用广泛 ,导致了对称函数的研究的必要 .实际应用方面,对数值分析或是最优化理论那种给方程寻找近似解或是对空间中的离散点进行曲线拟合.都会导致基底不是自然基底 ,所以要研究欧式空间在一般基底下的表示 (就是二次型)所具有的性质,二次型建立在对称矩阵的基础之上的 ,所以对称矩阵的性质应用广泛 .反对称矩阵,是对二次型的又一个推广 ,我们把 xAy 这样的形势对应于二次型 xAx 叫做对称双线性型,叫双线性是因为他左右都乘了向量 ,叫
11、对称是因为 A 是对称矩阵.因此对这种情况进行推广当 A 反称的话,我们就知道 xAx=0(注意 A 反称就不是二次型了, 二次型要求 A 对称),那么 xAy 这种形式就叫做交错双线性型.反称矩阵最常用的性质就是 xAx=0.2016/2/28证明:实反对称矩阵的特征值只能是 0 或纯虚数设 A 反称,且 AX=X,(X!=0)则(X 的共轭转置)AX= (X 的共轭转置)X=|X|2两边取转置,并注意到 A 实反称,则有-(X 的共轭转置)AX= (X 的共轭转置)X= ( 的共轭)|X|2两式相加得:【+( 的共轭) 】*|X|2=0因为 X 是特征向量,!=0,所以:【+( 的共轭) 】=0证毕一个 n 阶对称矩阵 A 负定, 再叠加一对称矩阵 dA,使(A+dA)矩阵正好满足半正定,如何求出该矩阵 dA(理论上多少个解)