求逆矩阵

转自http://blog.csdn.net/abcjennifer/article/details/6693612

#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("The input data is error!\n");
        }
        else
        {
            getAStart(arcs,n,astar);
            for(i=0;i<n;i++)
            {
                for(j=0;j<n;j++)
                {
                    printf("%.3lf ",(double)astar[i][j]/a);
                }
                printf("\n");
            }
        }

    }

    return 0;
}
时间: 2024-11-14 10:06:42

求逆矩阵的相关文章

选主元的高斯-约旦(Gauss-Jordan)消元法解线性方程组/求逆矩阵

做数据结构课设时候查的资料,主要是看求逆矩阵方面的知识的. 选主元的高斯-约当(Gauss-Jordan)消元法在很多地方都会用到,例如求一个矩阵的逆矩阵.解线性方程组(插一句:LM算法求解的一个步骤),等等.它的速度不是最快的,但是它非常稳定(来自网上的定义:一个计算方法,如果在使用此方法的计算过程中,舍入误差得到控制,对计算结果影响较小,称此方法为数值稳定的),同时它的求解过程也比较清晰明了,因而人们使用较多.下面我就用一个例子来告诉你Gauss-Jordan法的求解过程吧.顺便再提及一些注

使用lapack库求逆矩阵

废话不多说,直接上代码: #include <string> #include "lapacke.h" #include "lapack_aux.h" int main(int argc,char** argv) { setlocale(LC_ALL,""); double a[] = { 3,-1,-1, 4,-2,-1, -3,2,1 }; int m = 3; int n = 3; int lda = 3; int ipiv[3

matlab中求逆矩阵的高斯消元法实现的代码

function qiuni =INV_GET(a)N=length(a);M=eye(N);%得到上三角矩?for i=1:N max=a(i,i); A=i; for j=i+1:N if(abs(a(j,i))>abs(max))%找最大值 max=a(j,i); A=j; end end for m=1:N temp1=a(i,m);%交换最大值值所在的行和当前行 a(i,m)=a(A,m); a(A,m)=temp1; temp2=M(i,m); M(i,m)=M(A,m); M(A,

求逆矩阵【模板】

题目 P4783 求一个 $N \times N$ 的矩阵的逆矩阵.答案对 $10^9+7$ 取模.若不可逆,输出 "No Solution". 分析 由线性代数的知识,求矩阵A的逆矩阵时, 只需在A的右边补充一个单位矩阵,进行初等行变换,当A变成单位矩阵时,右边的就是A的逆矩阵. 简单的证明:$AE\rightarrow E{A}'$ 代码 //来自https://blog.csdn.net/qq_43653202/article/details/99976316 #include&

(模板)求逆矩阵luoguP4783

题目链接:https://www.luogu.org/problem/P4783 题意:求矩阵的逆. 思路:高斯消元法求矩阵的逆,n为400,卡常,我是开了O2优化才AC的.. AC代码: #include<cstdio> #include<cctype> #include<algorithm> #define R register int using namespace std; const int maxn=405; const int MOD=1e9+7; int

利用初等变换求逆矩阵和解矩阵方程

求行列式,验证矩阵可逆 原文地址:https://www.cnblogs.com/YC-L/p/12234164.html

高斯消元法求逆矩阵

A=[1,-1,1,-4;5,-4,3,12;2,1,1,11;2,-1,7,-1] E=[1,0,0,0;0,1,0,0;0,0,1,0;0,0,0,1] b=[2,4,3,0]' %开始消元过程 for k=1:(length(A)) a=A(k,k) for i=1:(length(A)) A(k,i)=A(k,i)/a E(k,i)=E(k, i)/a end b(k,1)=b(k,1)/ a for i=k+1:(length(A)) c=-A(i,k) for j=1: (lengt

求一个矩阵的逆矩阵(用伴随矩阵求)

题目:noyj774 用代数余子式求逆矩阵方法: 若现有矩阵A,要求其逆矩阵: 若|A|==0,则其不存在逆矩阵: 若|A|!=0,其逆矩阵A^-1==*A/|A|:其中*A为其伴随矩阵: 伴随矩阵的求法: *A[j][i]==|M[i][j]|,其中M[i][j]为A[i][j]的代数余子式: 即*A1[i][j]==|M[i][j]|,再将*A1转置得到*A: 代码: #include<bits/stdc++.h>#define MAXN 10#define MAX 100000000#d

矩阵的逆矩阵和行列式值的递归算法。

很久没有写过C语言,今天写了一个关于矩阵的算法 完整代码如下: #include<atlstr.h> #include<iostream> #include<string> using namespace std; //创建矩阵 float **Creat(int n) { float **array=new float*[n]; for(int i=0;i<n;i++) { array[i]=new float[n]; } printf("请输入矩阵: