C语言计算行列式以及代数余子式的函数

C语言计算行列式以及代数余子式的函数

#include<stdio.h>
#define N 50
double algebraic_cofactor(double P[N][N],int m,int a,int b);
double determinant(double P[N][N],int m);

void main()
{
	double P[N][N];//待求矩阵
	int m,a,b;
}

//求代数余子式;m为阶数;a、b分别为元素所在的行与列
double algebraic_cofactor(double P[N][N],int m,int a,int b)
{	
	int i,j,x,z;
	double sum;
	if(m<2) printf("输入错误,矩阵小于2阶");
	else if(m==2) sum=P[m-a][m-b];
	else
	{
		double Q[N][N]={0};
		x=0;
		for(i=0;i<m;i++)//创造一个m-1阶的矩阵(除去所求元素所在的行和列)
		{
			if(i==a-1) continue;
			z=0;
			for(j=0;j<m;j++)
			{
				if(j==b-1) continue;
				Q[x][z]=P[i][j];
				z++;
			}
			x++;
		}
		sum=determinant(Q,m-1);//求行列式
	}
	if((a+b)%2!=0) sum*=-1;
	return sum;
}

//求行列式;m为阶数
double determinant(double P[N][N],int m)
{
	int k;
	double sum=0;
	for(k=0;k<m;k++)
	{
		if(P[0][k]==0) continue;
		else sum+=algebraic_cofactor(P,m,1,k+1)*P[0][k];//求代数余子式
	}
	return sum;
}
主要思路是通过代数余子式函数与行列式函数相互调用求解,由此可拓展出矩阵求逆的函数:
void main()
{
	double P[N][N];//待求矩阵
	double Q[N][N];//待求逆矩阵
	int m,a,b;
}

//求逆矩阵;m为阶数
void inverse_matrix(double P[N][N],double Q[N][N],int m)
{
	int i,j,k,l;
	double A,B;
	A=determinant(P,m);
	if(A!=0) 
	{
		for(i=0;i<m;i++)
			for(j=0;j<m;j++)
				Q[i][j]=algebraic_cofactor(P,m,i+1,j+1);//计算伴随矩阵
		B=1/A;
		matrix_X_num(Q,B,m,m);
		transpose(Q);//矩阵转置
	}
	else printf("错误:矩阵不可逆");
}

//矩阵转置
void transpose(double P[N][N])
{
	double T[N][N];
	int i,j;
	for(i=0;i<N;i++)
		for(j=0;j<N;j++)
			T[j][i]=B[i][j];
	for(i=0;i<N;i++)
		for(j=0;j<N;j++)
			B[i][j]=T[i][j];
}
  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值