我试图将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;。 有人可以告诉我这里我做错了什么。谢谢!!
答案 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对评论进行了扩展。