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