无法让我的代码使用高斯消除找到矩阵的逆矩阵

时间:2017-10-23 06:36:01

标签: c

基本上我的代码有问题,必须通过创建一个带有单位矩阵和高斯消除(没有交换行)的增强矩阵得到n * n矩阵的逆矩阵才能得到逆变器真的很感激任何帮助。顺便说一下,代码必须在c中,并且需要使用高斯消除来实现此赋值

#include <stdio.h>
int main()
{
    int n = 3;

    float matrix[10][10];
    float augmatrix[10][10];
    /*creating random matrix*/
    for(int i=0;i<n; i++)
    {
        for(int j=0; j<n; j++)
        {
            matrix[i][j]= i+(j*j)+1;

        }

     }
     /*creating an augmented matrix with identity matrix*/
        for (int i=0;i<n; i++)
        {
            for(int j=0; j<2*n; j++)
            {
                if(j<n)
                {
                    augmatrix[i][j] = matrix[i][j];

                }
                else if(i==j-n)
                {
                    augmatrix[i][j] = 1.0;

                }
                else
                {
                    augmatrix[i][j] = 0.0;

                }

          }

       }
         /*printing matrix*/
    printf("matrix is \n");
    for (int z = 0; z < n; z++)
    {
        for (int x = 0; x < n; x++)
        {
            printf(" %f", matrix[z][x]);
        }
        printf("\n");
    }
    printf("augmatrix is \n");
    for (int z = 0; z < n; z++)
    {
        for (int x = 0; x < n*2; x++)
        {
            printf(" %f", augmatrix[z][x]);
        }
        printf("\n");
    }
         /*gausian elimination*/
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            if(i!=j){
                int l = augmatrix[j][i]/augmatrix[i][i];
                for(int k = 0; k < 2*n; k++){
                    augmatrix[j][k] -= l * augmatrix[i][k];
                }
            }
        }
    }
    for(int i = 0; i < n; i++){
        float a = augmatrix[i][i];
        for(int j = 0; j < 2*n; j++){
            augmatrix[i][j] /= a;
        }
    }
       /*print result*/
    printf("matrix is \n");
    for (int z = 0; z < n; z++)
    {
        for (int x = 0; x < n*2; x++)
        {
            printf(" %f", augmatrix[z][x]);
        }
        printf("\n");
    }
}

1 个答案:

答案 0 :(得分:1)

做的问题

for(int i=0;i<n; i++)
{
    for(int j=0; j<n; j++)
    {
        matrix[i][j]= i+(j*j)+1;
    }

 }

是你正在生成一个不存在逆的矩阵。

使用随机数生成矩阵,并检查行列式是否为非零。