int main(int argc, char *argv[]) { int n, op; double *numbers; scanf("%d %d", &op, &n); numbers = create_jacobsthal_lucas(n); switch(op) { case 1: print_jacobsthal_lucas(n, numbers); break; case 2: print_variance(n, numbers); break; case 3: print_chebyshev(n, numbers); break; default: printf("Unknown Operator\n"); } free(numbers); return 0; }
int main(int argc, char *argv[]) { const size_t nmax = 60; const size_t mmax = GSL_MIN(nmax, 30); const double R = R_EARTH_KM; green_workspace *green_p = green_alloc(nmax, mmax, R); char *knm_file = "data/stage1_knm.dat"; char *sval_file = "data/stage2b_sval.dat"; char *U_file = "data/stage2b_U.dat"; char *variance_file = "variance_time.txt"; char *pc_file = "pc_time.txt"; char *recon_file = "recon_time.txt"; const double var_thresh = 0.99; gsl_vector *S; /* singular values of SDM */ gsl_matrix *U; /* left singular vectors of SDM */ gsl_matrix *alpha; /* alpha matrix, P-by-nt */ gsl_matrix *knmt; /* knm~ = U*alpha, nnm-by-nt */ gsl_matrix *knm; /* knm(t) matrix */ size_t nnm; size_t nt; /* number of time stamps */ size_t P; /* number of principal eigenvectors to use (<= T) */ while (1) { int c; int option_index = 0; static struct option long_options[] = { { 0, 0, 0, 0 } }; c = getopt_long(argc, argv, "", long_options, &option_index); if (c == -1) break; switch (c) { default: fprintf(stderr, "Usage: %s <-i stage1_matrix_file>\n", argv[0]); break; } } fprintf(stderr, "main: reading knm matrix from %s...", knm_file); knm = pca_read_matrix(knm_file); fprintf(stderr, "done (%zu-by-%zu matrix read)\n", knm->size1, knm->size2); fprintf(stderr, "main: reading singular values from %s...", sval_file); S = pca_read_vector(sval_file); fprintf(stderr, "done (%zu singular values read)\n", S->size); fprintf(stderr, "main: reading left singular vectors from %s...", U_file); U = pca_read_matrix(U_file); fprintf(stderr, "done (%zu-by-%zu matrix read)\n", U->size1, U->size2); /* plot a variance curve to help decide how many eigenvectors to keep */ fprintf(stderr, "main: writing variance curve to %s...", variance_file); print_variance(variance_file, S, var_thresh, &P); fprintf(stderr, "done (%zu singular vectors needed to explain %.1f%% of variance)\n", P, var_thresh * 100.0); nnm = U->size1; nt = knm->size2; fprintf(stderr, "main: using %zu largest eigenvectors\n", P); alpha = gsl_matrix_alloc(P, nt); knmt = gsl_matrix_alloc(nnm, nt); /* find alpha such that || knm - U*alpha || is * minimized in a least squares sense */ solve_PCA(P, knm, U, alpha, knmt); /* plot reconstructed time series using dominant PCs */ { const size_t n = 3; const int m = 1; const size_t cidx = green_nmidx(n, m, green_p); FILE *fp = fopen(recon_file, "w"); size_t i; fprintf(stderr, "main: writing reconstructed (%zu,%d) time series to %s...", n, m, recon_file); for (i = 0; i < nt; ++i) { double t = (double) i; fprintf(fp, "%f %f %f\n", t / 24.0, gsl_matrix_get(knm, cidx, i), gsl_matrix_get(knmt, cidx, i)); } fprintf(stderr, "done\n"); fclose(fp); } fprintf(stderr, "main: printing principle component maps to %s...", pc_file); print_pc_maps(pc_file, U, green_p); fprintf(stderr, "done\n"); gsl_matrix_free(U); gsl_matrix_free(alpha); gsl_matrix_free(knmt); gsl_matrix_free(knm); gsl_vector_free(S); green_free(green_p); return 0; }