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

📄 gaosi.h

📁 高斯消去法解方程组
💻 H
字号:

#include"stdlib.h"
#include<iostream.h>
#include<fstream.h>
#include<iomanip.h>
#include<math.h>

class CGaosi_Xiaoyuan
{
protected:
	float **xishu_juzhen;      //系数矩阵
	float *jie_juzhen;         //解矩阵
	float *changshu_juzhen;    //常数矩阵
	int num_of_jieshu;        //方程的阶数
	int n;                    //精确位数
protected:
	int XiaoYuan(); 
	int QiuJie();
	int Print_xiaoyuan_fangcheng();
public: 
	CGaosi_Xiaoyuan(char *,int);
	~CGaosi_Xiaoyuan();
	void Print_yanshi_fangcheng();
	void Print_result();
};

CGaosi_Xiaoyuan::CGaosi_Xiaoyuan(char *File_name,int m)
{
	ifstream input(File_name);        //打开数据文件
	if(!input)                      //如果不能打开就报错
	{
		cout<<"con't open the file"<<endl;
		exit(0);
	}
	else
	{
		input>>num_of_jieshu;                    //读入方程的阶数         
		xishu_juzhen=new float*[num_of_jieshu];  //开辟系数矩阵内存
		changshu_juzhen=new float[num_of_jieshu];//开辟常数矩阵内存
		jie_juzhen=new float[num_of_jieshu];     //开辟解矩阵内存

		for(int i=0;i<num_of_jieshu;i++)
		{
			xishu_juzhen[i]=new float[num_of_jieshu];
			for(int j=0;j<num_of_jieshu;j++)             //读入系数矩阵
				input>>xishu_juzhen[i][j]; 
			input>>changshu_juzhen[i];                 //读入常数矩阵
			jie_juzhen[i]=0;                          //把解向量初始化为0              
		}
	}
	n=m;                                            //计算精度
}
CGaosi_Xiaoyuan::~CGaosi_Xiaoyuan()
{
	for(int i=0;i<num_of_jieshu;i++)
		delete []xishu_juzhen[i];
	delete [] changshu_juzhen;
	delete [] jie_juzhen;
	delete [] xishu_juzhen;
}


int CGaosi_Xiaoyuan::XiaoYuan()                      //消元
{
	float temp;
	for(int k=0;k<num_of_jieshu-1;k++)
	{
		if(xishu_juzhen[k][k]==0)                    //判断能否进行到底
		{
			cout<<"error! con't go on"<<endl;
			return 0;
		}
		for(int i=k+1;i<num_of_jieshu;i++)
		{
			temp=xishu_juzhen[i][k]/xishu_juzhen[k][k];
			for(int j=k;j<num_of_jieshu;j++)		
				xishu_juzhen[i][j]-=temp*xishu_juzhen[k][j];
			changshu_juzhen[i]-=temp*changshu_juzhen[k];
		}
	}
	return 1;
}




int CGaosi_Xiaoyuan::QiuJie()               //迭代求解
{
	if(!XiaoYuan())
		return 0;
	else
		for(int i=num_of_jieshu-1;i>=0;i--)
		{
			float temp=0;
			for(int j=i+1;j<num_of_jieshu;j++)
				temp+=xishu_juzhen[i][j]*jie_juzhen[j];
			jie_juzhen[i]=(changshu_juzhen[i]-temp)/xishu_juzhen[i][i];
		}
		return 1;
}



void CGaosi_Xiaoyuan::Print_yanshi_fangcheng()      //打印原始方程
{
	
	cout<<"你要求解的方程为:"<<endl;               
	for(int i=0;i<num_of_jieshu;i++)
	{			
		for(int j=0;j<num_of_jieshu-1;j++)
			cout<<setiosflags(ios::fixed)<<setprecision(n)<<
			setw(10)<<xishu_juzhen[i][j]<<"X"<<j<<"+";
		cout<<setw(10)<<xishu_juzhen[i][num_of_jieshu-1]<<"X"<<num_of_jieshu-1;
		cout<<setw(10)<<"="<<changshu_juzhen[i];
		cout<<endl;
	}
}


int CGaosi_Xiaoyuan::Print_xiaoyuan_fangcheng()    //打印消元后的方程组
{
	if(!QiuJie())
	{
		cout<<"不能求解 A[k][k]=0"<<endl;
		return 0;
	}
	else
	{
		cout<<"消元后方程变为:"<<endl;   
		for(int i=0;i<num_of_jieshu;i++)
		{
			for(int j=0;j<num_of_jieshu-1;j++)
				cout<<setiosflags(ios::fixed)<<setw(10)<<setprecision(n)
				<<xishu_juzhen[i][j]<<"X"<<j<<"+";
			cout<<setw(10)<<xishu_juzhen[i][num_of_jieshu-1]<<"X"<<num_of_jieshu-1;
			cout<<setw(10)<<"="<<changshu_juzhen[i]<<endl;
		}
	}
	return 1;
}

void  CGaosi_Xiaoyuan::Print_result()     //打印结果
{
	if(Print_xiaoyuan_fangcheng())
	{
		cout<<"得到的解为:"<<endl;      
		for(int i=0;i<num_of_jieshu;i++)
			cout<<setiosflags(ios::fixed)<<setw(7)<<setprecision(n)
			<<setw(5)<<"X"<<i<<"="<<jie_juzhen[i]<<endl;
	}
}

⌨️ 快捷键说明

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