Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
51
Task/Cholesky-decomposition/C/cholesky-decomposition.c
Normal file
51
Task/Cholesky-decomposition/C/cholesky-decomposition.c
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
|
||||
double *cholesky(double *A, int n) {
|
||||
double *L = (double*)calloc(n * n, sizeof(double));
|
||||
if (L == NULL)
|
||||
exit(EXIT_FAILURE);
|
||||
|
||||
for (int i = 0; i < n; i++)
|
||||
for (int j = 0; j < (i+1); j++) {
|
||||
double s = 0;
|
||||
for (int k = 0; k < j; k++)
|
||||
s += L[i * n + k] * L[j * n + k];
|
||||
L[i * n + j] = (i == j) ?
|
||||
sqrt(A[i * n + i] - s) :
|
||||
(1.0 / L[j * n + j] * (A[i * n + j] - s));
|
||||
}
|
||||
|
||||
return L;
|
||||
}
|
||||
|
||||
void show_matrix(double *A, int n) {
|
||||
for (int i = 0; i < n; i++) {
|
||||
for (int j = 0; j < n; j++)
|
||||
printf("%2.5f ", A[i * n + j]);
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
int n = 3;
|
||||
double m1[] = {25, 15, -5,
|
||||
15, 18, 0,
|
||||
-5, 0, 11};
|
||||
double *c1 = cholesky(m1, n);
|
||||
show_matrix(c1, n);
|
||||
printf("\n");
|
||||
free(c1);
|
||||
|
||||
n = 4;
|
||||
double m2[] = {18, 22, 54, 42,
|
||||
22, 70, 86, 62,
|
||||
54, 86, 174, 134,
|
||||
42, 62, 134, 106};
|
||||
double *c2 = cholesky(m2, n);
|
||||
show_matrix(c2, n);
|
||||
free(c2);
|
||||
|
||||
return 0;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue