Ejemplo n.º 1
0
void matrix_inverse(Gmatrix *current,Gmatrix *inverse)
/*******************************************************************************
LAST MODIFIED : 4 November 1994

DESCRIPTION :
Returns the inverse of current in inverse.
==============================================================================*/
{
	GMATRIX_PRECISION determinant;

	ENTER(matrix_I);
	/* GMH hack to get 2d inverse working */
	/* check for 2d */
	if((current->data[2][2]==1.0)&&
		(current->data[0][2]==0.0)&&(current->data[2][0]==0.0)&&
		(current->data[1][2]==0.0)&&(current->data[2][1]==0.0))
	{
		/* 2d matrix */
		matrix_I(inverse);
		determinant = current->data[0][0]*current->data[1][1]-
			current->data[1][0]*current->data[0][1];
		inverse->data[0][0] = current->data[1][1]/determinant;
		inverse->data[1][1] = current->data[0][0]/determinant;
		inverse->data[1][0] = -current->data[1][0]/determinant;
		inverse->data[0][1] = -current->data[0][1]/determinant;
	}
	else
	{
		printf("???TEMP matrix_inverse is not implemented yet!");
	}
	LEAVE;
} /* matrix_inverse */
Ejemplo n.º 2
0
void matrix_rotate(Gmatrix *current,double angle,char axis)
/*******************************************************************************
LAST MODIFIED : 4 November 1995

DESCRIPTION :
Rotates in a right hand sense about the axis.
==============================================================================*/
{
	double cos_angle,sin_angle,new_angle;
	Gmatrix temp;

	ENTER(matrix_rotate);
	new_angle = angle*PI_180;
	sin_angle = sin(new_angle);
	cos_angle = cos(new_angle);
	matrix_I(&temp);
	switch (axis)
	{
		case 'x':
		case 'X':
		{
			temp.data[1][1] = cos_angle;
			temp.data[2][2] = cos_angle;
			temp.data[2][1] = sin_angle;
			temp.data[1][2] = -sin_angle;
		}; break;
		case 'y':
		case 'Y':
		{
			temp.data[0][0] = cos_angle;
			temp.data[2][2] = cos_angle;
			temp.data[2][0] = -sin_angle;
			temp.data[0][2] = sin_angle;
		}; break;
		case 'z':
		case 'Z':
		{
			temp.data[0][0] = cos_angle;
			temp.data[1][1] = cos_angle;
			temp.data[1][0] = sin_angle;
			temp.data[0][1] = -sin_angle;
		}; break;
	};
	matrix_premult(current,&temp);
	LEAVE;
} /* matrix_rotate */
Ejemplo n.º 3
0
int main(int argc, char **argv)
{

    int n;
    double **pFile, **e, **s;

    if (argc == 1) {
        printf("Please enter the file name which contain Matrix data!\n\nUsage: %s <filename>\n", argv[0]);
        exit(EXIT_FAILURE);
    }

    pFile = readMatrix(argv[1], &n, 1);
#ifdef DEBUG
    output_A(pFile, n, n);
#endif
    e = eliminate((const double **)pFile, n, n+1);
    if (!e)
        exit(EXIT_FAILURE);

    printf("RESULT...\n");
    output_A(e, n, n+1);

    s = solve(e, n);
    printf("方程的解为:\n");
    output_A(s, 1, n);

    // 求逆阵
    double **T = readMatrix("gauss_inverse", &n, 0);
    double **M_I = matrix_I(n);

    output_A(T, n, n);
#ifdef DEBUG_INVERSE
    printf("输出单位矩阵:\n");
    output_A(M_I, n, n);
#endif
    double **II = invers(T, M_I, n);
    revers(II, n, n);
    printf("输出逆阵:\n");
    output_A(II, n, n);
    printf("测试:\n");
    output_A(multi(T, II, n), n, n);

    return 0;
}