You are on page 1of 2

NONAME00.

CPP May 8, 2020 Page 1

1 void Venka(){//cholesky sqrt S.P. Venkateshan, Prasanna Swaminathan,


2 //in Computational Methods in Engineering, 2014
3 //Cholesky Decomposition - an overview | ScienceDirect Topics page 7
4 //*****************************************************************************************
5 cout << "See Molanos Method STATIC CONDENSATION SQRT BANDED SYMMETRIC MATRIX-> " << endl;
6 cout << " linkedin copyright 2020 or SCRIBD" << endl;
7 cout << endl;
8 long xmax, i, j, k, i1, ma, mr, l;
9 //*****************************************************************************************
10 /*
11 xmax = 7L;
12 float **a = new float*[xmax+1L];
13 for(i = 1L; i <= xmax; a[i++] = new float[xmax +1L]);
14 for(i=1L; i<= xmax; i++)
15 for(j= i; j <= xmax; a[i][j++]=0.0);
16 a[1][1] = 9 , a[1][2] = 6, a[1][3] = 0, a[1][4] = 3;
17 a[2][2] = 8 , a[2][3] = 0, a[2][4] = 0, a[2][5] = 4;
18 a[3][3] = 16, a[3][4] = 4, a[3][5] = -4, a[3][6] = -20;
19 a[4][4] = 28, a[4][5] = 2, a[4][6] = 0, a[4][7] = 0;
20 a[5][5] = 15, a[5][6] = 9, a[5][7] = 3;
21 a[6][6] = 63, a[6][7] = 13;
22 a[7][7] = 14;
23 a[1][0]= 33 , a[2][0] = 42, a[3][0] = -76, a[4][0] = 137, a[5][0] = 154,
24 a[6][0] = 454, a[7][0] = 191;
25 */
26 xmax = 4L;
27 float **a = new float *[xmax+1L];
28 for (i = 1L; i <= xmax; a[i++] = new float [xmax +1L]);
29 //*****************************************************************************************
30 for (i=1L; i<= xmax; i++)
31 for (j= i; j <= xmax; a[i][j++]=0.0);
32 //*****************************************************************************************
33 a[1][1] = 4 , a[1][2] = 1, a[1][3] = 1, a[1][4] = 1;
34 a[2][2] = 4 , a[2][3] = 1, a[2][4] = 1;
35 a[3][3] = 4 , a[3][4] = 1;
36 a[4][4] = 4 ;
37 a[1][0]= 15.9 , a[2][0] = 17.7, a[3][0] = 13.2, a[4][0] = 9.9;
38 //*****************************************************************************************
39 for (i=1L; i<= xmax; i++){ //cholesky decmposition upper triangular matrix
40 for (j=i, i1=i-(k=1L); k <= i1; a[i][j]-=a[k][i]*a[k++][j]);
41 for (a[i][j++]=sqrt(a[i][j]); j<= xmax; a[i][j++]/=a[i][i])
42 for (k=1L; k<= i1; a[i][j]-=a[k][i]*a[k++][j]);
43 }
44 //*****************************************************************************************
45 for (i=1L; i<= xmax; i++){
46 for (j=i; j<= xmax; j++)
47 cout << "c[" << i << "][" << j << "]= " << a[i][j] << " ";
48 cout << endl;
49 }
50 cout << endl;
51 //*****************************************************************************************
52 for (i=1L; i<= xmax; a[i++][0L]/=a[i][i])//forward substitution
53 for (i1=i-(k=1L); k <= i1; a[i][0L]-=a[k][i]*a[k++][0L]);
54 //*****************************************************************************************
55 for (i=1L; i<= xmax; i++)
56 cout << "y[" << i << "]= " << a[i][0L] << " ";
57 cout << endl << endl;
58 //*****************************************************************************************
59 for (i=xmax; i >= 1L; a[i--][0L]/=a[i][i])//backward substitution
60 for (ma = (mr = xmax - (j = i + 1L) + (l = 2L)) > xmax ? xmax : mr; l <= ma; a[i][0L] -= a[i]
[i-1L+l++] * a[j++][0L]);
61 //*****************************************************************************************
62 for (i=1L; i<= xmax; i++)
63 cout << "y[" << i << "]= " << a[i][0L] << " ";
64 cout << endl;
65 getch();
66 }
67

You might also like