GRASS 8 Programmer's Manual
8.5.0(2026)-8d6ceba290
Toggle main menu visibility
Loading...
Searching...
No Matches
unitary.c
Go to the documentation of this file.
1
/* unitary.c 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
*/
8
9
#include <stdlib.h>
10
#include "
ccmath.h
"
11
12
static
double
tpi = 6.283185307179586;
13
14
static
void
uortho(
double
*
g
,
int
n);
15
16
double
unfl
(
void
);
17
18
void
unitary
(
Cpx
*u,
int
n)
19
{
20
int
i, j, k, m;
21
22
Cpx
h, *v, *e, *p, *
r
;
23
24
double
*
g
, *q, a;
25
26
m = n * n;
27
g
= (
double
*)calloc(n * n,
sizeof
(
double
));
28
v = (
Cpx
*)calloc(m + n,
sizeof
(
Cpx
));
29
e = v + m;
30
h.
re
= 1.;
31
h.im = 0.;
32
for
(i = 0; i < n; ++i) {
33
a = tpi *
unfl
();
34
e[i].
re
= cos(a);
35
e[i].
im
= sin(a);
36
a = h.re * e[i].
re
- h.im * e[i].
im
;
37
h.im = h.im * e[i].
re
+ h.re * e[i].
im
;
38
h.re = a;
39
}
40
h.im = -h.im;
41
for
(i = 0; i < n; ++i) {
42
a = e[i].
re
* h.re - e[i].
im
* h.im;
43
e[i].
im
= e[i].
re
* h.im + e[i].
im
* h.re;
44
e[i].
re
= a;
45
}
46
uortho(
g
, n);
47
for
(i = 0, p = v, q =
g
; i < n; ++i) {
48
for
(j = 0; j < n; ++j)
49
(p++)->re = *q++;
50
}
51
for
(i = 0, p = v; i < n; ++i) {
52
for
(j = 0, h = e[i]; j < n; ++j, ++p) {
53
a = h.re * p->
re
- h.im * p->
im
;
54
p->
im
= h.im * p->
re
+ h.re * p->
im
;
55
p->
re
= a;
56
}
57
}
58
uortho(
g
, n);
59
for
(i = m = 0, p = u; i < n; ++i, m += n) {
60
for
(j = 0; j < n; ++j, ++p) {
61
p->
re
= p->
im
= 0.;
62
for
(k = 0, q =
g
+ m,
r
= v + j; k < n; ++k,
r
+= n) {
63
p->
re
+= *q *
r
->re;
64
p->
im
+= *q++ *
r
->im;
65
}
66
}
67
}
68
free(
g
);
69
free(v);
70
}
71
72
static
void
uortho(
double
*
g
,
int
n)
73
{
74
int
i, j, k, m;
75
76
double
*p, *q, c, s, a;
77
78
for
(i = 0, p =
g
; i < n; ++i) {
79
for
(j = 0; j < n; ++j) {
80
if
(i == j)
81
*p++ = 1.;
82
else
83
*p++ = 0.;
84
}
85
}
86
for
(i = 0, m = n - 1; i < m; ++i) {
87
for
(j = i + 1; j < n; ++j) {
88
a = tpi *
unfl
();
89
c = cos(a);
90
s = sin(a);
91
p =
g
+ n * i;
92
q =
g
+ n * j;
93
for
(k = 0; k < n; ++k) {
94
a = *p * c + *q * s;
95
*q = *q * c - *p * s;
96
*p++ = a;
97
++q;
98
}
99
}
100
}
101
}
ccmath.h
Cpx
struct complex Cpx
Definition
ccmath.h:41
r
double r
Definition
driver/set_window.c:5
g
float g
Definition
named_colr.c:7
complex::re
double re
Definition
ccmath.h:39
complex::im
double im
Definition
ccmath.h:39
unfl
double unfl(void)
Definition
unfl.c:10
unitary
void unitary(Cpx *u, int n)
Definition
unitary.c:18
external
ccmath
unitary.c
Generated on
for GRASS 8 Programmer's Manual by
1.17.0