C语言实现复数矩阵MxM与复数矩阵MxN的相乘
时间: 2023-11-29 17:05:51 浏览: 175
C语言实现两个矩阵相乘
以下是C语言实现复数矩阵MxM与复数矩阵MxN的相乘的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <complex.h>
#define M 2
#define N 3
void complex_matrix_multiply(int m1, int n1, double complex mat1[][n1], int m2, int n2, double complex mat2[][n2], double complex result[][n2]);
int main()
{
double complex mat1[M][M] = {{1 + 2*I, 3 + 4*I}, {5 + 6*I, 7 + 8*I}};
double complex mat2[M][N] = {{9 + 10*I, 11 + 12*I, 13 + 14*I}, {15 + 16*I, 17 + 18*I, 19 + 20*I}};
double complex result[M][N];
complex_matrix_multiply(M, M, mat1, M, N, mat2, result);
printf("Result:\n");
for(int i = 0; i < M; i++)
{
for(int j = 0; j < N; j++)
{
printf("%.2f + %.2fi ", creal(result[i][j]), cimag(result[i][j]));
}
printf("\n");
}
return 0;
}
void complex_matrix_multiply(int m1, int n1, double complex mat1[][n1], int m2, int n2, double complex mat2[][n2], double complex result[][n2])
{
if(n1 != m2)
{
printf("The matrices cannot be multiplied!\n");
exit(1);
}
for(int i = 0; i < m1; i++)
{
for(int j = 0; j < n2; j++)
{
double complex sum = 0 + 0*I;
for(int k = 0; k < n1; k++)
{
sum += mat1[i][k] * mat2[k][j];
}
result[i][j] = sum;
}
}
}
```
在这个示例代码中,我们定义了两个复数矩阵 `mat1` 和 `mat2`,然后调用 `complex_matrix_multiply` 函数对它们进行相乘,并将结果存储在 `result` 矩阵中。
`complex_matrix_multiply` 函数的实现中,我们首先检查矩阵是否可以相乘,如果不能相乘,则打印错误消息并退出程序。然后,我们使用三个嵌套循环计算矩阵相乘的每个元素,并将结果存储在 `result` 矩阵中。
注意,在这个示例代码中,我们使用了 `<complex.h>` 头文件中的复数类型和相关的函数和宏定义。具体来说,我们使用了 `double complex` 类型来表示复数,`creal` 和 `cimag` 函数分别返回一个复数的实部和虚部。
阅读全文