grass  7.8.6 About: GRASS (Geographic Resources Analysis Support System) is a raster- and vector-based GIS, image processing system, graphics production system and spatial modeling system.   Fossies Dox: grass-7.8.6.tar.gz  ("unofficial" and yet experimental doxygen-generated source code documentation)
ccmath.h
Go to the documentation of this file.
1/* ccmath.h CCMATH mathematics library source code.
2 *
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
15 Numerical Analysis Toolkit Header File
16 ELF Shared Library Version
17*/
18 /* Required for Shared Library */
19#ifndef _CCMATH_H_
20#define _CCMATH_H_
21#define XMATH 1
22
23 /* Define File Pointers and Standard Library */
24
25#include <stdio.h>
26#include <stdlib.h>
27#include <math.h>
28
29 /* Definitions of Types */
30
31#ifndef NULL
32#define NULL ((void *)0
33#endif
34
35 /* Complex Types */
36
37#ifndef CPX
38struct complex {double re,im;};
39typedef struct complex Cpx;
40#define CPX 1
41#endif
42
43/* Linear Algebra */
44
45
46 /* Real Linear Systems */
47
48
49 int minv(double *a,int n) ;
50
51 int psinv(double *v,int n) ;
52
53 int ruinv(double *a,int n) ;
54
55 int solv(double *a,double *b,int n) ;
56
57 int solvps(double *s,double *x,int n) ;
58
59 int solvru(double *a,double *b,int n) ;
60
61 void solvtd(double *a,double *b,double *c,double *x,int m) ;
62
63 void eigen(double *a,double *eval,int n) ;
64
65 void eigval(double *a,double *eval,int n) ;
66
67 double evmax(double *a,double *u,int n) ;
68
69 int svdval(double *d,double *a,int m,int n) ;
70
71 int sv2val(double *d,double *a,int m,int n) ;
72
73 int svduv(double *d,double *a,double *u,int m,double *v,int n) ;
74
75 int sv2uv(double *d,double *a,double *u,int m,double *v,int n) ;
76
77 int svdu1v(double *d,double *a,int m,double *v,int n) ;
78
79 int sv2u1v(double *d,double *a,int m,double *v,int n) ;
80
81 void mmul(double *mat,double *a,double *b,int n) ;
82
83 void rmmult(double *mat,double *a,double *b,int m,int k,int n) ;
84
85 void vmul(double *vp,double *mat,double *v,int n) ;
86
87 double vnrm(double *u,double *v,int n) ;
88
89 void matprt(double *a,int n,int m,char *fmt) ;
90
91 void fmatprt(FILE *fp,double *a,int n,int m,char *fmt) ;
92
93 void trnm(double *a,int n) ;
94
95 void mattr(double *a,double *b,int m,int n) ;
96
97 void otrma(double *at,double *u,double *a,int n) ;
98
99 void otrsm(double *st,double *u,double *s0,int n) ;
100
101 void mcopy(double *a,double *b,int m) ;
102
103 void ortho(double *evc,int n) ;
104
105 void smgen(double *a,double *eval,double *evec,int n) ;
106
107 /* utility routines for real symmertic eigensystems */
108
109 void house(double *a,double *d,double *ud,int n) ;
110
111 void housev(double *a,double *d,double *ud,int n) ;
112
113 int qreval(double *eval,double *ud,int n) ;
114
115 int qrevec(double *eval,double *evec,double *dp,int n) ;
116
117 /* utility routines for singular value decomposition */
118
119 int qrbdi(double *d, double *e,int n) ;
120
121 int qrbdv(double *d, double *e,double *u,int m,double *v,int n) ;
122
123 int qrbdu1(double *d, double *e,double *u,int m,double *v,int n) ;
124
125 void ldumat(double *a,double *u,int m,int n) ;
126
127 void ldvmat(double *a,double *v,int n) ;
128
129 void atou1(double *a,int m,int n) ;
130
131 void atovm(double *v,int n) ;
132
133
134 /* Complex Matrix Algebra */
135
136
137 int cminv(Cpx *a,int n) ;
138
139 int csolv(Cpx *a,Cpx *b,int n) ;
140
141 void heigvec(Cpx *a,double *eval,int n) ;
142
143 void heigval(Cpx *a,double *eval,int n) ;
144
145 double hevmax(Cpx *a,Cpx *u,int n) ;
146
147 void cmmul(Cpx *c,Cpx *a,Cpx *b,int n) ;
148
149 void cmmult(Cpx *c,Cpx *a,Cpx *b,int m,int k,int n) ;
150
151 void cvmul(Cpx *vp,Cpx *mat,Cpx *v,int n) ;
152
153 Cpx cvnrm(Cpx *u,Cpx *v,int n) ;
154
155 void cmprt(Cpx *a,int n,int m,char *fmt) ;
156
157 void trncm(Cpx *a,int n) ;
158
159 void hconj(Cpx *u,int n) ;
160
161 void cmattr(Cpx *a,Cpx *b,int m,int n) ;
162
163 void utrncm(Cpx *at,Cpx *u,Cpx *a,int n) ;
164
165 void utrnhm(Cpx *ht,Cpx *u,Cpx *h0,int n) ;
166
167 void cmcpy(Cpx *a,Cpx *b,int n) ;
168
169 void unitary(Cpx *u,int n) ;
170
171 void hmgen(Cpx *h,double *eval,Cpx *u,int n) ;
172
173
174 /* utility routines for hermitian eigen problems */
175
176 void chouse(Cpx *a,double *d,double *ud,int n) ;
177
178 void chousv(Cpx *a,double *d,double *ud,int n) ;
179
180 void qrecvc(double *eval,Cpx *evec,double *ud,int n) ;
181#endif
void cmmul(Cpx *c, Cpx *a, Cpx *b, int n)
Definition: cmmul.c:9
void otrma(double *at, double *u, double *a, int n)
Definition: otrma.c:9
int qrevec(double *eval, double *evec, double *dp, int n)
Definition: qrevec.c:9
void ldumat(double *a, double *u, int m, int n)
Definition: ldumat.c:9
void mmul(double *mat, double *a, double *b, int n)
Definition: mmul.c:9
void solvtd(double *a, double *b, double *c, double *x, int m)
Definition: solvtd.c:8
int svdu1v(double *d, double *a, int m, double *v, int n)
Definition: svdu1v.c:10
void matprt(double *a, int n, int m, char *fmt)
Definition: matprt.c:9
void cmmult(Cpx *c, Cpx *a, Cpx *b, int m, int k, int n)
Definition: cmmult.c:10
void cmprt(Cpx *a, int n, int m, char *fmt)
Definition: cmprt.c:9
void eigval(double *a, double *eval, int n)
Definition: eigval.c:10
void chouse(Cpx *a, double *d, double *ud, int n)
Definition: chouse.c:10
void cmattr(Cpx *a, Cpx *b, int m, int n)
Definition: cmattr.c:9
int qrbdu1(double *d, double *e, double *u, int m, double *v, int n)
Definition: qrbdu1.c:9
int solv(double *a, double *b, int n)
Definition: solv.c:10
double vnrm(double *u, double *v, int n)
Definition: vmul.c:21
void cvmul(Cpx *vp, Cpx *mat, Cpx *v, int n)
Definition: cvmul.c:9
void heigval(Cpx *a, double *eval, int n)
Definition: heigval.c:10
void cmcpy(Cpx *a, Cpx *b, int n)
Definition: cmcpy.c:9
void trnm(double *a, int n)
Definition: trnm.c:8
void trncm(Cpx *a, int n)
Definition: trncm.c:9
int sv2uv(double *d, double *a, double *u, int m, double *v, int n)
Definition: sv2uv.c:10
void fmatprt(FILE *fp, double *a, int n, int m, char *fmt)
Definition: matprt.c:22
int svduv(double *d, double *a, double *u, int m, double *v, int n)
Definition: svduv.c:10
int qrbdi(double *d, double *e, int n)
Definition: qrbdi.c:9
double hevmax(Cpx *a, Cpx *u, int n)
Definition: hevmax.c:10
void atou1(double *a, int m, int n)
Definition: atou1.c:9
void qrecvc(double *eval, Cpx *evec, double *ud, int n)
Definition: qrecvc.c:9
void hmgen(Cpx *h, double *eval, Cpx *u, int n)
Definition: hmgen.c:10
Cpx cvnrm(Cpx *u, Cpx *v, int n)
Definition: cvmul.c:24
int psinv(double *v, int n)
Definition: psinv.c:9
int cminv(Cpx *a, int n)
Definition: cminv.c:10
void ortho(double *evc, int n)
Definition: ortho.c:11
int qreval(double *eval, double *ud, int n)
Definition: qreval.c:9
int solvps(double *s, double *x, int n)
Definition: solvps.c:9
void housev(double *a, double *d, double *ud, int n)
Definition: housev.c:10
void rmmult(double *mat, double *a, double *b, int m, int k, int n)
Definition: rmmult.c:9
void mcopy(double *a, double *b, int m)
Definition: mcopy.c:8
void smgen(double *a, double *eval, double *evec, int n)
Definition: smgen.c:8
int ruinv(double *a, int n)
Definition: ruinv.c:8
double evmax(double *a, double *u, int n)
Definition: evmax.c:10
void eigen(double *a, double *eval, int n)
Definition: eigen.c:10
void hconj(Cpx *u, int n)
Definition: hconj.c:9
void atovm(double *v, int n)
Definition: atovm.c:8
void utrncm(Cpx *at, Cpx *u, Cpx *a, int n)
Definition: utrncm.c:10
void house(double *a, double *d, double *ud, int n)
Definition: house.c:10
void vmul(double *vp, double *mat, double *v, int n)
Definition: vmul.c:8
int sv2u1v(double *d, double *a, int m, double *v, int n)
Definition: sv2u1v.c:10
void otrsm(double *st, double *u, double *s0, int n)
Definition: otrsm.c:9
int svdval(double *d, double *a, int m, int n)
Definition: svdval.c:10
int qrbdv(double *d, double *e, double *u, int m, double *v, int n)
Definition: qrbdv.c:9
void unitary(Cpx *u, int n)
Definition: unitary.c:16
void ldvmat(double *a, double *v, int n)
Definition: ldvmat.c:8
void utrnhm(Cpx *ht, Cpx *u, Cpx *h0, int n)
Definition: utrnhm.c:10
int solvru(double *a, double *b, int n)
Definition: solvru.c:8
int minv(double *a, int n)
Definition: minv.c:10
int sv2val(double *d, double *a, int m, int n)
Definition: sv2val.c:10
void chousv(Cpx *a, double *d, double *ud, int n)
Definition: chousv.c:10
int csolv(Cpx *a, Cpx *b, int n)
Definition: csolv.c:10
void heigvec(Cpx *a, double *eval, int n)
Definition: heigvec.c:10
void mattr(double *a, double *b, int m, int n)
Definition: mattr.c:8
static struct error_state * st
Definition: d_error.c:30
static union type_conv u
Definition: port_test.c:79
double b
Definition: r_raster.c:39
Definition: la.h:55
double re
Definition: ccmath.h:38
double im
Definition: ccmath.h:38
static float d[4][4]
Definition: trans.c:49
static unsigned int a
Definition: unfl.c:8
static unsigned int s
Definition: unfl.c:9
static unsigned int c
Definition: unfl.c:8
static unsigned int h
Definition: unfl.c:9
#define x