コード例 #1
0
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;
}
コード例 #2
0
ファイル: stage3b.c プロジェクト: pa345/lib
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;
}