GRASS GIS 8 Programmer's Manual  8.5.0dev(2025)-565e82de51
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ccmath.h
Go to the documentation of this file.
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 
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 #ifndef CPX
37 #ifndef _MSC_VER
38 struct complex {
39  double re, im;
40 };
41 typedef struct complex Cpx;
42 #else
43 /* _MSVC has complex struct and cannot be used */
44 struct gcomplex {
45  double re, im;
46 };
47 typedef struct gcomplex Cpx;
48 #endif /* _MSC_VER */
49 
50 #define CPX 1
51 #endif
52 
53 /* Linear Algebra */
54 
55 /* Real Linear Systems */
56 
57 int minv(double *a, int n);
58 
59 int psinv(double *v, int n);
60 
61 int ruinv(double *a, int n);
62 
63 int solv(double *a, double *b, int n);
64 
65 int solvps(double *s, double *x, int n);
66 
67 int solvru(double *a, double *b, int n);
68 
69 void solvtd(double *a, double *b, double *c, double *x, int m);
70 
71 void eigen(double *a, double *eval, int n);
72 
73 void eigval(double *a, double *eval, int n);
74 
75 double evmax(double *a, double *u, int n);
76 
77 int svdval(double *d, double *a, int m, int n);
78 
79 int sv2val(double *d, double *a, int m, int n);
80 
81 int svduv(double *d, double *a, double *u, int m, double *v, int n);
82 
83 int sv2uv(double *d, double *a, double *u, int m, double *v, int n);
84 
85 int svdu1v(double *d, double *a, int m, double *v, int n);
86 
87 int sv2u1v(double *d, double *a, int m, double *v, int n);
88 
89 void mmul(double *mat, double *a, double *b, int n);
90 
91 void rmmult(double *mat, double *a, double *b, int m, int k, int n);
92 
93 void vmul(double *vp, double *mat, double *v, int n);
94 
95 double vnrm(double *u, double *v, int n);
96 
97 void matprt(double *a, int n, int m, char *fmt);
98 
99 void fmatprt(FILE *fp, double *a, int n, int m, char *fmt);
100 
101 void trnm(double *a, int n);
102 
103 void mattr(double *a, double *b, int m, int n);
104 
105 void otrma(double *at, double *u, double *a, int n);
106 
107 void otrsm(double *st, double *u, double *s0, int n);
108 
109 void mcopy(double *a, double *b, int m);
110 
111 void ortho(double *evc, int n);
112 
113 void smgen(double *a, double *eval, double *evec, int n);
114 
115 /* utility routines for real symmertic eigensystems */
116 
117 void house(double *a, double *d, double *ud, int n);
118 
119 void housev(double *a, double *d, double *ud, int n);
120 
121 int qreval(double *eval, double *ud, int n);
122 
123 int qrevec(double *eval, double *evec, double *dp, int n);
124 
125 /* utility routines for singular value decomposition */
126 
127 int qrbdi(double *d, double *e, int n);
128 
129 int qrbdv(double *d, double *e, double *u, int m, double *v, int n);
130 
131 int qrbdu1(double *d, double *e, double *u, int m, double *v, int n);
132 
133 void ldumat(double *a, double *u, int m, int n);
134 
135 void ldvmat(double *a, double *v, int n);
136 
137 void atou1(double *a, int m, int n);
138 
139 void atovm(double *v, int n);
140 
141 /* Complex Matrix Algebra */
142 
143 int cminv(Cpx *a, int n);
144 
145 int csolv(Cpx *a, Cpx *b, int n);
146 
147 void heigvec(Cpx *a, double *eval, int n);
148 
149 void heigval(Cpx *a, double *eval, int n);
150 
151 double hevmax(Cpx *a, Cpx *u, int n);
152 
153 void cmmul(Cpx *c, Cpx *a, Cpx *b, int n);
154 
155 void cmmult(Cpx *c, Cpx *a, Cpx *b, int m, int k, int n);
156 
157 void cvmul(Cpx *vp, Cpx *mat, Cpx *v, int n);
158 
159 Cpx cvnrm(Cpx *u, Cpx *v, int n);
160 
161 void cmprt(Cpx *a, int n, int m, char *fmt);
162 
163 void trncm(Cpx *a, int n);
164 
165 void hconj(Cpx *u, int n);
166 
167 void cmattr(Cpx *a, Cpx *b, int m, int n);
168 
169 void utrncm(Cpx *at, Cpx *u, Cpx *a, int n);
170 
171 void utrnhm(Cpx *ht, Cpx *u, Cpx *h0, int n);
172 
173 void cmcpy(Cpx *a, Cpx *b, int n);
174 
175 void unitary(Cpx *u, int n);
176 
177 void hmgen(Cpx *h, double *eval, Cpx *u, int n);
178 
179 int csolv(Cpx *a, Cpx *b, int n);
180 
181 /* utility routines for hermitian eigen problems */
182 
183 void chouse(Cpx *a, double *d, double *ud, int n);
184 
185 void chousv(Cpx *a, double *d, double *ud, int n);
186 
187 void qrecvc(double *eval, Cpx *evec, double *ud, int n);
188 #endif
void cmmul(Cpx *c, Cpx *a, Cpx *b, int n)
Definition: cmmul.c:11
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:11
void cmmult(Cpx *c, Cpx *a, Cpx *b, int m, int k, int n)
Definition: cmmult.c:12
void cmprt(Cpx *a, int n, int m, char *fmt)
Definition: cmprt.c:11
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:12
void cmattr(Cpx *a, Cpx *b, int m, int n)
Definition: cmattr.c:11
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:11
void heigval(Cpx *a, double *eval, int n)
Definition: heigval.c:12
void cmcpy(Cpx *a, Cpx *b, int n)
Definition: cmcpy.c:11
void trnm(double *a, int n)
Definition: trnm.c:8
void trncm(Cpx *a, int n)
Definition: trncm.c:11
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:24
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:12
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:11
void hmgen(Cpx *h, double *eval, Cpx *u, int n)
Definition: hmgen.c:12
Cpx cvnrm(Cpx *u, Cpx *v, int n)
Definition: cvmul.c:26
int psinv(double *v, int n)
Definition: psinv.c:9
int cminv(Cpx *a, int n)
Definition: cminv.c:12
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:11
void atovm(double *v, int n)
Definition: atovm.c:8
void utrncm(Cpx *at, Cpx *u, Cpx *a, int n)
Definition: utrncm.c:12
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:18
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:12
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:12
int csolv(Cpx *a, Cpx *b, int n)
Definition: csolv.c:12
void heigvec(Cpx *a, double *eval, int n)
Definition: heigvec.c:12
void mattr(double *a, double *b, int m, int n)
Definition: mattr.c:8
struct state * st
Definition: parser.c:104
double b
Definition: r_raster.c:39
Definition: ccmath.h:38
double re
Definition: ccmath.h:39
double im
Definition: ccmath.h:39
#define x