矩阵乘法

typedef struct 
{
  double *datap;
  int    lie;//列
  int    hang;//
}Dmatrix_t;

 

int DMatrix_mul(Dmatrix_t *X,Dmatrix_t *Y,Dmatrix_t *Z)// z=A*B
{
   int i=0,j=0,k=0;
   double  *Z_p,*X_p,*Y_p;
   if(X->lie !=  Y->hang) return 0;
   if(Z->hang != X->hang) return 0;
   if(Z->lie !=  Y->lie) return 0;
    
    
   for(i=0;i<X->hang;i++)
     {
        Z_p =  Z->datap + i * Y->lie ;
     for(j=0;j<Y->lie;j++)
     {
        X_p =  X->datap + i * X->lie; //放在 J前面 ,循环一次k后,指针继续涨出错
        Y_p =  Y->datap + j;
        *Z_p=0;
       for(k=0;k < X->lie; k++)
       {
           *Z_p += *X_p * *Y_p;
           X_p  ++;
           Y_p  += Y->lie;
       //Z->datap[ij] += X->datap[i*X->lie+k] * Y->datap[k*Y->lie+j ];       
        }
        Z_p ++;
      }
    }
   return 1;
}

void main(void)

{

double mat_data_A[3][3]={0};

double mat_data_B[3][3]={0};

double mat_data_C[3][3];

Dmatrix_t mat_A,mat_B,mat_C;

mat_A.datap=( double *)mat_data_A; mat_A.lie=3;  mat_A.hang=3; 

mat_B.datap=( double *)mat_data_B; mat_B.lie=3;  mat_B.hang=3; 

mat_B.datap=( double *)mat_data_C; mat_C.lie=3;  mat_C.hang=3; 

DMatrix_mul(&mat_A,&mat_B,&mat_C); // mat_C=mat_A . mat_B

 

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值