矩阵求逆的C语言实现

矩阵求逆的C语言实现#include #defineN10 intgetA(intarcs[N][N],intn)//按第一行展开计算|A| {   if(n==1)   {     returnarcs[0][0];   }   intans=0;   inttemp[N][N];   inti,j,k

大家好,欢迎来到IT知识分享网。#include<stdio.h>  

#define N 10  

int getA(int arcs[N][N],int n)//按第一行展开计算|A|  

{  

    if(n==1)  

    {  

        return arcs[0][0];  

    }  

    int ans = 0;  

    int temp[N][N];  

    int i,j,k;  

    for(i=0;i<n;i++)  

    {  

        for(j=0;j<n-1;j++)  

        {  

            for(k=0;k<n-1;k++)  

            {  

                temp[j][k] = arcs[j+1][(k>=i)?k+1:k];  

                  

            }  

        }  

        int t = getA(temp,n-1);//递归调用

        if(i%2==0)  

        {  

            ans += arcs[0][i]*t;  

        }  

        else  

        {  

            ans -=  arcs[0][i]*t;  

        }  

    }  

    return ans;  

}  

void getAStart(int arcs[N][N],int n,int ans[N][N])//计算每一行每一列的每个元素所对应的余子式,组成A*  

{  

    if(n==1)  

    {  

        ans[0][0] = 1;  

        return;  

    }  

    int i,j,k,t;  

    int temp[N][N];  

    for(i=0;i<n;i++)  

    {  

        for(j=0;j<n;j++)  

        {  

            for(k=0;k<n-1;k++)  

            {  

                for(t=0;t<n-1;t++)  

                {  

                    temp[k][t] = arcs[k>=i?k+1:k][t>=j?t+1:t];  

                }  

            }  

  

          

            ans[j][i]  =  getA(temp,n-1);  

            if((i+j)%2 == 1)  

            {  

                ans[j][i] = – ans[j][i];  

            }  

        }  

    }  

}  

  

int main()  

{  

    int arcs[N][N];  

    int astar[N][N];  

    int i,j;  

    int n;  

    while(scanf(“%d”,&n)!=EOF && n)  

    {  

        for(i=0;i<n;i++)  

        {  

            for(j=0;j<n;j++)  

            {  

                scanf(“%d”,&arcs[i][j]);  

            }  

        }  

      

        int a = getA(arcs,n);  

        if(a==0)  

        {  

            printf(“can not transform!\n”);  

        }  

        else  

        {  

            getAStart(arcs,n,astar);  

            for(i=0;i<n;i++)  

            {  

                for(j=0;j<n;j++)  

                {  

                    printf(“%.4lf “,(double)astar[i][j]/a);  

                }  

                printf(“\n”);  

            }  

        }  

        printf(“\n”);  

  

    }  

      

  

    return 0;  

}  

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/23450.html

(0)
上一篇 2023-09-10 16:33
下一篇 2023-09-15 12:33

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信