本文整理汇总了C++中DblMatrix::GetDeterminantNxN方法的典型用法代码示例。如果您正苦于以下问题:C++ DblMatrix::GetDeterminantNxN方法的具体用法?C++ DblMatrix::GetDeterminantNxN怎么用?C++ DblMatrix::GetDeterminantNxN使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DblMatrix
的用法示例。
在下文中一共展示了DblMatrix::GetDeterminantNxN方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetHelpDeterminant
// sub-determinant
double DblMatrix::GetHelpDeterminant(int k)
{
int h=GetHeight();
assert(h+1==GetWidth());
DblMatrix HelpDet;
// replace the
for(int i=0; i<h; i++)
{
HelpDet.push_back(DblVector());
for(int j=0; j<h; j++)
{
if(j==k)
HelpDet[i].push_back((*this)[i][h]);
else
HelpDet[i].push_back((*this)[i][j]);
}
}
return HelpDet.GetDeterminantNxN();
}
示例2: SolveLinearCramer
// solve linear NxN equation system (cramer)
int DblMatrix::SolveLinearCramer(DblVector& Solution)
{
// get main determinant
DblMatrix DetMat;
double Det=0.0;
int w = GetWidth();
int h = GetHeight();
for(int i=0; i<h; i++)
{
DetMat.push_back(DblVector());
for(int j=0; j<w-1; j++)
DetMat[i].push_back((*this)[i][j]);
}
Det = DetMat.GetDeterminantNxN();
if(fabs(Det)<THE_EPS_DEF) return 0;
// get solutions
Solution.clear();
for(int k=0; k<h; k++)
Solution.push_back(this->GetHelpDeterminant(k)/Det);
return 1;
}
示例3: GetDeterminantNxN
double DblMatrix::GetDeterminantNxN()
{
int w=GetWidth();
assert(w=GetHeight());
if(w==1) return (*this)[0][0];
if(w==2) return GetDeterminant2x2();
if(w==3) return GetDeterminant3x3();
double Det=0.0;
// laplace's method (recursion)
double s=1.0;
if(w%2==1) s=-1.0;
for(int i=0; i<w; i++)
{
DblMatrix SubDet;
SubDet.assign(w-1, DblVector());
for(int j=1; j<w; j++)
{
for(int k=0; k<w; k++)
{
if(k==i)
{
continue;
}
else
{
SubDet[j-1].push_back((*this)[j][k]);
}
}
}
double v = (*this)[0][i];
double a = s * v * SubDet.GetDeterminantNxN();
//std::cout << "s " << s << std::endl;
Det += a;
s*=-1.0;
}
return Det;
}