个人学习笔记-矩阵的四则运算

1、矩阵的四则运算

1.1 矩阵的乘法运算

/*矩阵乘法
  C语言实现分解步骤:
  每一行去乘以第二个矩阵的各列
  乘积相加为一个元素
*/
void Matrix_Mul(char *Matrix_1, int Matrix_1_h, int Matrix_1_l, char *Matrix_2, int Matrix_2_h, int Matrix_2_l)
{
	if (Matrix_1_h != Matrix_2_l || Matrix_1_l != Matrix_2_l){
		printf("矩阵1的行列必须等于矩阵2的列行");
		return;
	}
	char *Matrix = (char *)calloc(1, Matrix_1_h * Matrix_2_l);
	char i, j, k;
	for (i = 0; i < Matrix_1_h; i++){
	
		for (j = 0; j < Matrix_2_l; j++){

			for (k = 0; k < Matrix_1_l; k++){
				*(Matrix + i * Matrix_2_l + j) += *(Matrix_1 + i * Matrix_1_l + k) * (*(Matrix_2 + k * Matrix_2_l + j));
			}
			printf("%2d ", *(Matrix + i * Matrix_2_l + j));

		}
		putchar('\n');

	}
	free(Matrix);
}

1.2矩阵的加法运算

/*矩阵加法
C语言实现分解步骤:
矩阵大小需要一致
对应位置相加
加法结果为一个元素
*/
void Matrix_Add(char *Matrix_1, int Matrix_1_h, int Matrix_1_l, char *Matrix_2, int Matrix_2_h, int Matrix_2_l)
{
	if (Matrix_1_h != Matrix_2_h || Matrix_1_l != Matrix_2_l){
		printf("矩阵2的行列必须等于矩阵2的行列");
		return;
	}
	char *Matrix = (char *)calloc(1, Matrix_1_h * Matrix_1_l);
	for (int i = 0; i < Matrix_1_h; i++){
		for (int j = 0; j < Matrix_1_l; j++){
			*(Matrix + i * Matrix_1_h + j) = *(Matrix_1 + i * Matrix_1_l + j) + *(Matrix_2 + i * Matrix_2_l + j);
			printf("%2d ", *(Matrix + i * Matrix_1_l + j));
		}
		putchar('\n');
	}

	free(Matrix);
}

1.3矩阵的减法运算

/*矩阵减法
C语言实现分解步骤:
矩阵大小需要一致
对应位置相减
减法结果为一个元素
*/
void Matrix_Sub(char *Matrix_1, int Matrix_1_h, int Matrix_1_l, char *Matrix_2, int Matrix_2_h, int Matrix_2_l)
{
	if (Matrix_1_h != Matrix_2_h || Matrix_1_l != Matrix_2_l){
		printf("矩阵2的行列必须等于矩阵2的行列");
		return;
	}
	char *Matrix = (char *)calloc(1, Matrix_1_h * Matrix_1_l);
	for (int i = 0; i < Matrix_1_h; i++){
		for (int j = 0; j < Matrix_1_l; j++){
			*(Matrix + i * Matrix_1_l + j) = *(Matrix_1 + i * Matrix_1_l + j) - *(Matrix_2 + i * Matrix_2_l + j);
			printf("%2d ", *(Matrix + i * Matrix_1_l + j));
		}
		putchar('\n');
	}

	free(Matrix);
}

2、接口测试

#define MATRIX_1_H   3
#define MATRIX_1_L   3
#define MATRIX_2_H   3
#define MATRIX_2_L   3
int main(){

	int i, j;
	char *Matrix_1 = (char *)calloc(1, MATRIX_1_H * MATRIX_1_L);
	for (i = 0; i < MATRIX_1_H; i++)
	{
		for (j = 0; j < MATRIX_1_L; j++){
			*(Matrix_1 + i * MATRIX_1_L + j) = i * MATRIX_1_L + j;
			printf("%2d ", *(Matrix_1 + i * MATRIX_1_L + j));
		}
		putchar('\n');
	}
	char *Matrix_2 = (char *)calloc(1, MATRIX_2_H * MATRIX_2_L);
	for (i = 0; i < MATRIX_2_H; i++)
	{
		for (j = 0; j < MATRIX_2_L; j++){
			*(Matrix_2 + i * MATRIX_2_L + j) = i * MATRIX_2_L + j;
			printf("%2d ", *(Matrix_1 + i * MATRIX_2_L + j));
		}
		putchar('\n');
	}
	Matrix_Mul(Matrix_1, MATRIX_2_H, MATRIX_2_L, Matrix_2, MATRIX_2_H, MATRIX_2_L);
	Matrix_Sub(Matrix_1, MATRIX_1_H, MATRIX_1_L, Matrix_2, MATRIX_2_H, MATRIX_2_L);
	Matrix_Add(Matrix_1, MATRIX_1_H, MATRIX_1_L, Matrix_2, MATRIX_2_H, MATRIX_2_L);
	free(Matrix_1);
	free(Matrix_2);
	getchar();
	return 0;
}

输出结果

	Matrix_1
	 0  1  2
	 3  4  5
	 6  7  8
	 Matrix_1
	 0  1  2
	 3  4  5
	 6  7  8
	乘法结果
	15 18 21
	42 54 66
	69 90 111
	减法结果
	 0  0  0
	 0  0  0
	 0  0  0
	 加法结果
	 0  2  4
	 6  8 10
	12 14 16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值