矩阵相乘.cpp

来自「部分线性代数计算算法」· C++ 代码 · 共 87 行

CPP
87
字号
#include <iostream> 
#include <cstdlib> 
using namespace std;


template<typename T>
void matrixm(T *a,T *b,int rows,int cols,int colsb)
{
  int sum,l,i,j;
  for(l=0;l<rows;l++)
    {
     for(i=0;i<colsb;i++)
     {
         sum=0;     
      for(j=0;j<cols;j++)
          sum+=a[l][j]*b[j][i];
      cout.width(5);
      cout<<sum;
     }
     cout<<endl;
    }
}

template<typename T>
void matrixMtp(T *a,T *b,int rows,int cols,int colsb)
{
       int ct = 0, cm = 0, cw = 0; 

       // 对所有的i和j计算w ( i , j ) 

       for (int i = 1; i <= rows; i++) { 

         // 计算出结果的第 i 行 

         for (int j = 1; j <= colsb; j++) { 

           // 计算w ( i , j ) 的第一项 

           T sum =  a[ct]*b[cm]; 

           // 累加其余项 

           for (int k = 2; k <= cols; k++) { 

             ct++; // 指向* t h i s第i行的下一个元素 

             cm += colsb; // 指向m 的第j  列的下一个项 

            sum += a[ct] * b[cm]; 

            }
            
           cout.width(5); 

          cout<<sum;  // 保存w ( i , j ) 

          // 重新调整至行首和下一列 

          ct -=( cols - 1); 

          cm = j; 

          }
         (cout<<endl).width(5);

         //  重新调整至下一行的行首和第一列 

         ct += cols; 

         cm = 0; 

         } 


     } 

     
int main()
{
  int a[3][3]={1,2,1,2,1,2,3,2,3};
  int b[9]={1,2,1,2,1,2,3,2,3};
  matrixMtp(b,b,3,3,3);
  matrixm(a,a,3,3,3);
}


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?