用惯了数学库,有的时候有些基本的运算,像矩阵求逆,转置矩阵什么的,写起来突然感觉有些生疏了,这里算是对一些基本线性代数的复习。用C写矩阵乘法;
注意点:
(1)二维数组与二级指针的区别;
(2)矩阵乘法的要点,新的结果矩阵的第i行第j列是矩阵A的第i行与矩阵B的第j列的乘积,这一点不熟悉,写程序就会有点吃力;对程序结构思路就会存在不清晰的地方;
(3)有很多可以完善的地方,由于时间问题,先记于此;
#include "stdafx.h" #include<iostream> #include<numeric> #include<vector> #include<functional> #include<algorithm> using namespace std; void MatrixMul(int MatrixA[2][2], int RowA, int ColA, int MatrixB[2][2], int RowB, int ColB, int Result[2][2]) { if (ColA != RowB) { cout << "error" << endl; return; } for (size_t i = 0; i < RowA; i++) for (size_t j = 0; j < ColB; j++) { int sum = 0; for (size_t k = 0; k < ColA; k++) { sum = sum + MatrixA[i][k] * MatrixB[k][j]; } Result[i][j] = sum; } } int _tmain(int argc, _TCHAR* argv[]) { int A[2][2]={{1,2},{3,7}}; int B[2][2] = { { 2,5 },{ 6,1 } }; int Result[2][2]; MatrixMul(A, 2, 2, B, 2, 2,Result); cout << "相乘以后的结果为:" << endl; for (size_t i = 0; i < 2; i++) { for (size_t j = 0; j < 2; j++) { cout << Result[i][j] << " "; } cout << endl; } while (true); return 0; }