矩阵基本运算

    返回首页    发表留言
本文作者:李德强
          第六章 伴随矩阵
 
 

        伴随矩阵的计算方法比较简单,但是它的计算需要用到我们之前的行列式计算的函数。它的定义是:将矩阵中的每一个元素抹去它所在的行和列,从而得到新的行列式的值作为这个元素所在位置的值。这样,这个新矩阵就叫作原矩阵的伴随矩阵。

        我们来看一下代码:

//伴随矩阵
int matrix_adjoint(s_Matrix *result, s_Matrix *src)
{
	if (result == null)
	{
		return -1;
	}

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

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

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

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

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

	//必须是方阵
	if (src->m != src->n)
	{
		return -1;
	}

	result->m = src->m;
	result->n = src->n;

	if (src->m == 1)
	{
		result->v[0] = 1;
		return 0;
	}

	int cm = src->m - 1;
	int cn = src->n - 1;

	s_Matrix cofactor;
	matrix_init(&cofactor, cm, cn);

	//计算每一个元素的代数余子式并作为这个元素所在位置的值
	for (int i = 0; i < src->m; i++)
	{
		for (int j = 0; j < src->n; j++)
		{
			for (int k = 0, ck = 0; k < src->m; k++)
			{
				//抹去第i行
				if (k != i)
				{
					for (int l = 0, cl = 0; l < src->n; l++)
					{
						//抹去第j列
						if (l != j)
						{
							//计算值
							cofactor.v[ck * cofactor.n + cl] = src->v[k * src->n + l];
							cl++;
						}
					}
					ck++;
				}
			}
			num det = 0;
			//计算代数余子式
			matrix_determinant(&det, &cofactor);
			//用代数余子式做为新元素
			result->v[j * result->n + i] = pow(-1, i + j) * det;
		}
	}

	matrix_destory(&cofactor);

	return 0;
}

 

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

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

 

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

 

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