复数矩阵计算行列式

项目上需要对复矩阵的行列式计算,根据计算一般矩阵行列式的代码改成了复矩阵行列式计算。
#include
#include
#include
#include
#include
#include 
using namespace std;

#define ROW 25
#define COL 25
typedef struct  
{
	float Real;
	float Image;
}Complex;


Complex add(Complex a,Complex b)
{
	Complex c;
	c.Real=a.Real+b.Real;
	c.Image=a.Image+b.Image;
	return c;
}
Complex sub(Complex a,Complex b)
{
	Complex c;
	c.Real=a.Real-b.Real;
	c.Image=a.Image-b.Image;
	return c;
}
Complex Mul(Complex a,Complex b)
{
	Complex c;
	c.Real=a.Real*b.Real-a.Image*b.Image;
	c.Image=a.Real*b.Image+b.Real*a.Image;
	return c;
}
Complex Div(Complex a,Complex b)
{
	Complex c;
	c.Real=(a.Real*b.Real+a.Image*b.Image)/(b.Real*b.Real+b.Image*b.Image);
	c.Image=(a.Image*b.Real-a.Real*b.Image)/(b.Real*b.Real+b.Image*b.Image);
	return c;
}
Complex matrix_det(const Complex *mat, int n)
{
    int i,j,k,is,js,l,v;
	Complex det;
	float flag,pivot,tmp;
    Complex *cpmat;
	Complex tempValue;
    if(mat == NULL)                            /* 检查输入的指针是否为空*/
    {
      printf("matrix pointer is NULL.\n");
    }
    cpmat = (Complex*)malloc(n*n*sizeof(Complex));  /* 将输入矩阵的内容拷贝一份,以免破坏*/
    for(i=0; i pivot){
					pivot = tmp;
					is = i;
					js = j;
				}
			}
		}
		if(pivot < 1e-5){                          /* 如果找到的主元小于eps,则认为是0。*/
			det.Real = 0.0;                             /*此时行列式值也是0。*/
			det.Image=0.0;
			return(det);
		} 
		if(is != k){                              /* 判断是否需要行交换*/
			flag = -flag;                          /* 行交换一次,行列式值变号*/
			for(j=k; j
计算结果与matlab计算对比,没有问题

你可能感兴趣的:(C/C++)