首页 > 解决方案 > C中的2x2矩阵运算

问题描述

我是 C 的完全新手。我正在尝试编写一个函数来将两个矩阵相乘。我只会处理 2x2,所以我将列举它们。我的想法是产生一个 2x2 的浮点数。目前我有这个,但我不知道如何正确修复它。任何帮助将不胜感激,谢谢。

float [][] product2(float A[2][2], float B[2][2]){ //works only on 2x2's!
    float C[2][2];
    C[0][0]=A[0][0]*B[0][0]+A[0][1]*B[1][0];
    C[0][1]=A[0][0]*B[0][1]+A[0][1]*B[1][1];
    C[1][0]=A[1][0]*B[0][0]+A[1][1]*B[1][0];
    C[1][1]=A[1][0]*B[0][1]+A[1][1]*B[1][1];
    return C;
}

编辑:

如果可能的话,我想避免使用输入矩阵来获取输出。这第二次迭代会起作用吗?

float* traspose(float A[]){ // Metodo 1
float B[4];
B[1]=A[2];
B[2]=A[1];
return B;

}

我没有从编译器中得到任何错误,但它合法吗?

标签: cmatrixproduct

解决方案


我仍在学习C自己,但我之前尝试过同样的问题,这是我的解决方案。

void multiply(int array1[2][2],int array2[2][2],int array3[2][2]){
    for(int i=0; i<2; i++){
        for(int j=0; j<2; j++){
            for(int k=0; k<2;k++){
                array3[i][j] += array1[i][k] * array2[k][j];
            }
        }
    }
}

如果矩阵乘法的乘积也是矩阵,您应该使用第三个矩阵来存储结果,这将是 array3,因此不需要返回类型,因此使用 void 作为返回类型。前 2 个循环用于遍历数组 3,最里面的循环 (k) 用于遍历矩阵中的乘法点。


推荐阅读