目前位置: VCer资源中心 >>> VCer代码 >>> C++/MFC基础

[本帖已阅读5727次 分值80 回复6次] 张贴资源 发回信箱 控制面板

求矩阵行列式算法

提供者:kalven 张贴时间:2004-04-22 16:11:41.0 出处:vcer.net 作者:不祥

求矩阵行列式算法(2004-04-22 16:11:41.0)


kalven


 
级别: VCer小兵
头衔: VCer会员

经验: 102
作品: 5
分会: 西南分会
注册: 2004-04-20 11:33:44.0
登录: 2004-09-11 09:11:19.0

我写了个求矩阵行列式的函数,如下:

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,或者请教更好的计算方法,谢谢

注:转载文章需注明来源:VCer.net 文章地址:http://vcer.net/1076417661395.html

  如果你觉得VCer.net不错,而且你愿意为VCer.net捐赠一元钱,那么点击后面的捐赠按钮吧:) vcer.net捐赠

[回复该贴] [加入个人书签]
[投票结果]

A: 评分 10 0% (0 票)
B: 评分 5 0% (0 票)
C: 评分 0 0% (0 票)
D: 评分 -5 0% (0 票)
E: 评分 -10 0% (0 票)

 


re:求矩阵行列式算法
你的C++没学好啊

402027721 于 2006-03-28 11:31:17.0 编辑 [回复该贴]

re:求矩阵行列式算法
好像subMat函数没有贴出来。。。

bluejoe 于 2006-02-19 10:04:36.0 编辑 [回复该贴]

re:求矩阵行列式算法
楼主能不能说说,subMat(i,submat)的作用啊?我现在急需求行列式的算法啊!

dwin 于 2005-04-23 19:40:44.0 编辑 [回复该贴]

re:求矩阵行列式算法
this->SubMat(i,subMat); 这句有什么用的啊?不太清楚你的Matrix类里面的成员函数的声明

dwin 于 2005-04-22 13:29:56.0 编辑 [回复该贴]

re:求矩阵行列式算法
这个方法效率比较低的,用了不少递归的。建议你用QR分解来计算行列式.

kingwind 于 2004-05-08 20:40:48.0 编辑 [回复该贴]