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

📄 lu算法.cpp

📁 <计算方法>LU算法过程及程序
💻 CPP
字号:
/*******************************************************************
*程序名称:LU算法 
*学生姓名:吴龙武  学号:031150003
*完成时间:05年12月
*备注:平台/工具:WIN98+VC6.0
*********************************************************************/

#include<iostream.h>
#define max_n      20

void main()
{
	int i, j, k, n, m;
	double sum1=0, sum2=0;
	double a[max_n][max_n], L[max_n][max_n], U[max_n][max_n], 
			b[max_n], x[max_n], y[max_n];
	cout<< "未知数的个数:";
	cin>>n;
	cout<<"请输入a[i][j]和b[i]:\n";
	for (i=0; i<n; i++)
	{
		for (j=0; j<n; j++)
		{
			cout<<"请输入a["<<i<<"]["<<j<<"]:  ";
			cin>>a[i][j];
		}
	}
	for (i=0; i<n; i++)
	{
		cout<<"请输入b["<<i<<"]:  ";
		cin>>b[i];
	}
	
	//L,U矩阵
	for(i=0; i<n; i++)
	{	L[i][i] = 1;
	   for(j=0; j<n;j++)
	   {	if(j>i)
				L[i][j]=0;	   
	        if(j<i)
			    U[i][j] =0;
	   }

	}
	for (j=0; j<n; j++)
	{	
		U[0][j] = a[0][j];	         //U的第一行等于a的第一行
	}

	for (i=0; i<n; i++)
	{
		L[i][0] = a[i][0] / U[0][0];       //L的第一列的值
	}
	for(k=2; k<=n; k++)
	{
		for(j=k; j<=n; j++)
		{
			for(m=1; m<=k-1; m++)
		    	 sum1 = L[k-1][m-1] * U[m-1][j-1] +sum1 ;
			U[k-1][j-1] = a[k-1][j-1] - sum1; 	
		}                     //U矩阵已全部知道
	}
	for(k=2; k<=n; k++)
	{	for(i=k+1; i<=n; i++)
		{	
			for(m=1; m<=k-1; m++)
			 	sum2 = L[i-1][m-1] * U[m-1][k-1] +sum2 ;
			L[i-1][k-1] = (a[i-1][k-1]- sum2) / U[k-1][k-1]; 		
		}                                  //L矩阵已全部知道

	}                    /*至此,L,U两个矩阵已知道*/
	cout<<endl;
	cout<<"a矩阵:\n";
	for(i=0; i<n; i++)
	{
		for (j=0; j<n; j++)
		{	cout <<   a[i][j]<<"        ";}
			cout<<endl;
		}
		cout<<endl;
		cout<<"L矩阵:\n";
		for(i=0; i<n; i++)
		{	for (j=0; j<n; j++)
			{cout<<L[i][j]<<"       ";}
			cout<<endl;
		}
		cout<<endl;
		cout<<"U矩阵:\n";
		for(i=0; i<n; i++)
		{	for (j=0; j<n; j++)
			{cout<<U[i][j]<<"       ";}
			cout<<endl;
		}


	/*求LY=b*/
	double sum3=0;
	for (i=0; i<n; i++)
	{
		if (i != 0)
		{
			for (j=i-1; j>=0; j--)
				sum3=L[i][j] * y[j];		
		}
		y[i] = b[i] - sum3;
	}                   /*现已知道y[i]*/

	/*求UX=Y*/
	double sum4=0; 
	for (i=n-1; i>=0; i--)
	{
		if(i != n-1)
		{
			for (j=n-1; j>i; j--)
				sum4= U[i][j] * x[j];
		}
		x[i] = (y[i] - sum4)/U[i][i];
		
		cout << "方程组的解是:"<<endl;
		cout<<"x["<<i<<"]= "<<x[i]<<endl;
	}
}

/*
未知数的个数:2
请输入a[i][j]和b[i]:
请输入a[0][0]:  2
请输入a[0][1]:  3
请输入a[1][0]:  7
请输入a[1][1]:  1
请输入b[0]:  5
请输入b[1]:  8

a矩阵:
2        3
7        1

L矩阵:
1       0
3.5       1

U矩阵:
2       3
0       -9.5
方程的解是:
x[1]= 1
方程的解是:
x[0]= 1
Press any key to continue  
*/
























⌨️ 快捷键说明

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