康建
求行列式的三种算法及C程序
2021-1-23 22:35
阅读:5742

“你学过《线性代数》和《C语言》吗?”, “学过,……我便考你一考。计算行列式用C语言怎样写?”,,,“不能写罢?……我教给你,记着!这些算法应该记着。将来做项目当老板的时候要用”,,,“对呀对呀!行列式的算法有三样写法,你知道么?”


在前面的博文中已提到计算行列式的两种算法,即:

一、按第一行展开的递归方法,链接如下:

http://blog.sciencenet.cn/blog-797552-1223086.html

 

二、利用初等行变换,化成上三角矩阵求对角线元素乘积的方法,链接如下:

http://blog.sciencenet.cn/blog-797552-1227970.html

 

三、一般教材还给出一种按完全展开式计算的方法,即,每行取一元素按元素列下标的“全排列”和“逆序数”奇偶性构成n个元素的乘积,对这n!项求和。


这种方法也是通过递归的方式,生成1到n个数的全排列。每生成一个排列存放到数组P中,用A[i*(m+1)+P[i]-1]取对应元素。编写这个算法,琢磨了很久,主要是求全排列不好处理,最后参考了的《算法竞赛》(罗勇军、郭卫斌著)书中递归打印全排列的算法思想才调试通。

  主函数及相关测试数据和输出矩阵函数如下:


行列式1.png

运行结果:

行列式3.png


本文第一段是写完博文后又加的,改自<孔乙己>,写完程序想教给学生,经常有孔乙己的这种感觉,穷困、迂腐,好为人师,却常遇这种尴尬。<孔乙己>原文为:

你读过书么?我略略点一点头。他说,读过书,……我便考你一考。茴香豆的茴字,怎样写的?我想,讨饭一样的人,也配考我么?便回过脸去,不再理会。孔乙己等了许久,很恳切的说道,不能写罢?……我教给你,记着!这些字应该记着。将来做掌柜的时候,写账要用。我暗想我和掌柜的等级还很远呢,而且我们掌柜也从不将茴香豆上账;又好笑,又不耐烦,懒懒的答他道,谁要你教,不是草头底下一个来回的回字么?孔乙己显出极高兴的样子,将两个指头的长指甲敲着柜台,点头说,对呀对呀!……回字有四样写法,你知道么?我愈不耐烦了,努着嘴走远。孔乙己刚用指甲蘸了酒,想在柜上写字,见我毫不热心,便又叹一口气,显出极惋惜的样子。


   

转载本文请联系原作者获取授权,同时请注明本文来自康建科学网博客。

链接地址:https://wap.sciencenet.cn/blog-797552-1268626.html?mobile=1

收藏

分享到:

当前推荐数:1
推荐人:
推荐到博客首页
网友评论0 条评论
确定删除指定的回复吗?
确定删除本博文吗?