我写了个求矩阵行列式的函数,如下:
Determinant(double &det)
{
//calculate the determinant of this matrix
if(m_nCols != m_nRows) Error(CString("it is'nt a square matrix"));//can called with this
if(m_nCols == 1) {det = m_pData[0]; return;}
else if(m_nCols == 2) {det=(m_pData[0]*m_pData[3] - m_pData[1]*m_pData[2]);return;}
int sign = 1;
det = 0.0;
int i;
double temp;
Matrix<T> subMat;
subMat.m_nCols = m_nCols-1;
subMat.m_nRows = m_nRows-1;
subMat.m_pData = new T[subMat.m_nCols*subMat.m_nRows];
for(i=0; i<m_nCols-2; i++)
{
this->SubMat(i,subMat);
subMat.Determinant(temp);
det += sign*m_pData[i] * temp;
sign = -1*sign;
}
return;
}
我测试了觉得没有错误,但是这个求发好像很占CPU啊,当矩阵维数大于20时,我的机子就不动了,查看windows管理器,发现我的应用程序没有反映。
大虾帮忙看看,是不是我的算法哪里有bug,或者请教更好的计算方法,谢谢