• 实现两个N*N矩阵的乘法,矩阵由一维数组表示


    实现两个N*N矩阵的乘法,矩阵由一维数组表示。

    先介绍一下矩阵的加法:

    复制代码
    1     void Add(int rows, int cols)  
    2     {  
    3        for(int i= 0;i<rows;i++)  
    4        {  
    5        for(int j=0;j<cols;j++)  
    6           result[i][j]=mat1[i][j]+mat2[i][j];  
    7        }  
    8     } 
    复制代码

    若两个矩阵要做乘法运:只有在一个矩阵的行数与另一个矩阵的列数相同时,才能做两个矩阵的乘法。

    如何得到矩阵的转置

    矩阵的转置也是一个矩阵,原始矩阵中的行转变为转置矩阵的列。例如,有下述一个3×3矩阵:

    1 2 3
    6 7 8
    4 5 9

    那么它的转置矩阵为:

    1 6 4
    2 7 5
    3 8 9

    让我们从程序员的角度仔细地考察一下这一现象。假设原始数组为M,转置矩阵为MT。那么M[1][0]=6,在转置矩阵中我们发现MT [0][1]=6。因此,我们能够得到程序化的结论:转置一个矩阵实际上就是对换下标变量。用技术术语讲:

    1. MT[Row][Column] = M[Column][Row]; 

    下面是得到转置矩阵的C代码:

    1. void show_transpose(float mat[][10],int row,int col)    
    2. {    
    3.    int i,j;    
    4.    for(i=0;i<row;i++)    
    5.    {    
    6.       for(j=0;j<col;j++)    
    7.          printf("%f ",mat[j][i]);    
    8.       printf(" ");    
    9.    }    
    10. }   


    以上方法显示了矩阵的转置。

      1. #include<iostream>  
      2. using namespace std;  
      3. #define size 2  
      4.   
      5. int multi(int *a , int *b , int N)  
      6. {  
      7.     int i , j , k , temp;  
      8.     int *c = (int*)malloc(N * N * sizeof(int));  
      9.   
      10.     for(i = 0 ; i < N ; i++)  
      11.     {  
      12.         for(j = 0 ; j < N ; j++)  
      13.         {  
      14.             temp = i * N + j;  
      15.             *(c + temp) = 0;  
      16.             for(k = 0 ; k < N ; k++)  
      17.             {  
      18.                 *(c + temp) += a[i * N + k] * b[k * N + j];  
      19.             }  
      20.             cout<<*(c + temp)<<" ";  
      21.         }  
      22.     }  
      23.     return *c;  
      24. }  
      25.   
      26. int main()  
      27. {  
      28.     int a[size * size] = {2 , 1 , 4 , 3};  
      29.     int b[size * size] = {1 , -1 , 3 , 2};  
      30.     multi(a , b , size);  
      31.   
      32.     return 0;  

  • 相关阅读:
    静态(static)、虚拟(virtual)、动态(dynamic)或消息处理(message)
    SQLLITE
    SQLite数据表和视图
    SQLite
    DELPHI 泛型
    indy10 学习2
    indy10 线程池
    indy
    Indy10 控件的使用(2)TidTCpServer组件学习
    Socket心跳包机制
  • 原文地址:https://www.cnblogs.com/heyonggang/p/3185648.html
Copyright © 2020-2023  润新知