zoukankan      html  css  js  c++  java
  • 求逆矩阵

    /**
     * Inverse of a Matrix:
     * Using Gauss-Jordan Elimination;
     * by Alexander Ezharjan.
     **/
    
    #include<iostream>
    using namespace std;
    
    
    int main()
    {
        int i = 0, j = 0, k = 0, n = 0;
        float **mat = NULL;
        float d = 0.f;
        
        cout << "How many variables? ";
        cin >> n;
        cout << endl;
        
        // Allocating memory for matrix array
        mat = new float*[2*n];
        for (i = 0; i < 2*n; ++i)
        {
            mat[i] = new float[2*n]();
        }
        
        cout << "Please enter the coefficients:" << endl;
        //Inputs the coefficients of the matrix
        for(i = 0; i < n; ++i)
        {
            for(j = 0; j < n; ++j)
            {
            	// raw major!!! 
                cin >> mat[i][j];
            }
        }
        
        cout << endl << "Input matrix:" << endl;
        for (i = 0; i < n; ++i)
        {
            for (j = 0; j < n; ++j)
            {
                cout << mat[i][j] << "	";
            }
            cout << endl;
        }
        cout << endl;
        
        // Initializing Right-hand side to identity matrix
        for(i = 0; i < n; ++i)
        {
            for(j = 0; j < 2*n; ++j)
            {
                if(j == (i+n))
                {
                    mat[i][j] = 1;
                }
            }
        }
        
        // Partial pivoting
        for(i = n; i > 1; --i)
        {
            if(mat[i-1][1] < mat[i][1])
            {
                for(j = 0; j < 2*n; ++j)
                {
                    d = mat[i][j];
                    mat[i][j] = mat[i-1][j];
                    mat[i-1][j] = d;
                }
            }
        }
        cout << endl;
        
        // Pivoted output
        cout << "Pivoted output: " << endl;
        for(i = 0; i < n; ++i)
        {
            for(j = 0; j < 2*n; ++j)
            {
                cout << mat[i][j] << "	";
            }
            cout << endl;
        }
        cout << endl;
        
        // Reducing To Diagonal Matrix
        for(i = 0; i < n; ++i)
        {
            for(j = 0; j < 2*n; ++j)
            {
                if(j != i)
                {
                    d = mat[j][i] / mat[i][i];
                    for(k = 0; k < n*2; ++k)
                    {
                        mat[j][k] -= mat[i][k]*d;
                    }
                }
            }
        }
        cout << endl;
        
        // Reducing To Unit Matrix
        for(i = 0; i < n; ++i)
        {
            d = mat[i][i];
            for(j = 0; j < 2*n; ++j)
            {
                mat[i][j] = mat[i][j]/d;
            }
        }
        
        // Print inverse of the input matrix
        cout<<"Inverse matrix:" << endl;
        for(i=0; i < n; ++i)
        {
            for(j = n; j < 2*n; ++j)
            {
                cout << mat[i][j] << "	";
            }
            cout << endl;
        }
        
        // Deleting the memory allocated
        for (i = 0; i < n; ++i)
        {
            delete[] mat[i];
        }
        delete[] mat;
        
        return 0;
    }
    



    作者:艾孜尔江

  • 相关阅读:
    cent os 6.8 php 5.6 安装ffmpeg扩展
    Linux查找目录下文件包含关键字
    python生成随机验证码
    zabbix添加任务计划和sshd文件修改key
    OS模块
    python模块
    python内建函数
    python3 爬煎蛋ooxx妹子图
    ssm整合-Sping整合Mybatis框架配置事务07
    ssm整合-Sping整合Mybatis框架06
  • 原文地址:https://www.cnblogs.com/ezhar/p/14190397.html
Copyright © 2011-2022 走看看