在c中乘以两个矩阵的函数

时间:2015-02-08 21:10:03

标签: c matrix

我试图将C中的两个矩阵相乘。因为我必须多次进行乘法运算,所以我想将其作为函数编写,然后在主程序中调用它。以下是我写的代码。

//DECLARE THE FUNCTION
#include <stdio.h>
double matMul(int m,int n,int p,int q,double matY[m][n],double matZ[p][q]);
//DECLARE THE VARIABLES NEEDED
int Numstates=3;
double ILX[3][3]= { {1 , 2 , 4} , { 2, 3.5 , 8} , { 1 , 1 , 1 } };
double IADT2A[3][3]={ { 1 , 2 , 4 } , { 2 , 3 , 8 } , { 1 , 1 , 1 } };
double AD[3][3]; int i;int j;double pShow;

int main(){
    //CALLING THE matMul FUNCTION TO MULTIPLY ILX AND IADT2A
    AD=matMul(Numstates,Numstates,Numstates,Numstates,ILX,IADT2A);
    for (i=0;i<Numstates;i++){
        for (j=0;j<Numstates;j++){
            pShow=AD[i][j];
            printf("%lf",pShow);
        }

    }
    return 0;
}
//FUNCTION TO MULTIPLY TWO MATRICES
double matMul(int m,int n,int p,int q,double matY[m][n],double matZ[p][q]){
    int count3;int k;int i;int j;
    int colmatYZ=n;
    if (q<n){
        colmatYZ=q;
    }
    double matYZ[m][colmatYZ];
    if (n!=p){

    }
    else{
        for (k=0;k<colmatYZ;k++){
            for(i=0;i<m;i++){
                count3=0;
                for(j=0;j<n;j++){
                    count3=count3+matY[i][j]*matZ[j][k];
                }
                matYZ[i][k]=count3;
            }
        }
    }

    return matYZ[m][colmatYZ];

}

这里&#34; matY&#34;和&#34; matZ&#34;乘以并将产品返回为&#34; matYZ&#34;这也是一个3x3矩阵。我试图在主程序中将此产品转换为变量&#34; AD&#34;。 但是当它分配到类型&#39; double [3] [3]&#39;时,它给我一个错误说#34;不兼容的类型。来自类型&#39; double&#39;&#34;。 有人可以告诉我这里我做错了什么。谢谢!!

2 个答案:

答案 0 :(得分:0)

你的问题在这里

AD=matMul(Numstates,Numstates,Numstates,Numstates,ILX,IADT2A);

AD的类型为double [3][3],您尝试分配matMul()的返回值,即double

答案 1 :(得分:0)

将得到的矩阵作为参数并在函数内部写入。函数原型将是void matMul(int m,int n,int p,int q,double matY[m][n],double matZ[p][q]. double matYZ[m][q]);。该功能几乎相同。请记住在调用函数中为matYZ划分内存。

@eigenchris对评论进行了扩展。