📅  最后修改于: 2023-12-03 14:59:52.241000             🧑  作者: Mango
矩阵是线性代数中的一个基本概念,常见于多项式拟合、运筹学和机器学习等领域。本文将介绍如何使用C++编写程序来实现两个矩阵相乘的运算。
#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
int row_1, col_1, row_2, col_2;
cout << "Enter the number of rows and columns of first matrix: ";
cin >> row_1 >> col_1;
cout << "Enter the number of rows and columns of second matrix: ";
cin >> row_2 >> col_2;
if(col_1 != row_2)
{
cout << "Matrices cannot be multiplied!";
return 0;
}
int **mat1 = new int *[row_1];
for(int i=0; i < row_1; ++i)
mat1[i] = new int[col_1];
int **mat2 = new int*[row_2];
for(int i=0; i < row_2; ++i)
mat2[i] = new int[col_2];
int **res = new int *[row_1];
for(int i=0; i < row_1; ++i)
res[i] = new int[col_2];
cout << endl << "Enter the elements of first matrix: " << endl;
for(int i=0; i<row_1; ++i)
for(int j=0; j<col_1; ++j)
cin>>mat1[i][j];
cout << endl << "Enter the elements of second matrix: " << endl;
for(int i=0; i<row_2; ++i)
for(int j=0; j<col_2; ++j)
cin>>mat2[i][j];
// 计算乘积
for(int i=0; i < row_1; ++i)
{
for(int j=0; j < col_2; ++j)
{
res[i][j] = 0;
for(int k=0; k < col_1; ++k)
{
res[i][j] += mat1[i][k] * mat2[k][j];
}
}
}
// 输出乘积
cout << endl << "Resultant matrix is: " << endl;
for(int i=0; i < row_1; ++i)
{
for(int j=0; j < col_2; ++j)
cout << res[i][j] << " ";
cout << endl;
}
// 释放内存
for(int i=0; i < row_1; ++i)
delete[] mat1[i];
delete[] mat1;
for(int i=0; i < row_2; ++i)
delete[] mat2[i];
delete[] mat2;
for(int i=0; i < row_1; ++i)
delete[] res[i];
delete[] res;
return 0;
}
本程序使用二维动态数组实现矩阵的存储。输入矩阵的行列数以及元素,然后使用三重循环计算矩阵乘积。两个循环分别遍历第一个矩阵的行和第二个矩阵的列,第三重循环遍历每个元素并计算它们的乘积并将其存储在结果矩阵中。
该程序的复杂度为 $O(n^3)$,其中 $n$ 是矩阵的行或列数。 当 $n$ 很大时,该程序的运行时间将变得非常长。
通过本文的介绍,我们了解到了如何使用C++编写程序实现两个矩阵相乘的运算。矩阵相乘是很多数学和计算机科学领域中都经常出现的问题,因此本示例程序应该对想要学习这些领域的人来说是非常有用的。