gsl_complex_math.h 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. /* complex/gsl_complex_math.h
  2. *
  3. * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2004, 2007 Jorma Olavi Tähtinen, Brian Gough
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation; either version 3 of the License, or (at
  8. * your option) any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful, but
  11. * WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  13. * General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with this program; if not, write to the Free Software
  17. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  18. */
  19. #ifndef __GSL_COMPLEX_MATH_H__
  20. #define __GSL_COMPLEX_MATH_H__
  21. #include "gsl_complex.h"
  22. #undef __BEGIN_DECLS
  23. #undef __END_DECLS
  24. #ifdef __cplusplus
  25. #define __BEGIN_DECLS extern "C" {
  26. #define __END_DECLS }
  27. #else
  28. #define __BEGIN_DECLS /* empty */
  29. #define __END_DECLS /* empty */
  30. #endif
  31. __BEGIN_DECLS
  32. /* Complex numbers */
  33. gsl_complex gsl_complex_rect (double x, double y); /* r= real+i*imag */
  34. gsl_complex gsl_complex_polar (double r, double theta); /* r= r e^(i theta) */
  35. #ifdef HAVE_INLINE
  36. extern inline gsl_complex
  37. gsl_complex_rect (double x, double y)
  38. { /* return z = x + i y */
  39. gsl_complex z;
  40. GSL_SET_COMPLEX (&z, x, y);
  41. return z;
  42. }
  43. #endif
  44. #define GSL_COMPLEX_ONE (gsl_complex_rect(1.0,0.0))
  45. #define GSL_COMPLEX_ZERO (gsl_complex_rect(0.0,0.0))
  46. #define GSL_COMPLEX_NEGONE (gsl_complex_rect(-1.0,0.0))
  47. /* Properties of complex numbers */
  48. double gsl_complex_arg (gsl_complex z); /* return arg(z), -pi< arg(z) <=+pi */
  49. double gsl_complex_abs (gsl_complex z); /* return |z| */
  50. double gsl_complex_abs2 (gsl_complex z); /* return |z|^2 */
  51. double gsl_complex_logabs (gsl_complex z); /* return log|z| */
  52. /* Complex arithmetic operators */
  53. gsl_complex gsl_complex_add (gsl_complex a, gsl_complex b); /* r=a+b */
  54. gsl_complex gsl_complex_sub (gsl_complex a, gsl_complex b); /* r=a-b */
  55. gsl_complex gsl_complex_mul (gsl_complex a, gsl_complex b); /* r=a*b */
  56. gsl_complex gsl_complex_div (gsl_complex a, gsl_complex b); /* r=a/b */
  57. gsl_complex gsl_complex_add_real (gsl_complex a, double x); /* r=a+x */
  58. gsl_complex gsl_complex_sub_real (gsl_complex a, double x); /* r=a-x */
  59. gsl_complex gsl_complex_mul_real (gsl_complex a, double x); /* r=a*x */
  60. gsl_complex gsl_complex_div_real (gsl_complex a, double x); /* r=a/x */
  61. gsl_complex gsl_complex_add_imag (gsl_complex a, double y); /* r=a+iy */
  62. gsl_complex gsl_complex_sub_imag (gsl_complex a, double y); /* r=a-iy */
  63. gsl_complex gsl_complex_mul_imag (gsl_complex a, double y); /* r=a*iy */
  64. gsl_complex gsl_complex_div_imag (gsl_complex a, double y); /* r=a/iy */
  65. gsl_complex gsl_complex_conjugate (gsl_complex z); /* r=conj(z) */
  66. gsl_complex gsl_complex_inverse (gsl_complex a); /* r=1/a */
  67. gsl_complex gsl_complex_negative (gsl_complex a); /* r=-a */
  68. /* Elementary Complex Functions */
  69. gsl_complex gsl_complex_sqrt (gsl_complex z); /* r=sqrt(z) */
  70. gsl_complex gsl_complex_sqrt_real (double x); /* r=sqrt(x) (x<0 ok) */
  71. gsl_complex gsl_complex_pow (gsl_complex a, gsl_complex b); /* r=a^b */
  72. gsl_complex gsl_complex_pow_real (gsl_complex a, double b); /* r=a^b */
  73. gsl_complex gsl_complex_exp (gsl_complex a); /* r=exp(a) */
  74. gsl_complex gsl_complex_log (gsl_complex a); /* r=log(a) (base e) */
  75. gsl_complex gsl_complex_log10 (gsl_complex a); /* r=log10(a) (base 10) */
  76. gsl_complex gsl_complex_log_b (gsl_complex a, gsl_complex b); /* r=log_b(a) (base=b) */
  77. /* Complex Trigonometric Functions */
  78. gsl_complex gsl_complex_sin (gsl_complex a); /* r=sin(a) */
  79. gsl_complex gsl_complex_cos (gsl_complex a); /* r=cos(a) */
  80. gsl_complex gsl_complex_sec (gsl_complex a); /* r=sec(a) */
  81. gsl_complex gsl_complex_csc (gsl_complex a); /* r=csc(a) */
  82. gsl_complex gsl_complex_tan (gsl_complex a); /* r=tan(a) */
  83. gsl_complex gsl_complex_cot (gsl_complex a); /* r=cot(a) */
  84. /* Inverse Complex Trigonometric Functions */
  85. gsl_complex gsl_complex_arcsin (gsl_complex a); /* r=arcsin(a) */
  86. gsl_complex gsl_complex_arcsin_real (double a); /* r=arcsin(a) */
  87. gsl_complex gsl_complex_arccos (gsl_complex a); /* r=arccos(a) */
  88. gsl_complex gsl_complex_arccos_real (double a); /* r=arccos(a) */
  89. gsl_complex gsl_complex_arcsec (gsl_complex a); /* r=arcsec(a) */
  90. gsl_complex gsl_complex_arcsec_real (double a); /* r=arcsec(a) */
  91. gsl_complex gsl_complex_arccsc (gsl_complex a); /* r=arccsc(a) */
  92. gsl_complex gsl_complex_arccsc_real (double a); /* r=arccsc(a) */
  93. gsl_complex gsl_complex_arctan (gsl_complex a); /* r=arctan(a) */
  94. gsl_complex gsl_complex_arccot (gsl_complex a); /* r=arccot(a) */
  95. /* Complex Hyperbolic Functions */
  96. gsl_complex gsl_complex_sinh (gsl_complex a); /* r=sinh(a) */
  97. gsl_complex gsl_complex_cosh (gsl_complex a); /* r=coshh(a) */
  98. gsl_complex gsl_complex_sech (gsl_complex a); /* r=sech(a) */
  99. gsl_complex gsl_complex_csch (gsl_complex a); /* r=csch(a) */
  100. gsl_complex gsl_complex_tanh (gsl_complex a); /* r=tanh(a) */
  101. gsl_complex gsl_complex_coth (gsl_complex a); /* r=coth(a) */
  102. /* Inverse Complex Hyperbolic Functions */
  103. gsl_complex gsl_complex_arcsinh (gsl_complex a); /* r=arcsinh(a) */
  104. gsl_complex gsl_complex_arccosh (gsl_complex a); /* r=arccosh(a) */
  105. gsl_complex gsl_complex_arccosh_real (double a); /* r=arccosh(a) */
  106. gsl_complex gsl_complex_arcsech (gsl_complex a); /* r=arcsech(a) */
  107. gsl_complex gsl_complex_arccsch (gsl_complex a); /* r=arccsch(a) */
  108. gsl_complex gsl_complex_arctanh (gsl_complex a); /* r=arctanh(a) */
  109. gsl_complex gsl_complex_arctanh_real (double a); /* r=arctanh(a) */
  110. gsl_complex gsl_complex_arccoth (gsl_complex a); /* r=arccoth(a) */
  111. __END_DECLS
  112. #endif /* __GSL_COMPLEX_MATH_H__ */