实对称矩阵的标准形(完整版)实用资料.doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《实对称矩阵的标准形(完整版)实用资料.doc》由会员分享,可在线阅读,更多相关《实对称矩阵的标准形(完整版)实用资料.doc(46页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实对称矩阵的标准形(完整版)实用资料(可以直接使用,可编辑 完整版实用资料,欢迎下载)6 实对称矩阵的标准形由第五章得到,任意一个对称矩阵都合同于一个对角矩阵,换句话说,都有一个可逆矩阵使成对角形.现在利用欧氏空间的理论,第五章中关于实对称矩阵的结果可以加强.这一节的主要结果是:对于任意一个级实对称矩阵,都存在一个级正交矩阵,使成对角形.引理1 设是实对称矩阵,则的特征值皆为实数.对应于实对称矩阵,在维欧氏空间上定义一个线性变换A如下:A. (1)显然A在标准正交基 (2)下的矩阵就是.引理2 设是实对称矩阵,A的定义如上,则对任意,有(A,)=(,A), (3)或定义12 欧氏空间中满足等式
2、(3)的线性变换称为对称变换.容易看出,对称变换在标准正交基下的矩阵是实对称矩阵.用对称变换来反映实对称矩阵,一些性质可以看得更清楚.引理3 设A是对称变换,是A-子空间,则也是A-子空间.引理4 设是实对称矩阵,则中属于的不同特征值的特征向量必正交.定理7 对于任意一个级实对称矩阵,都存在一个级正交矩阵,使成对角形.下面来看看在给定了一个实对称矩阵之后,按什么办法求正交矩阵使成对角形.在定理的证明中看到,矩阵按(1)式在中定义了一个线性变换.求正交矩阵的问题就相当于在中求一组由的特征向量构成的标准正交基.事实上,设是的一组标准正交基,它们都是的特征向量.显然,由到的过渡矩阵就是是一个正交矩阵
3、,而就是对角形.根据上面的讨论,正交矩阵的求法可以按以下步骤进行:1. 求出的特征值.设是的全部不同的特征值.2. 对于每个,解齐次方程组求出一个基础解系,这就是的特征子空间的一组基.由这组基出发,按定理2的方法求出的一组标准正交基.3. 因为两两不同,所以根据这一节引理4,向量组还是两两正交的.又根据定理7以及第七章5的讨论,它们的个数就等于空间的维数.因此,它们就构成的一组标准正交基,并且也都是的特征向量.这样,正交矩阵也就求出了.例 已知求一正交矩阵使成对角形.应该指出,在定理7中,对于正交矩阵我们还可以进一步要求事实上,如果求得的正交矩阵的行列式为-1,那么取那么是正交矩阵,而且显然.
4、如果线性替换的矩阵是正交的,那么它就称为正交的线性替换.正交的线性替换当然是非退化的.用二次型的语言,定理7可以叙述为:定理8 任意一个实二次型都可以经过正交的线性替换变成平方和,其中平方项的系数就是矩阵的特征多项式全部的根.最后指出,这一节的结果可以应用到几何上化简直角坐标系下二次曲线的方程,以及讨论二次曲线的分类.在直角坐标系下,二次曲线的一般方程是 (5)令则(5)可以写成 (6)经过转轴,坐标变换公式为或者其中为正交变换且,在新坐标系中,曲面的方程就是根据上面的结果,有行列式为1的正交矩阵使这就是说,可以作一个转轴,使曲面在新坐标系中的方程为其中这时,再按照是否为零的情况,作适当的移轴
5、与转轴就可以把曲面的方程化成标准方程.譬如说,当全不为零时,就作移轴于是曲面的方程化为其中 .矩阵求逆标准算法(VB)源码2006-11-29 13:49 类别:默认本程序依据矩阵初等变换的基本原理编写,算法较为繁琐,但易于理解适合VB初学者。本程序适合任何(n*n)的矩阵求逆,对于不可逆矩阵有提示信息,并结束程序本程序在XP,VB6.0下调试通过本程序由本人原创,请慎用。如有疑问,或调试有误,请联系本人QQ 30360126本程序可在VB6.0内任何地方用call jzqn(qa(),na()语句调用 其中qa()是输入的矩阵数组,调用此函数后 na()为返回的逆矩阵数组注意:调用本程序前不
6、要声明na()的维数,仅用dim na()即可。 请不要试图对一个病态矩阵求逆、否则计算结果未必是你想要的 病态矩阵是指行列式计算结果极其接近于零的矩阵Public Sub jzqn(qa(), na()Dim a()n = UBound(qa, 1)ReDim na(n, n)ReDim a(n, 2 * n)For i = 1 To nFor j = 1 To na(i, j) = qa(i, j)Next jNext iFor i = 1 To nFor j = n + 1 To 2 * nIf j - i = n Thena(i, j) = 1Elsea(i, j) = 0End If
7、Next jNext iFor i = 1 To nIf a(i, i) = 0 ThenFor q = i To nIf a(q, i) 0 ThenFor w = i To 2 * nzj = a(i, w)a(i, w) = a(q, w)a(q, w) = zjNext wExit ForEnd IfNext qIf q n Then MsgBox 此矩阵不可逆: Exit Sub End IfFor k = 2 * n To i Step -1a(i, k) = a(i, k) / a(i, i)Next kFor j = i + 1 To nIf a(j, i) 0 ThenFor
8、 k = 2 * n To i Step -1a(j, k) = a(j, k) / a(j, i) - a(i, k) Next kEnd IfNext jNext iFor i = n To 1 Step -1If a(i, i) = 0 ThenFor q = i - 1 To 1 Step -1If a(q, i) 0 ThenFor w = i To 2 * nzj = a(i, w)a(i, w) = a(q, w)a(q, w) = zjNext wExit ForEnd IfNext qEnd IfFor k = 2 * n To i Step -1a(i, k) = a(i,
9、 k) / a(i, i)Next kFor j = i - 1 To 1 Step -1If a(j, i) 0 Thenxxx = a(j, i)For k = 2 * n To 1 Step -1a(j, k) = a(j, k) / xxx - a(i, k)Next kEnd IfNext jNext iFor i = 1 To nFor j = 1 To nna(i, j) = a(i, j + n)Next jNext iEnd Sub调用示例:下面代码随机产生一个10*10的矩阵,并求逆,打印于窗体Private Sub Command1_Click()Dim a(10, 10
10、), b()ClsRandomizeFor i = 1 To 10For j = 1 To 10a(i, j) = Int(Rnd * 100)Print a(i, j);Next jPrintNext iPrintCall jzqn(a(), b()For i = 1 To 10For j = 1 To 10Print Format(b(i, j), 0.000),Next jPrintNext iEnd Sub矩阵运算是数值运算中经常碰到的,“砖头”抛出多天,尚未“引出玉来”,我自己再来个补充吧!矩阵求逆上面给出的程序,虽然可以使用,但远不完善,更不精炼。下面将其修改一下,例如:使用IIF
11、()函数简化判断分支语句,将“约化”过程合并,添加一个矩阵无逆的判断,。但还是属于小打小闹的修修补补,希望诸位能挑出程序中的问题、缺陷,诸位版主和大侠们能从赐以高水平的程序代码,不胜感谢! 修改后的矩阵求逆代码如下:源程序压缩文件如下:矩阵求逆程序代码Dim a() As SingleDim i%, j%, k%, am!, tt%, at!, bt!Private Sub Command1_Click()n = InputBox(请输入方阵的阶数N)ReDim a(n, 2 * n) As SingleFor i = 1 To nFor j = 1 To na(i, j) = InputBo
12、x(请输入a( & i & , & j & )的值) a(i, j + n) = IIf(i = j, 1, 0) 使用IIf( )函数,简化此判断结构 Next j, iPrint 原矩阵的增广矩阵元素For i = 1 To nFor j = 1 To 2 * nPrint a(i, j); ;Next jPrintNext i_ For k = 1 To n 换列主元运算,在主元列找出绝对值最大的值作主元 at = Abs(a(k, k)tt = kFor j = k + 1 To nbt = Abs(a(j, k)If at bt Thenat = bttt = jEnd IfNext
13、 jIf tt k ThenFor j = k To 2 * nam = a(k, j): a(k, j) = a(tt, j): a(tt, j) = amNext jEnd IfIf at 0.0001 Then Print 此矩阵不可逆逆矩阵计算-am = 1 / a(k, k)For j = k To 2 * na(k, j) = a(k, j) * amNext j_For i = 1 To nIf k i Thenam = a(i, k)For j = 1 To 2 * na(i, j) = a(i, j) - a(k, j) * amNext jEnd IfNext iNext
14、k-Print 所求逆矩阵For i = 1 To nFor j = n + 1 To 2 * nPrint a(i, j); ;Next jPrintNext iEnd Sub矩阵运算,是数值计算中经常碰到的。这里献上的小程序,只能是学习参考,对于矩阵的阶数很大的 实际使用和对于病态(条件数较大)矩阵,如何计算?特别是如何求逆?显然这里的程序力不从心,所以 敬请版主大侠们献出爱心!两矩阵的加、减,很简单,就是现应元素的加、减。条件是两矩阵行、列数都相等。两矩阵的相乘,分为左乘和右乘;条件是右矩阵的行数等于左矩阵的列数;乘法规则麻烦点,请参看 有关参考材料。矩阵求逆,是矩阵运算中比较麻烦的,也
15、是用出较多的。求助未得,只好自己来个粗糙的,这次给出 的程序是包括选主元的,一般满秩矩阵都可以求出其逆矩阵。但是效率有问题,对于病态矩阵求出的逆矩 阵精度欠佳,不一定满足需要。为了大家使用方便,将源程序传上。attachmentid=498attachmentid=499attachmentid=500attachmentid=501在网上收寻了行列式求值的,发现没有能用的,版主以前对最小二乘法多次曲线拟合算法解说里有行列试求值的程序,我调试下了,没能成功,不知道到是不是那里出错了?现在献上一个比较精确的矩阵求逆算法,希望大家能研究出一种行列式求值的的程序!Sub JSJZNZA(WS, DA
16、)Dim DNZ() As DoubleYS = WS * (WS + 1) / 2ReDim DNZ(YS)For i = 1 To WSDI = (i - 1) * (WS - i / 2)For j = i To WSk = DI + jDNZ(k) = DA(i, j)Next jNext iFor i = 1 To WSDI = (i - 1) * (WS - i / 2)For j = i To WSs = DNZ(DI + j)If i = 1 ThenGoTo 156 (156)End IfFor k = 1 To i - 1DK = (k - 1) * (WS - k / 2
17、)s = s - DNZ(DK + i) * DNZ(DK + j) / DNZ(DK + k) Next k156: If j = i Then (156)DNZ(DI + j) = 1 / (s + 0.0000001)GoTo 160 ( 160 )End IfDNZ(DI + j) = s * DNZ(DI + i)160: Next j (160)Next iFor i = 1 To WS - 1DI = (i - 1) * (WS - i / 2)For j = i + 1 To WSs = (-1) * DNZ(DI + j)If (i + 1) (j - 1) ThenGoTo
18、 168 ( 168 )End IfFor k = i + 1 To j - 1DK = (k - 1) * (WS - k / 2)s = s - DNZ(DI + k) * DNZ(DK + j)Next k168: DNZ(DI + j) = s ( 168 )Next jNext iFor i = 1 To WS - 1DI = (i - 1) * (WS - i / 2)For j = i To WSDJ = (j - 1) * (WS - j / 2)If j = i Thens = DNZ(DI + j)GoTo 174 (174)End Ifs = DNZ(DI + j) *
19、DNZ(DJ + j)174: If j = WS Then (174)GoTo 178 (178)End IfFor k = j + 1 To WSDK = (k - 1) * (WS - k / 2)s = s + DNZ(DI + k) * DNZ(DJ + k) * DNZ(DK + k)Next k178: DNZ(DI + j) = s (178)Next jNext iFor i = 1 To WSDI = (i - 1) * (WS - i / 2)For j = 1 To WSDJ = (j - 1) * (WS - j / 2)Let K1 = DI + jLet K2 =
20、 DJ + iIf j = i ThenDA(i, j) = DNZ(K1)End IfNext jNext iReDim DNZ(1)End Sub最近想写一个求矩阵逆阵的函数,上网一搜,有一个叫作高斯约旦法求矩阵的方法,用C写的,我没看明白,网上大部分都是抄来抄去,全都一个样,所以我按照这个算法的思想,用VB写了一个这样的函数。代码如下:Option Explicit先写一个函数用于交换两个数的函数Private Sub swap(byref a As Double,byref b As Double)Dim c As Doublec = aa = bb = cEnd Sub下面是求矩阵逆
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 对称 矩阵 标准 完整版 实用 资料
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内