| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2641 人关注过本帖
标题:求助,c++矩阵求逆
只看楼主 加入收藏
wenzi278
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-5-9
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
求助,c++矩阵求逆
具体情况是这样的,假如我已经定义了一个6行六列的矩阵A[6][6]={里面元素省略}
如何求逆(不用输出,保存在定义的矩阵invA[6][6]中就可以了)
搜索更多相关主题的帖子: 矩阵 
2010-05-09 15:53
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:10 
回复 楼主 wenzi278
给你提供一个代码(不是本人写的):

#include <stdlib.h>
  #include <math.h>
  #include <stdio.h>
  int brinv(double a[], int n)
   { int *is,*js,i,j,k,l,u,v;
    double d,p;
    is=(int*)malloc(n*sizeof(int));
    js=(int*)malloc(n*sizeof(int));
    for (k=0; k<=n-1; k++)
      { d=0.0;
        for (i=k; i<=n-1; i++)
        for (j=k; j<=n-1; j++)
          { l=i*n+j; p=fabs(a[l]);
            if (p>d) { d=p; is[k]=i; js[k]=j;}
          }
        if (d+1.0==1.0)
          { free(is); free(js); printf("err**not inv\n");
            return(0);
          }
        if (is[k]!=k)
          for (j=0; j<=n-1; j++)
            { u=k*n+j; v=is[k]*n+j;
              p=a[u]; a[u]=a[v]; a[v]=p;
            }
        if (js[k]!=k)
          for (i=0; i<=n-1; i++)
            { u=i*n+k; v=i*n+js[k];
              p=a[u]; a[u]=a[v]; a[v]=p;
            }
        l=k*n+k;
        a[l]=1.0/a[l];
        for (j=0; j<=n-1; j++)
          if (j!=k)
            { u=k*n+j; a[u]=a[u]*a[l];}
        for (i=0; i<=n-1; i++)
          if (i!=k)
            for (j=0; j<=n-1; j++)
              if (j!=k)
                { u=i*n+j;
                  a[u]=a[u]-a[i*n+k]*a[k*n+j];
                }
        for (i=0; i<=n-1; i++)
          if (i!=k)
            { u=i*n+k; a[u]=-a[u]*a[l];}
      }
    for (k=n-1; k>=0; k--)
      { if (js[k]!=k)
          for (j=0; j<=n-1; j++)
            { u=k*n+j; v=js[k]*n+j;
              p=a[u]; a[u]=a[v]; a[v]=p;
            }
        if (is[k]!=k)
          for (i=0; i<=n-1; i++)
            { u=i*n+k; v=i*n+is[k];
              p=a[u]; a[u]=a[v]; a[v]=p;
            }
      }
    free(is); free(js);
    return(1);
  }

  void brmul(double a[], double b[],int m,int n,int k,double c[])
  { int i,j,l,u;
    for (i=0; i<=m-1; i++)
    for (j=0; j<=k-1; j++)
      { u=i*k+j; c[u]=0.0;
        for (l=0; l<=n-1; l++)
          c[u]=c[u]+a[i*n+l]*b[l*k+j];
      }
    return;
  }

  int main()
  { int i,j;
    static double a[4][4]={ {0.2368,0.2471,0.2568,1.2671},
                            {1.1161,0.1254,0.1397,0.1490},
                            {0.1582,1.1675,0.1768,0.1871},
                            {0.1968,0.2071,1.2168,0.2271}};
    static double b[4][4],c[4][4];
    for (i=0; i<=3; i++)
    for (j=0; j<=3; j++)
      b[i][j]=a[i][j];
    i=brinv(a,4);
    if (i!=0)
      { printf("MAT A IS:\n");
        for (i=0; i<=3; i++)
          { for (j=0; j<=3; j++)
              printf("%13.7e ",b[i][j]);
            printf("\n");
          }
        printf("\n");
        printf("MAT A- IS:\n");
        for (i=0; i<=3; i++)
          { for (j=0; j<=3; j++)
              printf("%13.7e ",a[i][j]);
            printf("\n");
          }
        printf("\n");
        printf("MAT AA- IS:\n");
        brmul(b,a,4,4,4,c);
        for (i=0; i<=3; i++)
          { for (j=0; j<=3; j++)
              printf("%13.7e ",c[i][j]);
            printf("\n");
          }
      }
  }

[ 本帖最后由 南国利剑 于 2010-5-12 10:56 编辑 ]

南国利剑
2010-05-10 13:19
xin310923
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:203
专家分:325
注 册:2009-12-22
收藏
得分:10 
2楼楼主  有个地方错误  C++里面是用函数是用cmath  而不是用math   很明显的一个错误
2010-05-11 21:13
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
回复 3楼 xin310923
首先,我说明了,这个代码不是我自己写的,是引用别人的.
其次,你说的错误不存在,这段代码是用C写的啊.
用C写的东西就不能在C++里运行了吗?
请你仔细看看代码再发表言论.
谢谢!

南国利剑
2010-05-12 10:55
xin310923
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:203
专家分:325
注 册:2009-12-22
收藏
得分:0 
回复4楼的话
 首先  第一名  你没说明这个程序定义文件的后缀是C ,依据楼主的意思 他是要在C++里面编写程序,这会让人的第一直觉就是定义的后缀是CPP,而不是C,很容易产生误导。我的第一直觉告诉我,这个程序的后缀应该是CPP,而你拿别人的代码,没说清楚是用C语言写的,这又是一个误导性错误。
2010-05-15 10:15
xin310923
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:203
专家分:325
注 册:2009-12-22
收藏
得分:0 
我想4楼  你要看一个程序对错  是不是也是先看前面那几行定义函数呢??
2010-05-15 10:16
快速回复:求助,c++矩阵求逆
数据加载中...
 
   



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

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