- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
有理二次型化简算法和程序设计
有理二次型化简算法和程序设计 摘 要:二次型的化解过程是麻烦的,根据实对称方阵合同变换理论,设计出化简有理系数二次型的算法,编写出相应的C语言程序,给出了计算实例。
关键词:有理系数二次型;化简;算法;程序
二次型的化简在数学及物理研究中有重要的应用,然而人工实现却非常困难,并且已有的数学软件也没有直接的功能,因此我们设计了有理系数二次型化简的算法及程序。
关于二次型的理论请参见高等代数或线性代数书籍(如参考文献[1]),本文不多累赘.
有理数域是常用的数域,因此讨论有理数域上的二次型非常必要。我们用 表示有理数域,并且为了说话方便,我们称有理数域上的二次型为有理二次型、理数域上的矩阵为有理矩阵。根据二次型的化简理论可知,任何有理二次型都经过非奇异线性变换化简为形如:
d1x12+d2x22+...+dnxn2(di∈Q)
的标准形,所以我们重点研究了将有理二次型化简为有理标准型的算法及程序。
1. 算法设计
首先,根据二次型的理论,将有理二次型 q(x1,x2,...,xn)化简为有理标准型的关键是将其矩阵 A通过矩阵的合同变换变为对角阵D ,而文献[1]的结论告诉我们,将 A合同变换变为对角阵 D的方法是:在对A 施行一对列初等变换和行初等变换的同时,仅对 n阶单位矩阵I 施行同样的列初等变换,那么当A 化为对角矩阵 B时,I 就化为P[1]352 。其次,因为计算机语言系统的四则运算建立在实数域上,所以要精确进行有理二次型的化简,就必须设计分数运算子程序。因此我们有:
1.1 有理二次型的化简算法
S1. 输入有理系数二次型 q(x1,x2,...,xn)的变量个数 n及其系数。
S2. 根据二次型矩阵的对称性,将 q(x1,x2,...,xn)的系数转换为对称矩阵A ,设 A=(aij)。
S3. 生成n 阶单位矩阵I 。
S4. 对矩阵施行合同变换,同时对矩阵I 施行与 A相同的列初等变换,具体做法如下:
S41. 依此判断aii 是否为零( i=1,2,...,n)?若是则转S42;若否则转S44。
S42. 判断 ai,i+1、 ai,i+2、…、 ai,n是否全为0,若是则i++ ,转S41;若否则转S43.
S43. 设aij≠0 ,则将A 的第 j列加到第i 列,且将 A的第 j行加到第 i行,同时将单位矩阵I 的第j 列也加到第 i列,转S44.
S44. 将 A的第 i列的-aij/aii 倍加于其第j ( j=i+1,2,...,n)列,使得ai,i+1 、ai,i+2 、…、 ain全化为零,且将 A的第 i行的-aij/aii 倍加于其第j (j=i+1,2,...,n )行,使得aj,j+1 、aj,j+2 、…、 ajn全化为零,同时也将单位阵 I的第i 列的 -aij/aii 倍加于其第j ( j=i+1,2,...,n )列.
S45. i++ ,判断i 是否大于n .若是则转S5;否则转S41.
S5. 输出变换后的 A,亦即是输出所求的对角形矩阵D ;输出I 变换后的结果,亦即是输出合同变换矩阵P ;
S6. 据 A输出 q(x1,x2,...,xn)的标准型q(y1,y2,...,yn) .
1.2 基于分数运算的关键子算法
分数运算需要求最大公因数及约分算法,但其容易设计故不累赘。因为算法中的关键子算法是S43与S44,所以下面重点描述S43与S44基于分数运算的实现。
①、S43的实现:基于分数运算的行、列相加合同变换算法
S43是行、列相加的合同变换,若用a[i][j] 、 b[i][j]分别存放矩阵 之元素的分子和分母,那么根据分数加法的运算规则,设计实现矩阵行、列相加合同变换的算法如下:
for i=1 to n △循环两分数相加
for k=i to n do
{ a[k][i]=a[k][i]*b[k][j]+a[k][j]*b[k][i]; △第j 列加到第i 列,相加后的分子
b[k][i]=b[k][i]*b[k][j]; △相加后的分母
a[i][k]=a[i][k]*b[j][k]+a[j][k]*b[i][k]; △第j 行加到第 i行,相加后的分子
b[i][k]=b[i][k]*b[j][k]; △相加后的分母
huajian(a[k][i],b[k][i]); △调用约分函数进行简化
huajian(a[i][k],b[i][k]); △调用约分函数进行简化
}②、 S44的实现:基于分数运算的行、列乘以某数后再相加的合同变换算法
S44是将行、列
文档评论(0)