Cholesky Matrix Decomposition矩阵分解算法解析

线性代数中可以将一个正定矩阵分解为唯一的一个下三角矩阵及其共轭转置矩阵的乘积,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/

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值