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

📄 yakebi.cpp

📁 雅可比迭代法 解方程组
💻 CPP
字号:
// yakebi.cpp : Defines the entry point for the console application.
//

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


class CYakebi
{
protected:
	double ** xishu_juzhen;
	double * changshu_juzhen;
	double *x_m;
	double *x_m_temp;
	int  num_of_jieshu;
public:
	CYakebi(char* file_name);
	int bijiao(	double * ,	double *);
	void Diedai_qiujie();
	void Print_result();
};


CYakebi::CYakebi(char* file_name)
{
	srand( (unsigned)time( NULL ) );

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

		for(int i=0;i<num_of_jieshu;i++)
		{
			xishu_juzhen[i]=new 	double[num_of_jieshu];
			for(int j=0;j<num_of_jieshu;j++)             //读入系数矩阵
				input>>xishu_juzhen[i][j]; 
			input>>changshu_juzhen[i];                 //读入常数矩阵 
			x_m[i]=double( rand() %100 )/100;        //用随机数初始化x_m[i]
			x_m_temp[i]=0;
		}
	}
}

int CYakebi::bijiao(double * a  ,double * b)
{

	double max=0;
	double t=0;
	for(int i=0;i<num_of_jieshu;i++)
	{ 
		t=fabs(b[i] - a[i]);
		if(max<t)
			max=t;
				
	}
	if(max<1e-5)
		return 1;
	else 
		return 0;
}

void CYakebi::Diedai_qiujie()
{
	int N=100;
	double sum;

	for(int k=0;k<N;k++)
	{
		cout<<"第 "<<k+1<<" 次循环"<<endl;
		for(int i=0;i<num_of_jieshu;i++)
		{
			sum=0;

			for(int j=0;j<num_of_jieshu;j++)
				sum+=xishu_juzhen[i][j]*x_m[j];

			x_m_temp[i]=x_m[i]+( changshu_juzhen[i]-sum )/xishu_juzhen[i][i];

			
			cout<<"x_m["<<i<<"]="<<x_m[i]<< "\t x_m_temp["<<i<<"]="<<x_m_temp[i]<<endl;
		}

		if(bijiao(x_m,x_m_temp) )
			break;

		else 
			for(int i=0;i<num_of_jieshu;i++)
				x_m[i]=x_m_temp[i];

	}
}

void CYakebi::Print_result()
{
	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(4)<<
			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;
	}
	cout<<"==========================================================================="<<endl;
	cout<<"求解过程:"<<endl<<endl;

	Diedai_qiujie();

	cout<<"==========================================================================="<<endl;


	cout<<"得到的解为:"<<endl;      
	for( i=0;i<num_of_jieshu;i++)
		cout<<setiosflags(ios::fixed)<<setw(7)<<setprecision(4)
		<<setw(5)<<"X"<<i<<"="<<x_m_temp[i]<<endl;


}



void main()
{

	CYakebi yakebi("a.txt");

	yakebi.Print_result();


}

⌨️ 快捷键说明

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