Exemplo n.º 1
0
vector alg_new_vector(int n)
{
	vector v;
	v = alg_newvec(n);
	if (v == NULL) alg_error("alg error");
	return v;
}
Exemplo n.º 2
0
double alg_matinv(int n, matrix a, matrix a_inv)
{
	int i, j, k, ii;
	double t, det;
	int *ip;   /* 行交換の情報 */
	ip = (int *)malloc(sizeof(int) * n);
	if (ip == NULL) alg_error("記憶領域不足");
	det = alg_lu(n, a, ip);
	if (det != 0)
		for (k = 0; k < n; k++) {
			for (i = 0; i < n; i++) {
				ii = ip[i];  t = (ii == k);
				for (j = 0; j < i; j++)
					t -= a[ii][j] * a_inv[j][k];
				a_inv[i][k] = t;
			}
			for (i = n - 1; i >= 0; i--) {
				t = a_inv[i][k];  ii = ip[i];
				for (j = i + 1; j < n; j++)
					t -= a[ii][j] * a_inv[j][k];
				a_inv[i][k] = t / a[ii][i];
			}
		}
	free(ip);
	return det;
}
Exemplo n.º 3
0
double alg_det(int n, matrix a)
{
	double det;  /* 行列式 */
	int *ip;     /* 行交換の情報 */
	ip = (int *)malloc(sizeof(int) * n);       /* 記憶領域確保 */
	if (ip == NULL) alg_error("記憶領域不足");
	det = alg_lu(n, a, ip);                    /* LU分解 */
	free(ip);                                  /* 記憶領域の解放 */
	return det;                                /* 行列式 */
}
Exemplo n.º 4
0
double alg_gauss(int n, matrix a, vector b, vector x)
{
	double det;  /* 行列式 */
	int *ip;     /* 行交換の情報 */
	ip = (int *)malloc(sizeof(int) * n);      /* 記憶領域確保 */
	if (ip == NULL) alg_error("記憶領域不足");
	det = alg_lu(n, a, ip);                   /* LU分解 */
	if (det != 0) alg_solve(n, a, b, ip, x);  /* 連立方程式を解く */
	free(ip);                                 /* 記憶領域の解放 */
	return det;                               /* 戻り値は行列式 */
}