www.pudn.com > 医学算法.rar > matrix.c


/*
	inv - calculate inverse of 3x3 matrix
*/
inv_(a,b)
float   *a,*b;
{
	inv(a,b);
}
inv(a,b)
float	*a;
float	*b;
{
	float	det;
	register	i;


	b[0] = (a[4]*a[8] - a[5]*a[7]);
	b[3] = -(a[3]*a[8] - a[5]*a[6]);
	b[6] = (a[3]*a[7] - a[4]*a[6]);
	b[1] = -(a[1]*a[8] - a[2]*a[7]);
	b[4] = (a[0]*a[8] - a[2]*a[6]);
	b[7] = -(a[0]*a[7] - a[1]*a[6]);
	b[2] = (a[1]*a[5] - a[2]*a[4]);
	b[5] = -(a[0]*a[5] - a[2]*a[3]);
	b[8] = (a[0]*a[4] - a[1]*a[3]);

	det = a[0]*b[0] + a[1]*b[3] + a[2]*b[6];

	for(i=0;i<9;b[i++] =/ det);
}

/*
	mult - multiply two matrices

	c = a b
	a: NxM b: MxL c:NxL
*/
mult_(a,b,c,n,m,l)
float   *a,*b,*c;
long    int     *n,*m,*l;
{
	mult(a,b,c,(int)*n,(int)*m,(int)*l);
}
mult(a,b,c,n,m,l)
float	*a;
float	*b;
float	*c;
int     n;
int     m;
int     l;
{
	register	j,k;
	float   *ap,*bp;
	int	i;

	for(i=0;i