⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3.cholesky分解法.cpp

📁 cholesky算法
💻 CPP
字号:
#include "iostream.h"
#include "math.h"
#define n 3

void main()
{
	int i , j , k ;
	double sum ;
	double a[n][n] , b[n]  ;
	double x[n], y[n] ;

	cout << "输入对称正定矩阵a[n][n]:" << endl;
	for (i = 0 ; i < n ; i++)
	{
		for(j = 0 ; j < n ; j++)
		{
			cin >> a[i][j] ;
		}
	}

	cout << "输入b[n]:" << endl ;
	for(i = 0 ; i < n ; i++)
	{
		cin >> b[i] ;
	}  //  输入部分

	
	for(k = 0 ; k < n ; k++)
	{
		a[k][k] = sqrt(a[k][k]) ;
		for(i = k + 1 ; i < n ; i++)
		{
			a[i][k] = a[i][k] / a[k][k] ;
		}
		for(j = k + 1 ; j < n ; j++)
		{
			for(i = j ; i < n ; i++)
			{
				a[i][j] = a[i][j] - a[i][k] * a[j][k] ;
			}
		}
	}    //   求L*sqrt(D)

	for(i = 0 ; i < n ; i++)
	{
		for(j = i ; j < n ; j++)
		{
			a[i][j] = a[j][i] ;
		}
	}     //    得到LU矩阵
   
	y[0] = b[0] ;
	for(i = 1 ; i < n ; i++)
	{
		sum = 0.0 ;
		for( j = 0 ; j <= i-1 ; j++)
		{
			sum = sum + a[i][j] * y[j] ;
		}
		y[i] = b[i] - sum ;
	}
	cout << "输出y1到yn:" << endl ;
	for(i = 0 ; i < n ; i++)
	{
		cout << y[i] << ' ' ;
	}  //  按LU分解法求y[i]并输出
	cout << endl;

	x[n-1] = y[n-1] / a[n-1][n-1] ;
	for (i = n-2 ; i >= 0 ; i--)
	{
		sum = 0.0 ;
		for( j = i + 1 ; j < n ; j++)
		{
			sum = sum + a[i][j] * x[j] ;
		}
		x[i] = (y[i] - sum) / a[i][i] ;
	}
	cout << "输出x1到xn:" << endl ;
	for( i = 0 ; i < n ; i++)
	{
		cout << x[i] << ' ' ;
	}  //  按x[i]并输出
	cout << endl ;
}



/*  实验矩阵
       5  2  -4
       2  1  -2
	   -4 -2  5
	   */

	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -