• 【转】c++用vector制作矩阵


    class Matrix//矩阵类
    {
    public:
        vector<vector<double>>data;
        int rows;//行数
        int columns;//列数
        Matrix(int rowNum,int columnNum)//初始化构造函数
        {
            rows = rowNum;
            columns = columnNum;
            data.resize(rows);
            for (int i = 0; i < rows; i++)
            {
                data[i].resize(columns,0);
            }
        }
        Matrix()
        {
            rows = 0;
            columns = 0;
        }
        vector<double>&operator[](int i)//返回第i行的引用
        {
            return data[i];
        }
        Matrix operator*(Matrix&B)//矩阵乘法 B的引用
        {
            int BColumns = B.columns;
            Matrix C(rows, BColumns);
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < BColumns; j++)
                {
                    for (int k = 0; k < columns; k++)
                    {
                        C[i][j] += data[i][k] * B[k][j];
                    }
                }
            }
            return C;
        }
        Matrix sub(int i,int j)//返回余矩阵
        {
            Matrix C(rows-1,columns-1);
            int r = -1;// 记住sub的行和列
            int c = -1;
            for (int x = 0; x < rows; x++)
            {
                if (x != i)
                {
                    ++r;
                     for (int y = 0; y < columns; y++)
                    {
                        if (y != j)
                        {
                            ++c;
                            C[r][c] = data[x][y];
                        }
                    }
                }
                
            }
            return C;
        }
        double det()//求行列式(递归定义的递归求)
        {
            if (rows == 1 && columns == 1)
            {
                return data[0][0];
            }
            else
            {
                double  value = 0;
                for (int j = 0; j < columns; j++)
                {
                    value += pow(-1, j + 2) * data[0][j] * (*this).sub(0, j).det();
                }
                return value;
    
            }
        }
        Matrix inverse()
        {
            Matrix C(rows, columns);
            double d = this->det();//行列式的值
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < columns; j++)
                {
                    C[i][j] = pow(-1, i + j + 2) * (*this).sub(j, i).det();
                    C[i][j] /= d;
                }
    
            }
            return C;
        }
        void Print()//打印矩阵
        {
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < columns; j++)
                {
                    printf("%.2f ", data[i][j]);
                }
                printf("\n");
            }
        }
    
        void GetData()//获得矩阵数据
        {
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < columns; j++)
                {
                    cin >> data[i][j];
                }
            }
        }
    
    };

    原文:https://blog.csdn.net/beyondzty/article/details/120776327

  • 相关阅读:
    oracle 表误更新 (flashback )闪回操作
    经典sql语句大全
    如何让程序自动更新
    C#如何测试代码运行时间
    oracle复制表的sql语句
    NeatUpload的安装使用 文件上传。可传大文件。
    c#实现ftp上传代码
    C# ftp 上传、下载、删除
    oracle cursor 与refcursor及sys_refcursor的区别 -游标(cursor)应用-实例
    Oracle中Merge语句的使用
  • 原文地址:https://www.cnblogs.com/lyggqm/p/16287824.html
Copyright © 2020-2023  润新知