使用c++,1、 使用二维数组初始化两个需要进行矩阵乘法运算的矩阵,同时显示可以进行 的矩阵乘法运算方式:a 矩阵的普通乘法,b 矩阵的哈达马积,c 矩阵的克 罗内克积,d 复数矩阵的普通乘
时间: 2024-05-04 08:20:44 浏览: 195
以下是使用C++语言实现的矩阵乘法运算的代码,其中包括了普通乘法、哈达马积、克罗内克积和复数矩阵的普通乘法:
```c++
#include <iostream>
using namespace std;
const int N = 3; // 矩阵大小
// 普通矩阵乘法
void matrix_mul(int a[][N], int b[][N], int c[][N]) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
c[i][j] = 0;
for (int k = 0; k < N; k++) {
c[i][j] += a[i][k] * b[k][j];
}
}
}
}
// 哈达马积
void hadamard_product(int a[][N], int b[][N], int c[][N]) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
c[i][j] = a[i][j] * b[i][j];
}
}
}
// 克罗内克积
void kronecker_product(int a[][N], int b[][N], int c[][N*N]) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
for (int p = 0; p < N; p++) {
for (int q = 0; q < N; q++) {
c[i*N+p][j*N+q] = a[i][j] * b[p][q];
}
}
}
}
}
// 复数矩阵乘法
struct complex {
int real, imag;
complex(int r=0, int i=0): real(r), imag(i) {}
};
void complex_matrix_mul(complex a[][N], complex b[][N], complex c[][N]) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
c[i][j] = complex(0, 0);
for (int k = 0; k < N; k++) {
c[i][j].real += a[i][k].real * b[k][j].real - a[i][k].imag * b[k][j].imag;
c[i][j].imag += a[i][k].real * b[k][j].imag + a[i][k].imag * b[k][j].real;
}
}
}
}
int main() {
// 初始化两个矩阵
int a[N][N] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int b[N][N] = {{9, 8, 7}, {6, 5, 4}, {3, 2, 1}};
// 显示可以进行的矩阵乘法运算方式
cout << "可以进行的矩阵乘法运算方式有:" << endl;
cout << "a 矩阵的普通乘法" << endl;
cout << "b 矩阵的哈达马积" << endl;
cout << "c 矩阵的克罗内克积" << endl;
cout << "d 复数矩阵的普通乘法" << endl;
// 选择矩阵乘法运算方式并输出结果
char op;
cout << "请选择矩阵乘法运算方式:";
cin >> op;
cout << "运算结果为:" << endl;
switch (op) {
case 'a': {
int c[N][N];
matrix_mul(a, b, c);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cout << c[i][j] << " ";
}
cout << endl;
}
break;
}
case 'b': {
int c[N][N];
hadamard_product(a, b, c);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cout << c[i][j] << " ";
}
cout << endl;
}
break;
}
case 'c': {
int c[N*N][N*N];
kronecker_product(a, b, c);
for (int i = 0; i < N*N; i++) {
for (int j = 0; j < N*N; j++) {
cout << c[i][j] << " ";
}
cout << endl;
}
break;
}
case 'd': {
complex a_c[N][N] = {{{1, 2}, {3, 4}, {5, 6}}, {{7, 8}, {9, 10}, {11, 12}}, {{13, 14}, {15, 16}, {17, 18}}};
complex b_c[N][N] = {{{18, 17}, {16, 15}, {14, 13}}, {{12, 11}, {10, 9}, {8, 7}}, {{6, 5}, {4, 3}, {2, 1}}};
complex c[N][N];
complex_matrix_mul(a_c, b_c, c);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cout << c[i][j].real << "+" << c[i][j].imag << "i ";
}
cout << endl;
}
break;
}
default:
cout << "无效的选择!" << endl;
}
return 0;
}
```
以上代码中,我们使用二维数组来表示矩阵,使用四个函数分别实现了普通矩阵乘法、哈达马积、克罗内克积和复数矩阵的普通乘法。我们还使用了一个字符变量来选择矩阵乘法运算方式,并在程序中输出了可以进行的矩阵乘法运算方式。最后,根据用户的选择,输出矩阵乘法的运算结果。
阅读全文