【C++矩阵类】矩阵换成行最简算法

//矩阵计算-化成行最简形式
#include <vector>
#include <iostream>
#include <cmath>

//化成行最简形式
class Matrix {
public:
    // 使用二维向量直接构造矩阵
    Matrix(std::vector<std::vector<double>> matrix) 
        : data(matrix), rows(matrix.size()), cols(matrix[0].size()) {}

    void eliminate() {
        // High-level view
        
        for(int i = 0; i < std::min(rows, cols); ++i) {
            // Find pivot
            int max_row = i;
            for(int k = i + 1; k < rows; k++) {
                if(std::abs(data[k][i]) > std::abs(data[max_row][i]))
                    max_row = k;
            }
            std::swap(data[i], data[max_row]);

            // Eliminate below pivot
            for(int k = i + 1; k < rows; k++) {
                double f = data[k][i] / data[i][i];
                for(int l = i + 1; l < cols; l++) 
                    data[k][l] -= data[i][l] * f;
                
                // Fill with zeros as we go
                data[k][i] = 0;
            }

            // Normalize pivot row
            double f = data[i][i];
            for(int k = i; k < cols; k++) 
                data[i][k] /= f;
        }
    }

    void print() {
        for(auto& row : data) {
            for(auto val : row)
                std::cout << val << " ";
            std::cout << "\n";
        }
    }

private:
    std::vector<std::vector<double>> data;
    int rows, cols;
};
int main() {
    std::vector<std::vector<double>> elements = {
        {3, 0, -1, 0, 0},
        {8, 0, 0, -2, 0},
        {0, 2, -2, -1, 0}
    };

    Matrix matrix(elements);
    
    matrix.eliminate();
    matrix.print();

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值