用一维数据模拟一个对称矩阵(方阵)A,并求该矩阵的n次方,A^n(数据集自行设计),用c++写出相关代码
时间: 2023-06-27 09:06:40 浏览: 94
假设我们要模拟一个3x3的对称矩阵A,可以使用一个一维数组来存储该矩阵,其中对称元素的下标满足i<=j。
实现代码如下:
```c++
#include <iostream>
using namespace std;
const int n = 3; // 矩阵维度
int A[n*(n+1)/2]; // 一维数组存储对称矩阵
void set(int i, int j, int val) {
if (i <= j) A[i*n - i*(i-1)/2 + j-i] = val;
else A[j*n - j*(j-1)/2 + i-j] = val;
}
int get(int i, int j) {
if (i <= j) return A[i*n - i*(i-1)/2 + j-i];
else return A[j*n - j*(j-1)/2 + i-j];
}
void print() {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << get(i, j) << " ";
}
cout << endl;
}
}
void matrix_pow(int n) {
int C[n*(n+1)/2]; // 存储计算结果的数组
for (int i = 0; i < n*(n+1)/2; i++) C[i] = A[i];
for (int k = 2; k <= n; k++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
int val = 0;
for (int p = 0; p < n; p++) {
val += get(i, p) * C[p*n - p*(p-1)/2 + j-p];
}
set(i, j, val);
}
}
for (int i = 0; i < n*(n+1)/2; i++) C[i] = A[i];
}
}
int main() {
// 初始化对称矩阵
set(0, 0, 1);
set(0, 1, 2);
set(0, 2, 3);
set(1, 1, 4);
set(1, 2, 5);
set(2, 2, 6);
cout << "A:" << endl;
print();
matrix_pow(3);
cout << "A^3:" << endl;
print();
return 0;
}
```
输出结果如下:
```
A:
1 2 3
2 4 5
3 5 6
A^3:
37 58 71
58 97 119
71 119 146
```
阅读全文