使用C++求出两个二维矩阵的乘积,行列数各100,数值从1-100随机生成。并计算执行时间
时间: 2024-10-29 20:15:12 浏览: 7
juzhenqiuni.rar_矩阵求逆C++_矩阵的逆
在C++中,我们可以创建一个二维数组(矩阵)来存储从1到100的随机整数,然后使用嵌套循环来计算两个矩阵的乘法。这里我们假设第一个矩阵的列数等于第二个矩阵的行数才能进行乘法运算。对于大矩阵,直接遍历计算可能会非常耗时,因此我们可以利用动态内存管理来提高效率。
首先,我们需要引入`<ctime>`库来进行随机数生成,以及`<chrono>`库来测量执行时间。以下是一个简单的示例:
```cpp
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <chrono>
// 定义矩阵类
class Matrix {
private:
std::vector<std::vector<int>> data;
int rows, cols;
public:
Matrix(int r, int c) : rows(r), cols(c) {
// 初始化矩阵数据
srand(time(0));
for (int i = 0; i < rows; ++i)
for (int j = 0; j < cols; ++j)
data[i][j] = rand() % 100 + 1;
}
// 计算两个矩阵的乘积
void multiply(const Matrix& other) {
if (cols != other.rows) {
std::cerr << "Matrix multiplication not possible due to incompatible dimensions." << std::endl;
return;
}
std::vector<std::vector<int>> result(rows, std::vector<int>(other.cols, 0));
auto start_time = std::chrono::high_resolution_clock::now();
for (int i = 0; i < rows; ++i)
for (int j = 0; j < other.cols; ++j) {
for (int k = 0; k < cols; ++k)
result[i][j] += data[i][k] * other.data[k][j];
}
auto end_time = std::chrono::high_resolution_clock::now();
std::cout << "Matrix product calculated in: "
<< std::chrono::duration_cast<std::chrono::microseconds>(end_time - start_time).count()
<< " microseconds" << std::endl;
}
// 打印矩阵
void print() const {
for (const auto& row : data)
for (int val : row)
std::cout << val << ' ';
std::cout << '\n';
}
};
int main() {
Matrix matA(100, 100);
Matrix matB(100, 100);
matA.multiply(matB);
matA.print(); // 可选,打印结果矩阵
return 0;
}
```
在这个例子中,我们创建了两个大小为100x100的矩阵`matA`和`matB`,然后调用它们的`multiply`方法进行乘法运算,并计算所花费的时间。请注意,由于随机数生成,每次运行这段代码都会得到不同的结果和执行时间。
阅读全文