1
/* csolv.c CCMATH mathematics library source code.
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
* ------------------------------------------------------------------------
10
int csolv(Cpx * a, Cpx * b, int n)
14
Cpx *ps, *p, *q, *pa, *pd;
18
double s, t, tq = 0., zr = 1.e-15;
20
q0 = (Cpx *) calloc(n, sizeof(Cpx));
23
for (j = 0; j < n; ++j, ++pa, pd += n + 1) {
25
for (i = 0, p = pa, q = q0; i < n; ++i, p += n)
27
for (i = 1; i < n; ++i) {
30
for (k = 0, p = pa + i * n - j, q = q0; k < lc; ++k, ++q, ++p) {
31
z.re += p->re * q->re - p->im * q->im;
32
z.im += p->im * q->re + p->re * q->im;
37
for (i = 0, p = pa, q = q0; i < n; ++i, p += n)
40
s = fabs(pd->re) + fabs(pd->im);
42
for (k = j + 1, ps = pd; k < n; ++k) {
44
if ((t = fabs(ps->re) + fabs(ps->im)) > s) {
60
for (k = 0; k < n; ++k) {
66
t = pd->re * pd->re + pd->im * pd->im;
69
for (k = j + 1, ps = pd + n; k < n; ++k, ps += n) {
70
z.re = ps->re * h.re - ps->im * h.im;
71
z.im = ps->im * h.re + ps->re * h.im;
75
for (j = 1, ps = b + 1; j < n; ++j, ++ps) {
76
for (k = 0, p = a + n * j, q = b, z.re = z.im = 0.; k < j; ++k) {
77
z.re += p->re * q->re - p->im * q->im;
78
z.im += p->im * q->re + p->re * q->im;
85
for (j = n - 1, --ps, pd = a + n * n - 1; j >= 0; --j, pd -= n + 1) {
86
for (k = j + 1, p = pd + 1, q = b + j + 1, z.re = z.im = 0.; k < n;
88
z.re += p->re * q->re - p->im * q->im;
89
z.im += p->im * q->re + p->re * q->im;
95
t = pd->re * pd->re + pd->im * pd->im;
96
ps->re = (h.re * pd->re + h.im * pd->im) / t;
97
ps->im = (h.im * pd->re - h.re * pd->im) / t;