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

📄 test_funcs.c

📁 该文件为c++的数学函数库!是一个非常有用的编程工具.它含有各种数学函数,为科学计算、工程应用等程序编写提供方便!
💻 C
📖 第 1 页 / 共 2 页
字号:
/* Wood function */gsl_multiroot_function_fdf wood ={&wood_f, &wood_df, &wood_fdf, 4, 0};voidwood_initpt (gsl_vector * x){  gsl_vector_set (x, 0, -3.0);  gsl_vector_set (x, 1, -1.0);  gsl_vector_set (x, 2, -3.0);  gsl_vector_set (x, 3, -1.0);}intwood_f (const gsl_vector * x, void *params, gsl_vector * f){  double x0 = gsl_vector_get (x, 0);  double x1 = gsl_vector_get (x, 1);  double x2 = gsl_vector_get (x, 2);  double x3 = gsl_vector_get (x, 3);  double t1 = x1 - x0 * x0;  double t2 = x3 - x2 * x2;  double y0 = -200.0 * x0 * t1 - (1 - x0);  double y1 = 200.0 * t1 + 20.2 * (x1 - 1) + 19.8 * (x3 - 1);  double y2 = -180.0 * x2 * t2 - (1 - x2);  double y3 = 180.0 * t2 + 20.2 * (x3 - 1) + 19.8 * (x1 - 1);  gsl_vector_set (f, 0, y0);  gsl_vector_set (f, 1, y1);  gsl_vector_set (f, 2, y2);  gsl_vector_set (f, 3, y3);  params = 0;                   /* avoid warning about unused parameters */  return GSL_SUCCESS;}intwood_df (const gsl_vector * x, void *params, gsl_matrix * df){  double x0 = gsl_vector_get (x, 0);  double x1 = gsl_vector_get (x, 1);  double x2 = gsl_vector_get (x, 2);  double x3 = gsl_vector_get (x, 3);  double t1 = x1 - 3 * x0 * x0;  double t2 = x3 - 3 * x2 * x2;  double df00 = -200.0 * t1 + 1, df01 = -200.0 * x0, df02 = 0, df03 = 0;  double df10 = -400.0*x0, df11 = 200.0 + 20.2, df12 = 0, df13 = 19.8;  double df20 = 0, df21 = 0, df22 = -180.0 * t2 + 1, df23 = -180.0 * x2;  double df30 = 0, df31 = 19.8, df32 = -2 * 180 * x2, df33 = 180.0 + 20.2;  gsl_matrix_set (df, 0, 0, df00);  gsl_matrix_set (df, 0, 1, df01);  gsl_matrix_set (df, 0, 2, df02);  gsl_matrix_set (df, 0, 3, df03);  gsl_matrix_set (df, 1, 0, df10);  gsl_matrix_set (df, 1, 1, df11);  gsl_matrix_set (df, 1, 2, df12);  gsl_matrix_set (df, 1, 3, df13);  gsl_matrix_set (df, 2, 0, df20);  gsl_matrix_set (df, 2, 1, df21);  gsl_matrix_set (df, 2, 2, df22);  gsl_matrix_set (df, 2, 3, df23);  gsl_matrix_set (df, 3, 0, df30);  gsl_matrix_set (df, 3, 1, df31);  gsl_matrix_set (df, 3, 2, df32);  gsl_matrix_set (df, 3, 3, df33);  params = 0;                   /* avoid warning about unused parameters */  return GSL_SUCCESS;}intwood_fdf (const gsl_vector * x, void *params,                    gsl_vector * f, gsl_matrix * df){  wood_f (x, params, f);  wood_df (x, params, df);  return GSL_SUCCESS;}/* Helical Valley Function */gsl_multiroot_function_fdf helical ={&helical_f, &helical_df, &helical_fdf, 3, 0};voidhelical_initpt (gsl_vector * x){  gsl_vector_set (x, 0, -1.0);  gsl_vector_set (x, 1, 0.0);  gsl_vector_set (x, 2, 0.0);}inthelical_f (const gsl_vector * x, void *params, gsl_vector * f){  double x0 = gsl_vector_get (x, 0);  double x1 = gsl_vector_get (x, 1);  double x2 = gsl_vector_get (x, 2);  double t1, t2;  double y0, y1, y2;  if (x0 > 0)     {      t1 = atan(x1/x0) / (2.0 * M_PI);    }  else if (x0 < 0)    {      t1 = 0.5 + atan(x1/x0) / (2.0 * M_PI);    }  else    {      t1 = 0.25 * (x1 > 0 ? +1 : -1);    }  t2 = sqrt(x0*x0 + x1*x1) ;    y0 = 10 * (x2 - 10 * t1);  y1 = 10 * (t2 - 1);  y2 = x2 ;  gsl_vector_set (f, 0, y0);  gsl_vector_set (f, 1, y1);  gsl_vector_set (f, 2, y2);  params = 0;                   /* avoid warning about unused parameters */  return GSL_SUCCESS;}inthelical_df (const gsl_vector * x, void *params, gsl_matrix * df){  double x0 = gsl_vector_get (x, 0);  double x1 = gsl_vector_get (x, 1);  double t = x0 * x0 + x1 * x1 ;  double t1 = 2 * M_PI * t ;  double t2 = sqrt(t) ;  double df00 = 100*x1/t1, df01 = -100.0 * x0/t1, df02 = 10.0;  double df10 = 10*x0/t2, df11 = 10*x1/t2, df12 = 0;  double df20 = 0, df21 = 0, df22 = 1.0;  gsl_matrix_set (df, 0, 0, df00);  gsl_matrix_set (df, 0, 1, df01);  gsl_matrix_set (df, 0, 2, df02);  gsl_matrix_set (df, 1, 0, df10);  gsl_matrix_set (df, 1, 1, df11);  gsl_matrix_set (df, 1, 2, df12);  gsl_matrix_set (df, 2, 0, df20);  gsl_matrix_set (df, 2, 1, df21);  gsl_matrix_set (df, 2, 2, df22);  params = 0;                   /* avoid warning about unused parameters */  return GSL_SUCCESS;}inthelical_fdf (const gsl_vector * x, void *params,                    gsl_vector * f, gsl_matrix * df){  helical_f (x, params, f);  helical_df (x, params, df);  return GSL_SUCCESS;}/* Discrete Boundary Value Function */#define N 10gsl_multiroot_function_fdf dbv ={&dbv_f, &dbv_df, &dbv_fdf, N, 0};voiddbv_initpt (gsl_vector * x){  size_t i;  double h = 1.0 / (N + 1.0);  for (i = 0; i < N; i++)    {      double t = (i + 1) * h;      double z = t * (t - 1);      gsl_vector_set (x, i, z);    }}intdbv_f (const gsl_vector * x, void *params, gsl_vector * f){  size_t i;  double h = 1.0 / (N + 1.0);  for (i = 0; i < N; i++)    {      double z, ti = (i + 1) * h;      double xi = 0, xim1 = 0, xip1 = 0;      xi = gsl_vector_get (x, i);            if (i > 0)        xim1 = gsl_vector_get (x, i - 1);      if (i < N - 1)        xip1 = gsl_vector_get (x, i + 1);      z = 2 * xi - xim1 - xip1 + h * h * pow(xi + ti + 1, 3.0) / 2.0;      gsl_vector_set (f, i, z);    }  params = 0;                   /* avoid warning about unused parameters */  return GSL_SUCCESS;}intdbv_df (const gsl_vector * x, void *params, gsl_matrix * df){  size_t i, j;  double h = 1.0 / (N + 1.0);  for (i = 0; i < N; i++)    for (j = 0; j < N; j++)      gsl_matrix_set (df, i, j, 0.0);  for (i = 0; i < N; i++)    {      double dz_dxi, ti = (i + 1) * h;      double xi = gsl_vector_get (x, i);            dz_dxi = 2.0 + (3.0 / 2.0) * h * h * pow(xi + ti + 1, 2.0) ;            gsl_matrix_set (df, i, i, dz_dxi);      if (i > 0)        gsl_matrix_set (df, i, i-1, -1.0);      if (i < N - 1)        gsl_matrix_set (df, i, i+1, -1.0);    }  params = 0;                   /* avoid warning about unused parameters */  return GSL_SUCCESS;}intdbv_fdf (const gsl_vector * x, void *params,                    gsl_vector * f, gsl_matrix * df){  dbv_f (x, params, f);  dbv_df (x, params, df);  return GSL_SUCCESS;}/* Trigonometric Function */gsl_multiroot_function_fdf trig ={&trig_f, &trig_df, &trig_fdf, N, 0};voidtrig_initpt (gsl_vector * x){  size_t i;  for (i = 0; i < N; i++)       /* choose an initial point which converges */    {      gsl_vector_set (x, i, 0.05);       }}inttrig_f (const gsl_vector * x, void *params, gsl_vector * f){  size_t i;  double sum = 0;  for (i = 0; i < N; i++)    {      sum += cos(gsl_vector_get(x,i));    }  for (i = 0; i < N; i++)    {      double xi = gsl_vector_get (x,i);      double z = N - sum + (i + 1) * (1 - cos(xi)) - sin(xi);      gsl_vector_set (f, i, z);    }  params = 0;                   /* avoid warning about unused parameters */  return GSL_SUCCESS;}inttrig_df (const gsl_vector * x, void *params, gsl_matrix * df){  size_t i, j;  for (i = 0; i < N; i++)    {      for (j = 0; j < N; j++)        {          double dz;          double xi = gsl_vector_get(x, i);          double xj = gsl_vector_get(x, j);          if (j == i)            dz = sin(xi) + (i + 1) * sin(xi) - cos(xi);          else            dz = sin(xj);                    gsl_matrix_set(df, i, j, dz);        }    }  params = 0;                   /* avoid warning about unused parameters */  return GSL_SUCCESS;}inttrig_fdf (const gsl_vector * x, void *params,                    gsl_vector * f, gsl_matrix * df){  trig_f (x, params, f);  trig_df (x, params, df);  return GSL_SUCCESS;}

⌨️ 快捷键说明

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