我一直在研究这个矩阵类。我已经完成了通过高斯消元计算行列式的函数,并将三角矩阵存储在我的类的私有成员中。
然后我添加了一个解析函数,它将矢量b作为参数并解决以下问题:
Mat<M,N> * X<M,1> = b<M,1>
我使用了后向替换,我无法弄清楚为什么我没有得到正确的结果。这是我的代码:
float determinant()
{
if(M != N)
{
std::cerr <<" Matrix is not square!!!" << std::endl;
return std::numeric_limits<float>::infinity();
}
else
{
float c;
std::vector<float> temp;
temp = this->mat;
for(int j=0; j<M; j++)
{
for(int i=0; i<N; i++)
{
if(i>j)
{
c=this->at(i,j)/this->at(j,j);
for(int k=0; k<M+1; k++)
{
at(i,k) = at(i,k) - c* at(j,k);
}
}
}
}
c=1;
for(int i=0; i<M;i++)
c *= at(i,i);
m_tri = this->mat;
this->mat = temp;
return c;
}
}
Mat<M,1> resolve (Mat<M,1> b)
{
this->determinant();
Mat<M,1> sol;
sol.resize(M);
sol(M-1,0) = b(M-1,0)/m_tri[(M-1)*M+(M-1)];
for (int i=(M-2); i>=0; i--)
{
sol(i,0)= b(i,0);
for (int j=i+1; j<M; j++)
{
sol(i,0) -= m_tri[(j)*M + i]*sol(j,0);
}
sol(i,0) = sol(i,0) / m_tri[(i)*M + i];
}
return sol;
}