• 大小: 113KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-16
  • 语言: C/C++
  • 标签: 矩阵求逆  

资源简介

因为矩阵AA-1=E,于是可以利用AX=E来求A-1。 程序先初始化两个n维矩阵p[],q[],,p[]用来存放要求逆的矩阵,通过高斯列主元消元法变成上三角矩阵,q[]与p[]同时变换。通过追赶法解出每一行的解存放在q[]中

资源截图

代码片段和文件信息

#include “Stdio.h“
#include “math.h“
int inversion(int ndouble p[]double q[]);
FILE *fp ;
void main()
{
 int nij;
 double p[100]q[100];
 float r[100];
 printf(“Input n:“);
 scanf(“%d“&n);
  if(n==-1) return;
  printf(“\n“);
for(i=0;i  {
  for(j=0;j  {
    p[i*n+j]=0.0;
    }
    }
  printf(“Input the matrix:“);
  for(i=0;i  {
  for(j=0;j  {
  scanf(“%f“&(r[i*n+j]));
    p[i*n+j]=r[i*n+j];
    if(j==i) q[i*n+j]=1.0;
    else q[i*n+j]=0.0;
    }
    }
   fp=fopen(“matrix inversion.txt““wb“);
   if(inversion(npq))
  {
   for(i=0;i  {
  for(j=0;j  {
    printf(“%18.8e“(q[i*n+j]));
    fprintf(fp“%18.8e“(q[i*n+j]));
    }
    printf(“\n“);
    fprintf(fp“\n“);
    }
   }
   fclose(fp);
}
int inversion(int ndouble p[]double q[])
 {
   int ijk;
   double s;
    for(i=0;i    {
    s=fabs(p[i*n+i]);
    j=i;
    for(k=i;k<=n-1;k++)
    {  
       if(fabs(p[k*n+i])>s)
       {
       j=k;
       s=fabs(p[k*n+i]);
       }
       }
       if(j!=i)
       {
        for(k=i;k        {
         s=p[i*n+k];
         p[i*n+k]=p[j*n+k];
         p[j*n+k]=s;
        }
        for(k=0;k        {
         s=q[i*n+k];
         q[i*n+k]=q[j*n+k];
         q[j*n+k]=s;
         }
         }
         for(k=i+1;k         {
          s=p[k*n+i]/p[i*n+i];
          p[k*n+i]=0;
          for(j=i+1;j          {
           p[k*n+j]=p[k*n+j]-s*p[i*n+j];

           }
           for(j=0;j           {
           q[k*n+j]=q[k*n+j]-s*q[i*n+j];
           }
           }
           }
            if(p[(n-1)*n+n-1]==0)
            {
            printf(“The matrix is singular.\n“);
            fprintf(fp“The matrix is singular.\n“);
            return 0;
            }
           for(j=0;j           {
           q[(n-1)*n+j]=q[(n-1)*n+j]/p[(n-1)*n+n-1];
           for(i=n-2;i>=0;i--)
           {  s=0;
            for(k=i+1;k            {
            s+=p[i*n+k]*q[k*n+j];
            }
            q[i*n+j]=(q[i*n+j]-s)/p[i*n+i];
            }
            }
            return 1;
            }


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2233  2009-11-09 13:33  2\2.cpp

     文件       3341  2008-11-26 15:41  2\2.dsp

     文件        527  2008-11-26 15:41  2\2.dsw

     文件      41984  2008-12-11 16:24  2\2.ncb

     文件      53760  2008-12-11 16:24  2\2.opt

     文件        717  2008-12-11 16:21  2\2.plg

     文件     196673  2008-12-11 16:21  2\Debug\2.exe

     文件       6873  2008-12-11 16:21  2\Debug\2.obj

     文件     377856  2008-12-11 16:21  2\Debug\2.pdb

     文件      53248  2008-12-11 16:21  2\Debug\vc60.pdb

     文件        165  2008-12-11 16:22  2\matrix inversion.txt

     目录          0  2008-11-26 15:38  2\Debug

     目录          0  2008-11-26 15:38  2

----------- ---------  ---------- -----  ----

               737377                    13


评论

共有 条评论