summaryrefslogtreecommitdiff
path: root/test-chill/test-cases/examples/chill/qr.c
blob: 8d18b72d275f775e8e038b3959ef1e0c83f57f0e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <math.h>

int main() {

	int M, N;
	float** A;
	float *s;
	float *Rdiag;
	float *nrm;
	int i, j, k;
        float t;
	for (k = 0; k < N; k++) {
		nrm[k] = 0;

		for (i = k; i < M; i++)
			nrm[k] = sqrt(nrm[k] * nrm[k] + A[i][k] * A[i][k]);
                //t = A[k][k];

		//if (t < 0)
		//	nrm[k] = -nrm[k];
		for (i = k; i < M; i++)
			A[i][k] = A[i][k] / nrm[k];

		A[k][k] = A[k][k] + 1;

		for (j = k + 1; j < N; j++) {
			s[j] = 0; //S6

			for (i = k; i < M; i++)
				s[j] = s[j] + A[i][k] * A[i][j]; //S7

			s[j] = -s[j] / A[k][k]; //S8

			for (i = k; i < M; i++)
				A[i][j] = A[i][j] + s[j] * A[i][k]; //S9

		}

		Rdiag[k] = -nrm[k];

	}

	return 0;
}