⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.c

📁 该文件为c++的数学函数库!是一个非常有用的编程工具.它含有各种数学函数,为科学计算、工程应用等程序编写提供方便!
💻 C
📖 第 1 页 / 共 5 页
字号:
  gsl_matrix_memcpy(qr,m);  for(i=0; i<dim; i++) gsl_vector_set(rhs, i, i+1.0);  s += gsl_linalg_QRPT_decomp(qr, d, perm, &signum, norm);  s += gsl_linalg_QRPT_solve(qr, d, perm, rhs, x);  for(i=0; i<dim; i++) {    int foo = check(gsl_vector_get(x, i), actual[i], eps);    if(foo) {      printf("%3d[%d]: %22.18g   %22.18g\n", dim, i, gsl_vector_get(x, i), actual[i]);    }    s += foo;  }  gsl_vector_free(norm);  gsl_vector_free(x);  gsl_vector_free(d);  gsl_matrix_free(qr);  gsl_vector_free(rhs);  gsl_permutation_free(perm);  return s;}int test_QRPT_solve(void){  int f;  int s = 0;  f = test_QRPT_solve_dim(hilb2, hilb2_solution, 2 * 8.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QRPT_solve hilbert(2)");  s += f;  f = test_QRPT_solve_dim(hilb3, hilb3_solution, 2 * 64.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QRPT_solve hilbert(3)");  s += f;  f = test_QRPT_solve_dim(hilb4, hilb4_solution, 2 * 2048.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QRPT_solve hilbert(4)");  s += f;  f = test_QRPT_solve_dim(hilb12, hilb12_solution, 0.5);  gsl_test(f, "  QRPT_solve hilbert(12)");  s += f;  f = test_QRPT_solve_dim(vander2, vander2_solution, 8.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QRPT_solve vander(2)");  s += f;  f = test_QRPT_solve_dim(vander3, vander3_solution, 64.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QRPT_solve vander(3)");  s += f;  f = test_QRPT_solve_dim(vander4, vander4_solution, 1024.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QRPT_solve vander(4)");  s += f;  f = test_QRPT_solve_dim(vander12, vander12_solution, 0.05);  gsl_test(f, "  QRPT_solve vander(12)");  s += f;  return s;}inttest_QRPT_QRsolve_dim(const gsl_matrix * m, const double * actual, double eps){  int s = 0;  int signum;  size_t i, dim = m->size1;  gsl_permutation * perm = gsl_permutation_alloc(dim);  gsl_vector * rhs = gsl_vector_alloc(dim);  gsl_matrix * qr  = gsl_matrix_alloc(dim,dim);  gsl_matrix * q  = gsl_matrix_alloc(dim,dim);  gsl_matrix * r  = gsl_matrix_alloc(dim,dim);  gsl_vector * d = gsl_vector_alloc(dim);  gsl_vector * x = gsl_vector_alloc(dim);  gsl_vector * norm = gsl_vector_alloc(dim);  gsl_matrix_memcpy(qr,m);  for(i=0; i<dim; i++) gsl_vector_set(rhs, i, i+1.0);  s += gsl_linalg_QRPT_decomp2(qr, q, r, d, perm, &signum, norm);  s += gsl_linalg_QRPT_QRsolve(q, r, perm, rhs, x);  for(i=0; i<dim; i++) {    int foo = check(gsl_vector_get(x, i), actual[i], eps);    if(foo) {      printf("%3d[%d]: %22.18g   %22.18g\n", dim, i, gsl_vector_get(x, i), actual[i]);    }    s += foo;  }  gsl_vector_free(norm);  gsl_vector_free(x);  gsl_vector_free(d);  gsl_matrix_free(qr);  gsl_vector_free(rhs);  gsl_permutation_free(perm);  return s;}int test_QRPT_QRsolve(void){  int f;  int s = 0;  f = test_QRPT_QRsolve_dim(hilb2, hilb2_solution, 2 * 8.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QRPT_QRsolve hilbert(2)");  s += f;  f = test_QRPT_QRsolve_dim(hilb3, hilb3_solution, 2 * 64.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QRPT_QRsolve hilbert(3)");  s += f;  f = test_QRPT_QRsolve_dim(hilb4, hilb4_solution, 2 * 2048.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QRPT_QRsolve hilbert(4)");  s += f;  f = test_QRPT_QRsolve_dim(hilb12, hilb12_solution, 0.5);  gsl_test(f, "  QRPT_QRsolve hilbert(12)");  s += f;  f = test_QRPT_QRsolve_dim(vander2, vander2_solution, 8.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QRPT_QRsolve vander(2)");  s += f;  f = test_QRPT_QRsolve_dim(vander3, vander3_solution, 64.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QRPT_QRsolve vander(3)");  s += f;  f = test_QRPT_QRsolve_dim(vander4, vander4_solution, 1024.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QRPT_QRsolve vander(4)");  s += f;  f = test_QRPT_QRsolve_dim(vander12, vander12_solution, 0.05);  gsl_test(f, "  QRPT_QRsolve vander(12)");  s += f;  return s;}inttest_QRPT_decomp_dim(const gsl_matrix * m, double eps){  int s = 0, signum;  size_t i,j, M = m->size1, N = m->size2;  gsl_matrix * qr = gsl_matrix_alloc(M,N);  gsl_matrix * a  = gsl_matrix_alloc(M,N);  gsl_matrix * q  = gsl_matrix_alloc(M,M);  gsl_matrix * r  = gsl_matrix_alloc(M,N);  gsl_vector * d = gsl_vector_alloc(GSL_MIN(M,N));  gsl_vector * norm = gsl_vector_alloc(N);  gsl_permutation * perm = gsl_permutation_alloc(N);  gsl_matrix_memcpy(qr,m);  s += gsl_linalg_QRPT_decomp(qr, d, perm, &signum, norm);  s += gsl_linalg_QR_unpack(qr, d, q, r);  /* compute a = q r */  gsl_blas_dgemm (CblasNoTrans, CblasNoTrans, 1.0, q, r, 0.0, a);  /* Compute QR P^T by permuting the elements of the rows of QR */  for (i = 0; i < M; i++) {    gsl_vector_view row = gsl_matrix_row (a, i);    gsl_permute_vector_inverse (perm, &row.vector);  }  for(i=0; i<M; i++) {    for(j=0; j<N; j++) {      double aij = gsl_matrix_get(a, i, j);      double mij = gsl_matrix_get(m, i, j);      int foo = check(aij, mij, eps);      if(foo) {        printf("(%3d,%3d)[%d,%d]: %22.18g   %22.18g\n", M, N, i,j, aij, mij);      }      s += foo;    }  }  gsl_permutation_free (perm);  gsl_vector_free(norm);  gsl_vector_free(d);  gsl_matrix_free(qr);  gsl_matrix_free(a);  gsl_matrix_free(q);  gsl_matrix_free(r);  return s;}int test_QRPT_decomp(void){  int f;  int s = 0;  f = test_QRPT_decomp_dim(m35, 2 * 8.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QRPT_decomp m(3,5)");  s += f;  f = test_QRPT_decomp_dim(m53, 2 * 8.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QRPT_decomp m(5,3)");  s += f;  f = test_QRPT_decomp_dim(s35, 2 * 8.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QRPT_decomp s(3,5)");  s += f;  f = test_QRPT_decomp_dim(s53, 2 * 8.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QRPT_decomp s(5,3)");  s += f;  f = test_QRPT_decomp_dim(hilb2, 2 * 8.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QRPT_decomp hilbert(2)");  s += f;  f = test_QRPT_decomp_dim(hilb3, 2 * 64.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QRPT_decomp hilbert(3)");  s += f;  f = test_QRPT_decomp_dim(hilb4, 2 * 1024.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QRPT_decomp hilbert(4)");  s += f;  f = test_QRPT_decomp_dim(hilb12, 2 * 1024.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QRPT_decomp hilbert(12)");  s += f;  f = test_QRPT_decomp_dim(vander2, 8.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QRPT_decomp vander(2)");  s += f;  f = test_QRPT_decomp_dim(vander3, 64.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QRPT_decomp vander(3)");  s += f;  f = test_QRPT_decomp_dim(vander4, 1024.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QRPT_decomp vander(4)");  s += f;  f = test_QRPT_decomp_dim(vander12, 0.0005); /* FIXME: bad accuracy */  gsl_test(f, "  QRPT_decomp vander(12)");  s += f;  return s;}inttest_QR_update_dim(const gsl_matrix * m, double eps){  int s = 0;  size_t i,j,k, M = m->size1, N = m->size2;  gsl_vector * rhs = gsl_vector_alloc(N);  gsl_matrix * qr1  = gsl_matrix_alloc(M,N);  gsl_matrix * qr2  = gsl_matrix_alloc(M,N);  gsl_matrix * q1  = gsl_matrix_alloc(M,M);  gsl_matrix * r1  = gsl_matrix_alloc(M,N);  gsl_matrix * q2  = gsl_matrix_alloc(M,M);  gsl_matrix * r2  = gsl_matrix_alloc(M,N);  gsl_vector * d = gsl_vector_alloc(GSL_MIN(M,N));  gsl_vector * solution1 = gsl_vector_alloc(N);  gsl_vector * solution2 = gsl_vector_alloc(N);  gsl_vector * u = gsl_vector_alloc(M);  gsl_vector * v = gsl_vector_alloc(N);  gsl_vector * w = gsl_vector_alloc(M);  gsl_matrix_memcpy(qr1,m);  gsl_matrix_memcpy(qr2,m);  for(i=0; i<N; i++) gsl_vector_set(rhs, i, i+1.0);  for(i=0; i<M; i++) gsl_vector_set(u, i, sin(i+1.0));  for(i=0; i<N; i++) gsl_vector_set(v, i, cos(i+2.0) + sin(i*i+3.0));  for(i=0; i<M; i++)     {      double ui = gsl_vector_get(u, i);      for(j=0; j<N; j++)         {          double vj = gsl_vector_get(v, j);          double qij = gsl_matrix_get(qr1, i, j);          gsl_matrix_set(qr1, i, j, qij + ui * vj);        }    }  s += gsl_linalg_QR_decomp(qr2, d);  s += gsl_linalg_QR_unpack(qr2, d, q2, r2);  /* compute w = Q^T u */        for (j = 0; j < M; j++)    {      double sum = 0;      for (i = 0; i < M; i++)          sum += gsl_matrix_get (q2, i, j) * gsl_vector_get (u, i);      gsl_vector_set (w, j, sum);    }  s += gsl_linalg_QR_update(q2, r2, w, v);  /* compute qr2 = q2 * r2 */  for (i = 0; i < M; i++)    {      for (j = 0; j< N; j++)        {          double sum = 0;          for (k = 0; k <= GSL_MIN(j,M-1); k++)            {              double qik = gsl_matrix_get(q2, i, k);              double rkj = gsl_matrix_get(r2, k, j);              sum += qik * rkj ;            }          gsl_matrix_set (qr2, i, j, sum);        }    }  for(i=0; i<M; i++) {    for(j=0; j<N; j++) {      double s1 = gsl_matrix_get(qr1, i, j);      double s2 = gsl_matrix_get(qr2, i, j);            int foo = check(s1, s2, eps);      if(foo) {        printf("(%3d,%3d)[%d,%d]: %22.18g   %22.18g\n", M, N, i,j, s1, s2);      }      s += foo;    }  }  gsl_vector_free(solution1);  gsl_vector_free(solution2);  gsl_vector_free(d);  gsl_vector_free(u);  gsl_vector_free(v);  gsl_vector_free(w);  gsl_matrix_free(qr1);  gsl_matrix_free(qr2);  gsl_matrix_free(q1);  gsl_matrix_free(r1);  gsl_matrix_free(q2);  gsl_matrix_free(r2);  gsl_vector_free(rhs);  return s;}int test_QR_update(void){  int f;  int s = 0;  f = test_QR_update_dim(m35, 2 * 512.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QR_update m(3,5)");  s += f;  f = test_QR_update_dim(m53, 2 * 512.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QR_update m(5,3)");  s += f;  f = test_QR_update_dim(hilb2,  2 * 512.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QR_update hilbert(2)");  s += f;  f = test_QR_update_dim(hilb3,  2 * 512.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QR_update hilbert(3)");  s += f;  f = test_QR_update_dim(hilb4, 2 * 1024.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QR_update hilbert(4)");  s += f;  f = test_QR_update_dim(hilb12, 2 * 1024.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QR_update hilbert(12)");  s += f;  f = test_QR_update_dim(vander2, 8.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QR_update vander(2)");  s += f;  f = test_QR_update_dim(vander3, 64.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QR_update vander(3)");  s += f;  f = test_QR_update_dim(vander4, 1024.0 * GSL_DBL_EPSILON);  gsl_test(f, "  QR_update vander(4)");  s += f;  f = test_QR_update_dim(vander12, 0.0005); /* FIXME: bad accuracy */  gsl_test(f, "  QR_update vander(12)");  s += f;  return s;}inttest_SV_solve_dim(const gsl_matrix * m, const double * actual, double eps){  int s = 0;  size_t i, dim = m->size1;  gsl_vector * rhs = gsl_vector_alloc(dim);  gsl_matrix * u  = gsl_matrix_alloc(dim,dim);  gsl_matrix * q  = gsl_matrix_alloc(dim,dim);  gsl_vector * d = gsl_vector_alloc(dim);  gsl_vector * x = gsl_vector_calloc(dim);  gsl_matrix_memcpy(u,m);  for(i=0; i<dim; i++) gsl_vector_set(rhs, i, i+1.0);  s += gsl_linalg_SV_decomp(u, q, d, x);  s += gsl_linalg_SV_solve(u, q, d, rhs, x);  for(i=0; i<dim; i++) {    int foo = check(gsl_vector_get(x, i), actual[i], eps);    if(foo) {      printf("%3d[%d]: %22.18g   %22.18g\n", dim, i, gsl_vector_get(x, i), actual[i]);    }    s += foo;  }  gsl_vector_free(x);  gsl_vector_free(d);  gsl_matrix_free(u);  gsl_matrix_free(q);  gsl_vector_free(rhs);  return s;}int test_SV_solve(void){  int f;  int s = 0;  f = test_SV_solve_dim(hilb2, hilb2_solution, 2 * 8.0 * GSL_DBL_EPSILON);  gsl_test(f, "  SV_solve hilbert(2)");  s += f;  f = test_SV_solve_dim(hilb3, hilb3_solution, 2 * 64.0 * GSL_DBL_EPSILON);  gsl_test(f, "  SV_solve hilbert(3)");  s += f;  f = test_SV_solve_dim(hilb4, hilb4_solution, 2 * 1024.0 * GSL_DBL_EPSILON);  gsl_test(f, "  SV_solve hilbert(4)");  s += f;  f = test_SV_solve_dim(hilb12, hilb12_solution, 0.5);  gsl_test(f, "  SV_solve hilbert(12)");  s += f;  f = test_SV_solve_dim(vander2, vander2_solution, 64.0 * GSL_DBL_EPSILON);  gsl_test(f, "  SV_solve vander(2)");  s += f;  f = test_SV_solve_dim(vander3, vander3_solution, 64.0 * GSL_DBL_EPSILON);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -