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

📄 died.cpp

📁 数值分析 查值 迭代 我把一些方法分别做成了库文件
💻 CPP
字号:
#include "DieD.h"
#include <iostream.h>




bool Jacobi(
				                 double* equal,//方程得系数指针
				                            int n,//方程得维数
								   double e,//迭代精度
								            int d,//迭代次数
											double *y
										   )
{

	
	int i,j;
	double **a;                          //将外部的方程系数读入该函数的数组a[n][n],b[n]
	             
	
	//分配数组空间
	a=new double*[n];
   	for(i=0;i<n;i++)
	{
		a[i]=new double[n];
	}
	double *b=new double[n];

	//读取数组值
	double *xx=equal; 
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			a[i][j]=*xx;
			xx++;
		}
		b[i]=*xx;
		xx++;
	}


	cout<<"输入的方程矩阵形式为:\n";
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			cout<<a[i][j]<<"   ";
		}
		cout<<b[i];
		cout<<"\n";
	}

	

	//定义未知数空间
	double *x;
	double *yy=y;
	x=new double[n];
	for(i=0;i<n;i++)
	{
		x[i]=*yy;
		yy++;
	}

	//迭代
	int l;
	double u=0;
	double *temp;
	double sum;
	temp=new double[n];
	for(l=0;l<d;l++)
	{
		//保存x[i]
		for(i=0;i<n;i++)
		{
			temp[i]=x[i];
		}
         
		//计算新的x[i]
		for(i=0;i<n;i++)
		{
			sum=0;
			for(int j=0;j<n;j++)
			{
				sum+=a[i][j]*temp[j];
			}
			sum-=a[i][i]*x[i];
			x[i]=(b[i]-sum)/a[i][i];
		}
        
		//求出现在的评价标准u,即新旧x[i]相差最大的绝对值
        u=0;
		for(i=0;i<n;i++)
		{
			temp[i]=(temp[i]-x[i]>=0?temp[i]-x[i]:x[i]-temp[i]);
		}
		for(i=0;i<n;i++)
		{
			if(temp[i]>u)
			u=temp[i];
		}

        //与要求精度比较,达到则停止并输出
		if(u<=e)
		{
			for(i=0;i<n;i++)
			{
				cout<<x[i]<<"  ";
			}
		
			delete [n]x;
			delete [n]b;
			delete [n]temp;
			for(i=0;i<n;i++)
			{
			delete [n]a[i];
			}
				delete [n]a;
			
			return true;
		}
	}


		cout<<"不可以得到满意结果\n";
		for(i=0;i<n;i++)
			{
				cout<<x[i]<<"  ";
			}
		  
		    delete [n]x;
			delete [n]b;
			delete [n]temp;
			for(i=0;i<n;i++)
			{
			delete [n]a[i];
			}
			delete [n]a;
		
		return false;



}





bool  Gauss(double* equal,//方程得系数指针
				                            int n,//方程得维数
								   double e,//迭代精度
								            int d,//迭代次数
											double *y
										   )
{

	
	int i,j;
	double **a;                          //将外部的方程系数读入该函数的数组a[n][n],b[n]
	             
	
	//分配数组空间
	a=new double*[n];
   	for(i=0;i<n;i++)
	{
		a[i]=new double[n];
	}
	double *b=new double[n];

	//读取数组值
	double *xx=equal; 
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			a[i][j]=*xx;
			xx++;
		}
		b[i]=*xx;
		xx++;
	}


	cout<<"输入的方程矩阵形式为:\n";
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			cout<<a[i][j]<<"   ";
		}
		cout<<b[i];
		cout<<"\n";
	}

	

	//定义未知数空间
	double *x;
	x=new double[n];
	for(i=0;i<n;i++)
	{
		x[i]=*y;
		y++;
	}

	//迭代
	int l;
	double u=0;
	double *temp;
	double sum;
	temp=new double[n];
	for(l=0;l<d;l++)
	{
		//保存x[i]
		for(i=0;i<n;i++)
		{
			temp[i]=x[i];
		}
         
		//计算新的x[i]
		for(i=0;i<n;i++)
		{
			sum=0;
			for(int j=0;j<n;j++)
			{
				sum+=a[i][j]*x[j];
			}
			sum-=a[i][i]*x[i];
			x[i]=(b[i]-sum)/a[i][i];
			
		}
		
        
		//求出现在的评价标准u,即新旧x[i]相差最大的绝对值
        u=0;
		for(i=0;i<n;i++)
		{
			temp[i]=(temp[i]-x[i]>=0?temp[i]-x[i]:x[i]-temp[i]);
		}
		for(i=0;i<n;i++)
		{
			if(temp[i]>u)
			u=temp[i];
		}

        //与要求精度比较,达到则停止并输出
		if(u<=e)
		{
			for(i=0;i<n;i++)
			{
				cout<<x[i]<<"  ";
			}
		
			delete [n]x;
			delete [n]b;
			delete [n]temp;
			for(i=0;i<n;i++)
			{
			delete [n]a[i];
			}
				delete [n]a;
			
			return true;
		}
	}


		cout<<"不可以得到满意结果\n";
		for(i=0;i<n;i++)
			{
				cout<<x[i]<<"  ";
			}
		  
		    delete [n]x;
			delete [n]b;
			delete [n]temp;
			for(i=0;i<n;i++)
			{
			delete [n]a[i];
			}
			delete [n]a;
		
		return false;
}






bool  Songc(double* equal,//方程得系数指针
				                            int n,//方程得维数
								   double e,//迭代精度
								            int d,//迭代次数
											double * y,
											double w//松弛因子
										   )
{

	
	int i,j;
	double **a;                          //将外部的方程系数读入该函数的数组a[n][n],b[n]
	             
	
	//分配数组空间
	a=new double*[n];
   	for(i=0;i<n;i++)
	{
		a[i]=new double[n];
	}
	double *b=new double[n];

	//读取数组值
	double *xx=equal; 
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			a[i][j]=*xx;
			xx++;
		}
		b[i]=*xx;
		xx++;
	}


	cout<<"输入的方程矩阵形式为:\n";
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			cout<<a[i][j]<<"   ";
		}
		cout<<b[i];
		cout<<"\n";
	}

	

	//定义未知数空间
	double *x;
	x=new double[n];
	for(i=0;i<n;i++)
	{
		x[i]=*y;
		y++;
	}

	//迭代
	int l;
	double u=0;
	double *temp;
	double sum;
	temp=new double[n];
	for(l=0;l<d;l++)
	{
		//保存x[i]
		for(i=0;i<n;i++)
		{
			temp[i]=x[i];
		}
         
		//计算新的x[i]
		for(i=0;i<n;i++)
		{
			sum=0;
			for(int j=0;j<n;j++)
			{
				sum+=a[i][j]*x[j];
			}
			sum-=a[i][i]*x[i];
			x[i]=(b[i]-sum)/a[i][i];
			x[i]=temp[i]+(x[i]-temp[i])*w;
			
		}     
        
		//求出现在的评价标准u,即新旧x[i]相差最大的绝对值
        u=0;
		for(i=0;i<n;i++)
		{
			temp[i]=(temp[i]-x[i]>=0?temp[i]-x[i]:x[i]-temp[i]);
		}
		for(i=0;i<n;i++)
		{
			if(temp[i]>u)
			u=temp[i];
		}

        //与要求精度比较,达到则停止并输出
		if(u<=e)
		{
			for(i=0;i<n;i++)
			{
				cout<<x[i]<<"  ";
			}
		
			delete [n]x;
			delete [n]b;
			delete [n]temp;
			for(i=0;i<n;i++)
			{
			delete [n]a[i];
			}
				delete [n]a;
			
			return true;
		}
	}


		cout<<"不可以得到满意结果\n";
		for(i=0;i<n;i++)
			{
				cout<<x[i]<<"  ";
			}
		  
		    delete [n]x;
			delete [n]b;
			delete [n]temp;
			for(i=0;i<n;i++)
			{
			delete [n]a[i];
			}
			delete [n]a;
		
		return false;
}

⌨️ 快捷键说明

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