【转】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

posted @ 2022-05-19 11:14  南水之源  阅读(415)  评论(0)    收藏  举报