谁有矩阵求逆程序(C++) 急!急!在线等待!

解决方案 »

  1.   

    求矩阵逆,行列式值#include <stdio.h>
    #include <stdlib.h>double det(double* a,int n);
    double rem(double* a,int i,int j,int n);
    void inv(double* a,double* b, int n);int main(int argc, char* argv[])
    {
    int i,j;
    double a[3*3]=
    {
    103.0,   100.0,   204.0,
    199.0,   200.0,   395.0,
    301.0,   300.0,   600.0
    };
    double b[3*3];
    inv(a,b,3);
    printf("\n\n The Matrix is A=\n");
    for(i=0;i<3;i++)
    {
    for(j=0;j<3;j++) printf("%8.2lf",a[i*3+j]);
    printf("\n");
    }
    printf("\n\n The Inversed Matrix of A =\n");
    for(i=0;i<3;i++)
    {
    for(j=0;j<3;j++) printf("%8.2lf",b[i*3+j]);
    printf("\n");
    }
    return 0;
    }double rem(double* a,int i,int j,int n)
    {
    int k,m;
    double *pTemp=new double[(n-1)*(n-1)]; 

    for(k=0;k<i;k++)
    {
    for(m=0;m<j;m++) pTemp[k*(n-1)+m]=a[k*n+m];
    for(m=j;m<n-1;m++) pTemp[k*(n-1)+m]=a[k*n+m+1];
    }
    for(k=i;k<n-1;k++)
    {
    for(m=0;m<j;m++) pTemp[k*(n-1)+m]=a[(k+1)*n+m];
    for(m=j;m<n-1;m++) pTemp[k*(n-1)+m]=a[(k+1)*n+m+1];
    }
    double dResult=(((i+j)%2==1)?-1:1)*det(pTemp,n-1);
    delete[] pTemp;
    return dResult;
    }
    double det(double* a,int n)
    {
    if(n==1) return a[0];
    double sum=.0;
    for(int j=0;j<n;j++) sum+=a[0*n+j]*rem(a,0,j,n);
    return sum;
    }void inv(double* a,double* b, int n)
    {
    double deta=det(a,n);cout<<deta<<endl;
    for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
    b[i*n+j]=rem(a,j,i,n)/deta;
    }