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

📄 直接三角分解法.cpp

📁 计算数值方法的几个源程序,牛顿法,三角法,追赶法等
💻 CPP
字号:
#include<iostream>
#include<iomanip>
#include<fstream>
using namespace std;
//
const int SIZE=100;
double a[SIZE][SIZE];
double u[SIZE][SIZE]={0};
double l[SIZE][SIZE]={0};
double b[SIZE];
int n;//n维
double EPS;//精确度
double x[SIZE];
//
void input()//从文件中读入
{
	ifstream in("in.txt");
	if(!in){cout<<"文件中没有数据!请先在文本中输入数据!"<<endl;exit(1);}
	in>>n;
	for(int i=0;i<n;++i)
	{
		for(int j=0;j<n;++j)
		{
			in>>a[i][j];
		}
	}
	for(int k=0;k<n;++k)
		in>>b[k];
	in>>EPS;
	cout<<"成功读入!"<<endl;
}
//
void print()//原始显示数据
{
	cout<<left<<"A矩阵的原始数据 :"<<endl;
	for(int i=0;i<n;++i)
	{
		for(int j=0;j<n;++j)
			cout<<setw(10)<<a[i][j]<<' ';
		cout<<endl;
	}
	cout<<"B矩阵的原始数据 :"<<endl;
	for(int k=0;k<n;++k)
		cout<<setw(10)<<b[k]<<' ';
	cout<<endl;
}
//
void d1()//处理上三解
{
	double sum;
	for(int i=n-1;i>=0;--i)
	{
		sum=0;
		if(i==(n-1))
			x[n-1]=b[n-1]/u[n-1][n-1];
		else
		{
			for(int j=i+1;j<n;++j)
			{
				sum+=-u[i][j]*x[j];
			}
			x[i]=(sum+b[i])/u[i][i];
		}
	}
}
//
void showx()//显示x
{
	cout<<endl;
	cout<<"最后X的值为:"<<endl;
	for(int i=0;i<n;++i)
	{
		cout<<left<<setw(10)<<x[i]<<' ';
	}
	cout<<endl;
}
void deal()//处理
{
	int i,j,k,g,h;
	double sum;
	b[n]=0;
	for(i=0;i<n+1;++i)
	{
		a[i][n]=b[i];
		a[n][i]=0;
	}
	//
	for(i=0;i<n+1;++i)
	{
		if(i==0)
		{
			for(j=i;j<n+1;++j)
			{
				u[i][j]=a[i][j];
				l[j][i]=a[j][i]/a[i][i];
			}
		}
		else
		{
			//U
			for(j=i;j<n+1;++j)
			{
				sum=0;
				for(k=0;k<j;k++)
					sum+=l[i][k]*u[k][j];
				u[i][j]=a[i][j]-sum;
			}
			//L
			for(j=i;j<n+1;++j)
			{
				sum=0;
				for(k=0;k<j;k++)
					sum+=l[j][k]*u[k][i];
				l[j][i]=(a[j][i]-sum)/u[i][i];
			}
		}
	}
	for(i=0;i<n;++i)
		b[i]=u[i][n];
}
//
void print2()
{
	int i,j;
	//U
	cout<<"显示U矩阵 :"<<endl;
	for(i=0;i<n+1;++i)
	{
		for(j=0;j<n;++j)
		{
			cout<<setw(10)<<u[i][j]<<' ';
		}
		cout<<endl;
	}
	cout<<endl;
	//L
	cout<<"显示L矩阵 :"<<endl;
	for(i=0;i<n+1;++i)
	{
		for(j=0;j<n;++j)
		{
			cout<<setw(10)<<l[i][j]<<' ';
		}
		cout<<endl;
	}
	cout<<endl;
	//B
	cout<<"显示B矩阵 :"<<endl;
	for(i=0;i<n;++i)
	{
		cout<<setw(10)<<b[i]<<' ';
	}
	cout<<endl;
}
//
void main()
{
	input();
	print();
	deal();
	print2();
	d1();
	showx();
}

⌨️ 快捷键说明

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