这段代码用 C++ 实现三个线性代数中常用的操作:矩阵的减法、矩阵的乘法和哈达玛积。

  • 矩阵减法:将两个矩阵对应元素相减得到一个新的矩阵。
  • 矩阵乘法:将两个矩阵相乘得到一个新的矩阵。
  • 哈达玛积:将两个矩阵对应元素相乘得到一个新的矩阵。

代码使用 std::vector 容器来存储矩阵,其中每个元素是一个 std::vector 容器,表示矩阵的一行。首先,通过 resize 函数设置矩阵 C 的大小,然后依次遍历两个矩阵 AB 的每一个元素,进行相应的操作,最后返回新的矩阵 C

其中,矩阵乘法需要进行三重循环,分别遍历矩阵 A 的每一行、矩阵 B 的每一列和矩阵 A 的每一列(或矩阵 B 的每一行),计算得到新的矩阵 C 中对应元素的值。

std::vector<std::vector<double>> LinAlg::subtraction(std::vector<std::vector<double>> A, std::vector<std::vector<double>> B){
    std::vector<std::vector<double>> C;
    C.resize(A.size());
    for(int i = 0; i < C.size(); i++){
        C[i].resize(A[0].size());
    }

    for(int i = 0; i < A.size(); i++){
        for(int j = 0; j < A[0].size(); j++){
            C[i][j] = A[i][j] - B[i][j];
        }
    }
    return C;
}

std::vector<std::vector<double>> LinAlg::matmult(std::vector<std::vector<double>> A, std::vector<std::vector<double>> B){
    std::vector<std::vector<double>> C;
    C.resize(A.size());
    for(int i = 0; i < C.size(); i++){
        C[i].resize(B[0].size());
    }
    
    for(int i = 0; i < A.size(); i++){ 
        for(int k = 0; k < B.size(); k++){ 
            for(int j = 0; j < B[0].size(); j++){ 
                C[i][j] += A[i][k] * B[k][j]; 
            } 
        } 
    } 
    return C;
}

std::vector<std::vector<double>> LinAlg::hadamard_product(std::vector<std::vector<double>> A, std::vector<std::vector<double>> B){
    std::vector<std::vector<double>> C;
    C.resize(A.size());
    for(int i = 0; i < C.size(); i++){
        C[i].resize(A[0].size());
    }
    
    for(int i = 0; i < A.size(); i++){
        for(int j = 0; j < A[0].size(); j++){
            C[i][j] = A[i][j] * B[i][j];
        }
    }
    return C;
}
C++ 线性代数操作:矩阵减法、矩阵乘法和哈达玛积

原文地址: https://www.cveoy.top/t/topic/n2nh 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录