矩阵基本运算

    返回首页    发表留言
本文作者:李德强
          第三章 矩阵乘法
 
 

        我们根据矩阵乘法的计算公式和条件看两个矩阵相乘的例子:

        需要注意的是,两个矩阵相乘时,只有当第一个矩阵(左侧矩阵)的列数等于第二个矩阵(右侧矩阵)的行数时,两个矩阵才能相乘。

        我们来实现矩阵相乘的代码:

//矩阵相乘
int matrix_mult(s_Matrix *result, s_Matrix *src, s_Matrix *src1)
{
	if (result == null)
	{
		return -1;
	}

	if (result->v == null)
	{
		return -1;
	}

	if (src == null)
	{
		return -1;
	}

	if (src->v == null)
	{
		return -1;
	}

	if (src->m <= 0 || src->n <= 0)
	{
		return -1;
	}

	if (src1 == null)
	{
		return -1;
	}

	if (src1->v == null)
	{
		return -1;
	}

	if (src1->m <= 0 || src1->n <= 0)
	{
		return -1;
	}

	//只有当第一个矩阵(左侧矩阵)的列数等于第二个矩阵(右侧矩阵)的行数时,两个矩阵才能相乘
	if (src->n != src1->m)
	{
		return -1;
	}

	//结果矩阵的行数为第一个矩阵的行数
	result->m = src->m;
	//结果矩阵的列数为第二个矩阵的列数
	result->n = src1->n;

	//循环每行
	for (int i = 0; i < result->m; i++)
	{
		//循环每列
		for (int j = 0; j < result->n; j++)
		{
			//计算第一个矩阵与第二个矩阵的乘法结果的累加和
			num v = 0;
			for (int k = 0; k < src->n; k++)
			{
				//乘法结果的累加和
				v += src->v[i * src->n + k] * src1->v[k * src1->n + j];
			}
			//得到结果
			result->v[i * result->n + j] = v;
		}
	}

	return 0;
}

        本教程所使用的源代码完全开放、免费。你可以自由的使用和修改本教程中的所有源代码:

git@github.com:magicworldos/matrix.git
https://github.com/magicworldos/matrix.git

    返回首页    返回顶部
  看不清?点击刷新

 

  Copyright © 2015-2018 问渠网 辽ICP备15013245号