线性系统求解器c ++

时间:2015-11-03 22:18:43

标签: c++ matrix solver

我一直在研究这个矩阵类。我已经完成了通过高斯消元计算行列式的函数,并将三角矩阵存储在我的类的私有成员中。

然后我添加了一个解析函数,它将矢量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;
}

0 个答案:

没有答案