Нашел вот здесь в итоге:
Но не получается алгоритм, ни в какую. Может свежим взглядом, кто зацепит? (индексы сдвинуты на 1, так как в С нумерация массивов с 0)
void LDU_decomposition(matrix_t *A, matrix_t *L, matrix_t *D, matrix_t *U)
{
int i, j ,k;
double S;
Make_E(L), Make_E(D), Make_E(U);
D->p[0][0] = A->p[0][0];
for(j = 1; j < A->x; ++j)
{
for(i = 0; i <= j - 1; ++i)
{
if(i == 0)
{
U->p[i][j] = (double)(A->p[i][j]) / (D->p[i][i]);
L->p[j][i] = (double)(A->p[j][i]) / (D->p[i][i]);
}
else if(i > 0)
{
for(S = 0, k = 0; k < i - 1; ++k)
S += L->p[i][k] * D->p[k][k] * U->p[k][j];
U->p[i][j] = (double)(A->p[i][j] - S) / (D->p[i][i]);
for(S = 0, k = 0; k < j - 1; ++k)
S += U->p[k][i] * D->p[k][k] * L->p[j][k];
L->p[j][i] = (double)(A->p[j][i] - S) / (D->p[i][i]);
}
}
for(S = 0, k = 0; k < j - 1; ++k)
S += (U->p[k][j]) * (D->p[k][k]) * (L->p[j][k]);
D->p[j][j] = (A->p[j][j] - S);
}
}