/* solves Ax = b by cholesky decomposition. Returns x in b*/ void solve_cholesky(float **A, float *b, int dim) { cholesky_decomp(A, dim); forward_sub(A, b, dim); back_sub(A, b, dim); }
float* lup_solve(float** a, float* b, int size){ //решение через lup-разложение float** a1, *x, *y; int* p; int i, j; a1=array_initialize(size); copymatrix(a, a1, size); p=lup_decomposition(a1, size); y=forward_sub(a1, b, p, size); x=back_sub(a1, y, size); for (i = 0; i < size; i++){ for (j = 0; j < size; j++) { printf("%f ", a1[i][j]); } printf("\n"); } printf("\n\n"); printf("P \n"); for (i=0; i<size;i++){ printf("%d ", p[i]); } printf("\n"); printf("\n\nL\n\n"); for (i = 0; i < size; i++){ for (j = 0; j < size; j++) { if (i==j){ printf("1 "); } else if (i > j){ printf("%f ", a1[i][j]); } else { printf("0 "); } } printf("\n"); } printf("\n\n"); printf("\n\nU\n\n"); for (i = 0; i < size; i++){ for (j = 0; j < size; j++) { if (i <= j){ printf("%f ", a1[i][j]); } else { printf("0 "); } } printf("\n"); } printf("\n\n"); return x; }