C实现矩阵行列式计算

博主分享了自己为解决三阶行列式计算错误而编写C程序的过程。程序基于同济大学《工程数学线性代数》中的行列式定义,通过读取矩阵数据,计算全排列,再根据排列的逆序数决定乘以-1的符号。虽然代码大部分用于处理IO,但可能存在未发现的bug,博主提醒在不同操作系统中输入EOF的方式不同,可能会影响程序运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    开始重新学习数学了,然而路途总是不那么平坦,尽管是先挑选的最简单的线性代数,然而一开始就进展不顺

    当然我承认数学一直都是一个难以言说的伤痛,但是像什么三阶行列式计算还是老是算错我就有点难以忍受了

    于是编写一个程序解决行列式的计算问题,记得好像当初学线性代数的时候也想过编程实现,最终好像因为水平问题没能成功?哎,反正也是很早之前的事情了。

    废话少说,先介绍一下大体的思路吧。核心的计算方法采用的是同济大学数学系 工程数学线性代数第六版中的行列式定义,数表中项的全排列的冠以排列逆序确定的符号位的求和(描述不清,详情参考标准表述),我记得我们学校的教材好像并没有这些内容(lll¬ω¬)。于是乎实现方式完全依照定义的方法,在获取到一个矩阵之后,计算出其全排列,然后按排列值取对应项的乘积并计算排列的奇偶逆序确定是否需要乘以-1.

    完整代码直接粘贴如下,主要流程就是从stdin读取矩阵数据,计算出行列值,然后以行列值计算全排列,全排列的算法是很久之前写的了,相关细节都忘了,直接改了一下就拿来用了。得到全排列值后就按照定义计算即可。其中主要涉及了几个简单的数学计算比如al_factorial计算阶乘,用来计算全排列需要的存储空间,al_reverseidx计算逆序,直接按照定义来的,感觉可以有更高效的算法,al_fullarray计算全排列。大部分代码其实都是在处理IO,理论上能够处理各种不太完美的输入,但是具体是否还有bug就不得而知了,可能还是存在问题的,不过本来也是写着玩的,也不想过多纠缠于此了。

 

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct matrix
{
	int 	c;
	int 	r;
	int	*vals;
};

#define MATRIX_INIT (struct ma
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值