线性代数中可以将一个正定矩阵分解为唯一的一个下三角矩阵及其共轭转置矩阵的乘积,Cholesky矩阵分解。计算效率将比LU分解提高两倍以上。
A = [L][L]T
计算公式如下:
// CPP program to decompose a matrix using
// Cholesky Decomposition
#include <bits/stdc++.h>
using namespace std;
const int MAX = 100;
void Cholesky_Decomposition(int matrix[][MAX],
int n)
{
int lower[n][n];
memset(lower, 0, sizeof(lower));
// Decomposing a matrix into Lower Triangular
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
int sum = 0;
if (j == i) // summation for diagnols
{
for (int k = 0; k < j; k++)
sum += pow(lower[j][k], 2);
lower[j][j] = sqrt(matrix[j][j] -
sum);
} else {
// Evaluating L(i, j) using L(j, j)
for (int k = 0; k < j; k++)
sum += (lower[i][k] * lower[j][k]);
lower[i][j] = (matrix[i][j] - sum) /
lower[j][j];
}
}
}
// Displaying Lower Triangular and its Transpose
cout << setw(6) << " Lower Triangular"
<< setw(30) << "Transpose" << endl;
for (int i = 0; i < n; i++) {
// Lower Triangular
for (int j = 0; j < n; j++)
cout << setw(6) << lower[i][j] << "\t";
cout << "\t";
// Transpose of Lower Triangular
for (int j = 0; j < n; j++)
cout << setw(6) << lower[j][i] << "\t";
cout << endl;
}
}
// Driver Code
int main()
{
int n = 3;
int matrix[][MAX] = { { 4, 12, -16 },
{ 12, 37, -43 },
{ -16, -43, 98 } };
Cholesky_Decomposition(matrix, n);
return 0;
}
求解Ax = b方法:先用Ly = b 求y 再另 LT x = y 求x
参考来源:https://www.geeksforgeeks.org/cholesky-decomposition-matrix-decomposition/