用c++写一个计算二阶方阵幂数的函数
时间: 2023-06-18 20:08:29 浏览: 53
可以按照以下方式编写一个计算二阶方阵幂数的函数:
```c++
#include <iostream>
#include <vector>
using namespace std;
vector<vector<int>> matrixPower(vector<vector<int>>& matrix, int n) {
if (matrix.size() != 2 || matrix[0].size() != 2 || matrix[1].size() != 2) {
throw invalid_argument("The input matrix is not a 2x2 matrix!");
}
if (n == 0) {
return {{1, 0}, {0, 1}}; // return identity matrix
}
if (n == 1) {
return matrix; // return the original matrix
}
auto halfPower = matrixPower(matrix, n / 2);
auto result = multiplyMatrix(halfPower, halfPower);
if (n % 2 == 1) {
result = multiplyMatrix(result, matrix);
}
return result;
}
vector<vector<int>> multiplyMatrix(vector<vector<int>>& matrix1, vector<vector<int>>& matrix2) {
vector<vector<int>> result(matrix1.size(), vector<int>(matrix2[0].size(), 0));
for (int i = 0; i < matrix1.size(); ++i) {
for (int j = 0; j < matrix2[0].size(); ++j) {
for (int k = 0; k < matrix1[0].size(); ++k) {
result[i][j] += matrix1[i][k] * matrix2[k][j];
}
}
}
return result;
}
int main() {
vector<vector<int>> matrix{{1, 1}, {1, 0}};
int n = 5;
auto result = matrixPower(matrix, n);
cout << "The result is:" << endl;
for (auto row : result) {
for (auto element : row) {
cout << element << " ";
}
cout << endl;
}
return 0;
}
```
这个函数使用递归的方式来求解矩阵的幂,其思路是将矩阵幂分解成若干个二次幂的乘积,然后利用矩阵乘法的结合律和分配律,将这些二次幂的乘积计算出来。在计算二次幂的时候,可以递归调用自身来进行计算。注意,为了避免重复计算,我们可以将计算过的矩阵幂保存下来,这样可以在下次计算时直接使用,而不需要重复计算。