static int oper_test(void) {int nrow, ncol; PM_matrix *m, *t, *b, *a, *c; nrow = 5; ncol = 3; m = PM_create(nrow, ncol); CFREE(m->array); m->array = (double *) a1; b = PM_create(nrow, 1); CFREE(b->array); b->array = (double *) b1; PRINT(STDOUT, "\nMatrix M\n"); PM_print(m); PRINT(STDOUT, "\nMatrix B\n"); PM_print(b); PRINT(STDOUT, "\nMatrix tr(M)\n"); PM_print(t = PM_transpose(m)); PRINT(STDOUT, "\nA = tr(M).M (piecewise)\n"); PM_print(a = PM_times(t, m)); PM_destroy(t); PRINT(STDOUT, "\nT = tr(M).M (nested)\n"); PM_print(c = PM_times(t = PM_transpose(m), m)); PM_destroy(c); PRINT(STDOUT, "\nC = tr(M).B\n"); PM_print(c = PM_times(t, b)); PM_destroy(t); PRINT(STDOUT, "\nSolve A.X = C\n"); PM_print(PM_solve(a, c)); PM_destroy(a); PM_destroy(c); PRINT(STDOUT, "\nTest LU decomposition\n"); a = PM_create(3, 3); CFREE(a->array); a->array = (double *) tstd; PRINT(STDOUT, "\nMatrix A\n"); PM_print(a); PRINT(STDOUT, "\nc = (A)^-1\n"); PM_print(c = PM_inverse(a)); PRINT(STDOUT, "\nc.A\n"); PM_print(t = PM_times(c, a)); PM_destroy(t); PM_destroy(c); CFREE(a); CFREE(b); CFREE(m); return(TRUE);}
int tst3(int n) {int ok; PM_matrix *a, *b, *val; printf("Test #3\n"); a = test_matrix(n); b = PM_create(a->nrow, a->ncol); PM_copy(b, a); /* find eigenvalues and eigenvectors */ val = PM_eigensys(a); printf("Eigenvalues for A:\n"); PM_print(val); printf("Eigenvectors for A:\n"); PM_print(a); /* verify */ ok = check_matrix(a, b, val); PM_destroy(val); PM_destroy(a); PM_destroy(b); return(ok);}
int main() { ParameterManager * params = PM_create(4); PM_manage(params,"studentname",STRING_TYPE,1); PM_manage(params,"id",INT_TYPE,1); PM_manage(params,"regstat",BOOLEAN_TYPE,1); PM_manage(params,"marks",LIST_TYPE,1); PM_manage(params,"average",REAL_TYPE,0); printf("Success?: %d\n", PM_destroy(params)); }
PM_matrix *test_matrix(int n) {int i, j, l; double f; PM_matrix *a; switch (n) /* trivial diagonal matrix with eigenvalues 1, -1 */ {case 0: a = PM_create(2, 2); PM_zero(a); PM_element(a, 1, 1) = 1.0; PM_element(a, 2, 2) = -1.0; break; /* fairly trivial matrix with eigenvalues 1, 2, 4 */ case 1: a = PM_create(3, 3); PM_zero(a); PM_element(a, 1, 1) = 2.0; PM_element(a, 2, 2) = 2.0; PM_element(a, 3, 3) = 3.0; PM_element(a, 2, 3) = sqrt(2.0); PM_element(a, 3, 2) = sqrt(2.0); break; /* arbitrarily chosen dense matrix */ case 2: a = PM_create(5, 5); PM_zero(a); for (i = 1; i <= 5; i++) for (j = i; j <= 5; j++) {f = 3.14*i + 2.71*j*j; l = floor(f); l %= 7; f -= l; PM_element(a, i, j) = f; PM_element(a, j, i) = f;}; break;}; printf("Matrix A:\n"); PM_print(a); return(a);}
//Creates the LL and adds the manditory items JNIEXPORT void JNICALL Java_Dialogc_DialogcCreate(JNIEnv *env, jobject obj, jint size) { //Destroy somewhere params = PM_create(size); PM_manage(params,"title",STRING_TYPE,1); PM_manage(params,"fields",LIST_TYPE,1); PM_manage(params,"buttons",LIST_TYPE,1); }
PM_matrix *PM_eigensys(PM_matrix *a) {int i, n, rv; PM_matrix *r, *x; x = NULL; if (a != NULL) {if (a->nrow == a->ncol) {n = a->nrow; r = _PM_hrsymatr(a, TRUE); rv = _PM_ql_tri_eigen(r, a, TRUE); if (rv == TRUE) {x = PM_create(n, 1); for (i = 1; i <= n; i++) PM_element(x, i, 1) = PM_element(r, i, 1);}; PM_destroy(r);};}; return(x);}
static int det_test(void) {int i, n, rv; double det; PM_matrix *m; n = 3; m = PM_create(n, n); n = n*n; for (i = 0; i < n; i++) m->array[i] = 0.0; PM_element(m, 1, 1) = 1.0; PM_element(m, 2, 3) = 1.0; PM_element(m, 3, 2) = 1.0; det = PM_determinant(m); PM_destroy(m); rv = (det == -1.0); return(rv);}
int tst2(int n) {int rv; PM_matrix *a, *b; printf("Test #2\n"); a = test_matrix(n); b = PM_create(a->nrow, a->ncol); PM_copy(b, a); /* find the right eigenvectors */ rv = PM_eigenvectors(a); if (rv == TRUE) {printf("Eigenvectors for A:\n"); PM_print(a);}; /* verify */ rv &= check_matrix(a, b, NULL); PM_destroy(a); return(rv);}
JNIEXPORT void JNICALL Java_ConfigManager_create(JNIEnv *env, jobject obj) { SetJavaPMPointer(env, obj, PM_create(25)); }
PM_matrix *_PM_hrsymatr(PM_matrix *a, int cmv) {int i, j, k, l, n; double f, g, h, nrm, inrm, u, v; PM_matrix *r; if (a->nrow != a->ncol) return(NULL); n = a->nrow; r = PM_create(n, 2); for (i = n; i >= 2; i--) {l = i - 1; h = 0.0; nrm = 0.0; if (l > 1) {for (k = 1; k <= l; k++) nrm += fabs(PM_element(a, i, k)); /* skip transformation */ if (nrm == 0.0) PM_element(r, i, 2) = PM_element(a, i, l); else {inrm = 1.0/nrm; for (k = 1; k <= l; k++) {v = PM_element(a, i, k); v *= inrm; h += v*v; PM_element(a, i, k) = v;}; f = PM_element(a, i, l); g = sqrt(h); g *= ((f > 0.0) ? -1.0 : 1.0); PM_element(r, i, 2) = nrm*g; h -= f*g; PM_element(a, i, l) = f - g; f = 0.0; for (j = 1; j <= l; j++) {if (cmv == TRUE) PM_element(a, j, i) = PM_element(a, i, j)/h; g = 0.0; for (k = 1; k <= j; k++) g += PM_element(a, j, k)*PM_element(a, i, k); for (k = j+1; k <= l; k++) g += PM_element(a, k, j)*PM_element(a, i, k); PM_element(r, j, 2) = g/h; f += PM_element(r, j, 2)*PM_element(a, i, j);}; u = f/(h + h); for (j = 1; j <= l; j++) {f = PM_element(a, i, j); g = PM_element(r, j, 2) - u*f; PM_element(r, j, 2) = g; for (k = 1; k <= j; k++) PM_element(a, j, k) -= (f*PM_element(r, k, 2) + g*PM_element(a, i, k));};};} else PM_element(r, i, 2) = PM_element(a, i, l); PM_element(r, i, 1) = h;}; PM_element(r, 1, 2) = 0.0; if (cmv == TRUE) {PM_element(r, 1, 1) = 0.0; for (i = 1; i <= n; i++) {l = i - 1; if (PM_element(r, i, 1) != 0.0) {for (j = 1; j <= l; j++) {g =0.0; for (k = 1; k <= l; k++) g += PM_element(a, i, k)*PM_element(a, k, j); for (k = 1; k <= l; k++) PM_element(a, k, j) -= g*PM_element(a, k, i);};}; PM_element(r, i, 1) = PM_element(a, i, i); PM_element(a, i, i) = 1.0; for (j = 1; j <= l; j++) {PM_element(a, j, i) = 0.0; PM_element(a, i, j) = 0.0;};};} else {for (i = 1; i <= n; i++) PM_element(a, i, i) = 1.0;}; return(r);}