| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3248 人关注过本帖
标题:[求助]如何用c语言v编写矩阵转换逆矩阵
只看楼主 加入收藏
ccapp
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2009-10-23
结帖率:33.33%
收藏
已结贴  问题点数:15 回复次数:3 
[求助]如何用c语言v编写矩阵转换逆矩阵
好久没接触矩阵了    现在自学c  做到一个题目:编写一个程序来转换一个n*n矩阵成它的逆矩阵  看了一下这方面的书 不过写出来的程序一大堆错误    哪位帮忙写个程序让我可以参考学习   我记得是把原矩阵与单位矩阵并列 一个在左一个在右 然后进行行运算或者列运算  最后会得到一个矩阵是单位矩阵在左 逆矩阵在右  题目的要求是 要使用 列运算  每次得到一个领先1的时候都把这时候的矩阵和单位矩阵的变化显示出来  最后再显示出得到的逆矩阵
多谢了!!!!!!!
搜索更多相关主题的帖子: 编写 矩阵 
2009-11-07 04:20
jimmywood
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:30
专家分:109
注 册:2009-8-10
收藏
得分:15 
ps:  不是我写的  只是之前收藏的  呵呵

/*矩阵求逆计算函数*/
/************************************************************************/
/* 输入:矩阵C,方阵维数n;
   输出:矩阵逆IC   
Example: C[4][4];
          InvMtrx( C[0], IC[0], 4);

  IC[4][4]即为C[4][4]逆。

                                                                 */
/************************************************************************/
int InvMtrx( double *C, double *IC, int n )
{
    int i, j, k, l;
   
    /* 单位阵*/
    for (i=0; i<n; i++)
    {
        for (j=0; j<n; j++)
        {   
            *(IC+i*n+j) = 0.0;
        }
        *(IC+i*n+i) = 1.0;
    }
   
    /* 化上三角阵*/
    for (j=0; j<n; j++)
    {   
        if(fabs(*(C+j*n+j))>1e-15) /* C[j][j]不等于0*/
        {
            /* IC阵的第j行除以C[j][j]*/
            for(k=0; k<n; k++)
            {
                *(IC+j*n+k) /= *(C+j*n+j);
            }
            /* C阵的第j行除以C[j][j]*/
            for(k=n-1; k>=j; k--)
            {
                *(C+j*n+k) /= *(C+j*n+j);
            }
            
            for(i=j+1; i<n; i++)
            {
                /* IC阵的第i行 - C[i][j]*IC阵的第j行*/
                for(k=0; k<n; k++)
                {
                    *(IC+i*n+k) -= *(C+i*n+j) * *(IC+j*n+k);
                }
                /* C阵的第i行 - C[i][j]*C阵的第j行*/
                for (k=n-1; k>=j; k--)
                {
                    *(C+i*n+k) -= *(C+i*n+j) * *(C+j*n+k);
                }
            }
        }
        else if (j<n-1)
        {
            
            for(l=j+1; l<n; l++)
            {
                /* 若C阵第j行后的C[l][j]不等于0,第j行加上第l行*/
                if (fabs(*(C+l*n+j)) > 1e-15)
                {
                    for (k=0; k<n; k++)
                    {
                        *(IC+j*n+k) += *(IC+l*n+k);
                    }
                    for (k=n-1; k>=j; k--)
                    {
                        *(C+j*n+k) += *(C+l*n+k);
                    }
                    /* IC阵的第j行除以C[j][j]*/
                    for (k=0; k<n; k++)
                    {
                        *(IC+j*n+k) /= *(C+j*n+j);
                    }
                    /* C阵的第j行除以C[j][j]*/
                    for (k=n-1; k>=j; k--)
                    {
                        *(C+j*n+k) /= *(C+j*n+j);
                    }
                    /* 第i行 - C[i][j]*第j行*/
                    for (i=j+1; i<n; i++)
                    {
                        for (k=0; k<n; k++)
                        {
                            *(IC+i*n+k) -= *(C+i*n+j) * *(IC+j*n+k);
                        }
                        for (k=n-1; k>=j; k--)
                        {
                            *(C+i*n+k) -= *(C+i*n+j) * *(C+j*n+k);
                        }
                    }
                    break;
                }
            }
            
            if (l == n)  /* C[l][j] 全等于0*/
            {
                return (-1);   /*  矩阵的行列式为零,不可求逆*/
            }
        }
        else  /* C[n][n]等于0*/
        {
            return (-1);    /*  矩阵的行列式为零,不可求逆*/
        }
    }
    /* 化成单位阵*/
    for(j=n-1; j>=1; j--)
    {
        for(i=j-1; i>=0; i--)
        {
            for(k=0; k<n; k++)
            {
                *(IC+i*n+k) -= *(C+i*n+j) * *(IC+j*n+k);
            }
            *(C+i*n+j) = 0;
        }
    }
   
    return (1);
}

2009-11-07 09:18
ccapp
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2009-10-23
收藏
得分:0 
要怎样编写才能在每次得到一个领先1的时候 显示出这时候的矩阵和单位矩阵呢
2009-11-07 15:21
ccapp
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2009-10-23
收藏
得分:0 
没有人比较了解这方面吗?
2009-11-08 06:25
快速回复:[求助]如何用c语言v编写矩阵转换逆矩阵
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016558 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved