12345678910111213141516171819202122232425262728293031323334353637383940 |
- /* solvps.c CCMATH mathematics library source code.
- *
- * Copyright (C) 2000 Daniel A. Atkinson All rights reserved.
- * This code may be redistributed under the terms of the GNU library
- * public license (LGPL). ( See the lgpl.license file for details.)
- * ------------------------------------------------------------------------
- */
- #include "ccmath.h"
- int solvps(double *a, double *b, int n)
- {
- double *p, *q, *r, *s, t;
- int j, k;
- for (j = 0, p = a; j < n; ++j, p += n + 1) {
- for (q = a + j * n; q < p; ++q)
- *p -= *q * *q;
- if (*p <= 0.)
- return -1;
- *p = sqrt(*p);
- for (k = j + 1, q = p + n; k < n; ++k, q += n) {
- for (r = a + j * n, s = a + k * n, t = 0.; r < p;)
- t += *r++ * *s++;
- *q -= t;
- *q /= *p;
- }
- }
- for (j = 0, p = a; j < n; ++j, p += n + 1) {
- for (k = 0, q = a + j * n; k < j;)
- b[j] -= b[k++] * *q++;
- b[j] /= *p;
- }
- for (j = n - 1, p = a + n * n - 1; j >= 0; --j, p -= n + 1) {
- for (k = j + 1, q = p + n; k < n; q += n)
- b[j] -= b[k++] * *q;
- b[j] /= *p;
- }
- return 0;
- }
|