C语言科学计算入门之矩阵乘法的相关计算
什么是矩阵乘法?
矩阵乘法是一种常见的矩阵计算方式,它可以用来解决多个线性方程组的问题。
假设有两个矩阵 $A$ 和 $B$,它们的维度分别为 $m \times n$ 和 $n \times k$,则它们的乘积是一个 $m \times k$ 的矩阵 $C$,公式为:
$$C_{i,j} = \sum_{r=1}^{n} A_{i,r} \times B_{r,j}$$
其中,$C_{i,j}$ 表示 $C$ 矩阵中第 $i$ 行第 $j$ 列的元素。
矩阵乘法的实现
为了实现矩阵乘法,我们需要写一个函数,输入两个矩阵 $A$ 和 $B$,输出它们的乘积 $C$。以下是一个用 C 语言实现的矩阵乘法函数:
void matrix_multiply(double A[], double B[], double C[], int m, int n, int k) {
int i, j, r;
for (i = 0; i < m; i++) {
for (j = 0; j < k; j++) {
C[i*k+j] = 0;
for (r = 0; r < n; r++) {
C[i*k+j] += A[i*n+r] * B[r*k+j];
}
}
}
}
参数说明:
A
:矩阵 $A$ 的元素数组,按行存储,长度为 $m \times n$B
:矩阵 $B$ 的元素数组,按行存储,长度为 $n \times k$C
:输出矩阵 $C$ 的元素数组,按行存储,长度为 $m \times k$m
:矩阵 $A$ 的行数n
:矩阵 $A$ 的列数和矩阵 $B$ 的行数k
:矩阵 $B$ 的列数
示例说明
下面我们通过两个示例说明如何使用上面的矩阵乘法函数。
示例1
假设有两个 $2 \times 3$ 的矩阵 $A$ 和 $B$:
A = [1, 2, 3,
4, 5, 6]
B = [7, 8,
9, 10,
11, 12]
它们的乘积为:
C = [58, 64,
139, 154]
我们可以使用如下代码来计算:
int main() {
double A[] = {1, 2, 3, 4, 5, 6};
double B[] = {7, 8, 9, 10, 11, 12};
double C[4];
matrix_multiply(A, B, C, 2, 3, 2);
// 输出 C
int i;
for (i = 0; i < 4; i++) {
printf("%f ", C[i]);
}
printf("\n");
return 0;
}
输出结果为:
58.000000 64.000000 139.000000 154.000000
示例2
假设有两个 $3 \times 2$ 的随机矩阵 $A$ 和 $B$:
A = [0.25, 0.16,
0.54, 0.43,
0.37, 0.28]
B = [0.14, 0.78,
0.63, 0.51]
它们的乘积为:
C = [0.1191, 0.2175,
0.3819, 0.7182,
0.2435, 0.4606]
我们可以使用如下代码来计算:
int main() {
double A[] = {0.25, 0.16, 0.54, 0.43, 0.37, 0.28};
double B[] = {0.14, 0.78, 0.63, 0.51};
double C[6];
matrix_multiply(A, B, C, 3, 2, 2);
// 输出 C
int i;
for (i = 0; i < 6; i++) {
printf("%f ", C[i]);
}
printf("\n");
return 0;
}
输出结果为:
0.119100 0.217500 0.381900 0.718200 0.243500 0.460600
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言科学计算入门之矩阵乘法的相关计算 - Python技术站