ccmath.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. /* ccmath.h CCMATH mathematics library source code.
  2. *
  3. * Copyright (C) 2000 Daniel A. Atkinson All rights reserved.
  4. * This code may be redistributed under the terms of the GNU library
  5. * public license (LGPL). ( See the lgpl.license file for details.)
  6. *
  7. * Modified by Soeren gebbert 2009/01/08
  8. * Removed al unused functions in GRASS. Only the linear algebra
  9. * functions are used.
  10. * ------------------------------------------------------------------------
  11. */
  12. /*
  13. CCM
  14. Numerical Analysis Toolkit Header File
  15. ELF Shared Library Version
  16. */
  17. /* Required for Shared Library */
  18. #ifndef _CCMATH_H_
  19. #define _CCMATH_H_
  20. #define XMATH 1
  21. /* Define File Pointers and Standard Library */
  22. #include <stdio.h>
  23. #include <stdlib.h>
  24. #include <math.h>
  25. /* Definitions of Types */
  26. #ifndef NULL
  27. #define NULL ((void *)0
  28. #endif
  29. /* Complex Types */
  30. #ifndef CPX
  31. struct complex {double re,im;};
  32. typedef struct complex Cpx;
  33. #define CPX 1
  34. #endif
  35. /* Linear Algebra */
  36. /* Real Linear Systems */
  37. int minv(double *a,int n) ;
  38. int psinv(double *v,int n) ;
  39. int ruinv(double *a,int n) ;
  40. int solv(double *a,double *b,int n) ;
  41. int solvps(double *s,double *x,int n) ;
  42. int solvru(double *a,double *b,int n) ;
  43. void solvtd(double *a,double *b,double *c,double *x,int m) ;
  44. void eigen(double *a,double *eval,int n) ;
  45. void eigval(double *a,double *eval,int n) ;
  46. double evmax(double *a,double *u,int n) ;
  47. int svdval(double *d,double *a,int m,int n) ;
  48. int sv2val(double *d,double *a,int m,int n) ;
  49. int svduv(double *d,double *a,double *u,int m,double *v,int n) ;
  50. int sv2uv(double *d,double *a,double *u,int m,double *v,int n) ;
  51. int svdu1v(double *d,double *a,int m,double *v,int n) ;
  52. int sv2u1v(double *d,double *a,int m,double *v,int n) ;
  53. void mmul(double *mat,double *a,double *b,int n) ;
  54. void rmmult(double *mat,double *a,double *b,int m,int k,int n) ;
  55. void vmul(double *vp,double *mat,double *v,int n) ;
  56. double vnrm(double *u,double *v,int n) ;
  57. void matprt(double *a,int n,int m,char *fmt) ;
  58. void fmatprt(FILE *fp,double *a,int n,int m,char *fmt) ;
  59. void trnm(double *a,int n) ;
  60. void mattr(double *a,double *b,int m,int n) ;
  61. void otrma(double *at,double *u,double *a,int n) ;
  62. void otrsm(double *st,double *u,double *s0,int n) ;
  63. void mcopy(double *a,double *b,int m) ;
  64. void ortho(double *evc,int n) ;
  65. void smgen(double *a,double *eval,double *evec,int n) ;
  66. /* utility routines for real symmertic eigensystems */
  67. void house(double *a,double *d,double *ud,int n) ;
  68. void housev(double *a,double *d,double *ud,int n) ;
  69. int qreval(double *eval,double *ud,int n) ;
  70. int qrevec(double *eval,double *evec,double *dp,int n) ;
  71. /* utility routines for singular value decomposition */
  72. int qrbdi(double *d, double *e,int n) ;
  73. int qrbdv(double *d, double *e,double *u,int m,double *v,int n) ;
  74. int qrbdu1(double *d, double *e,double *u,int m,double *v,int n) ;
  75. void ldumat(double *a,double *u,int m,int n) ;
  76. void ldvmat(double *a,double *v,int n) ;
  77. void atou1(double *a,int m,int n) ;
  78. void atovm(double *v,int n) ;
  79. /* Complex Matrix Algebra */
  80. int cminv(Cpx *a,int n) ;
  81. int csolv(Cpx *a,Cpx *b,int n) ;
  82. void heigvec(Cpx *a,double *eval,int n) ;
  83. void heigval(Cpx *a,double *eval,int n) ;
  84. double hevmax(Cpx *a,Cpx *u,int n) ;
  85. void cmmul(Cpx *c,Cpx *a,Cpx *b,int n) ;
  86. void cmmult(Cpx *c,Cpx *a,Cpx *b,int m,int k,int n) ;
  87. void cvmul(Cpx *vp,Cpx *mat,Cpx *v,int n) ;
  88. Cpx cvnrm(Cpx *u,Cpx *v,int n) ;
  89. void cmprt(Cpx *a,int n,int m,char *fmt) ;
  90. void trncm(Cpx *a,int n) ;
  91. void hconj(Cpx *u,int n) ;
  92. void cmattr(Cpx *a,Cpx *b,int m,int n) ;
  93. void utrncm(Cpx *at,Cpx *u,Cpx *a,int n) ;
  94. void utrnhm(Cpx *ht,Cpx *u,Cpx *h0,int n) ;
  95. void cmcpy(Cpx *a,Cpx *b,int n) ;
  96. void unitary(Cpx *u,int n) ;
  97. void hmgen(Cpx *h,double *eval,Cpx *u,int n) ;
  98. /* utility routines for hermitian eigen problems */
  99. void chouse(Cpx *a,double *d,double *ud,int n) ;
  100. void chousv(Cpx *a,double *d,double *ud,int n) ;
  101. void qrecvc(double *eval,Cpx *evec,double *ud,int n) ;
  102. #endif