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

📄 main.cpp

📁 求解一元高次方程
💻 CPP
字号:
#include <iostream.h>
#include <math.h>
#include <iomanip.h>
#include "header.h"
void main()
{
	int i=0,j=0,k=0;


	//输入方程的次数
	int i_degree;				//方程的次数
	cout<<"请输入方程的次数:";
	cin>>i_degree;

	double* dp_coefficient=new double[i_degree+1];	//方程系数
	//输入方程的系数,保存到数组中
	while (i<=i_degree)
	{
		cout<<"请输入方程"<<i_degree-i<<"次项系数:";
		cin>>dp_coefficient[i++];
	}
	ArrayDisplay(dp_coefficient,i_degree);

	cout<<setiosflags(ios::scientific);
	cout.setf(ios::fixed,ios::floatfield);
	cout<<setprecision(32);
	


	double result = 0.0;
	//bool SolveEquation(double* dp_equation, int i_degree, double d_precision,double& d_result)
//	SixSolve(1,-5,2,-3,-200,1,200,1e-6,result);
	SolveEquation(dp_coefficient,i_degree,1e-6,result);



	/************************************************************************/
	/* 对输入数据进行处理,使方程最高次项不为0                                                                     */
	/************************************************************************/
// 	int i_realDegree=i_degree;
// 	for (i=0;i<=i_degree;i++)
// 	{
// 		if (fabs(dp_coefficient[i])>=1e-6)//fabs(dp_coefficient[i])<=1e-6,精确值是多少认为是0比较合适?实际中是不不一定是精确的0?
// 		{
// 			break;
// 		}
// 		else
// 		{
// 			i_realDegree--;
// 		}
// 	}
//                 //如果是0次的话,就返回错误标志如:if(i_realDegree==0){break;return (flag=-1)?
// 	double * dp_equation=new double[i_realDegree+1];
// 	for (i=0;i<=i_realDegree;i++)
// 	{
// 		dp_equation[i]=dp_coefficient[i+i_degree-i_realDegree];
// 		
// 	}
// 	delete dp_coefficient;
// 	cout<<"实际输入方程次数为:"<<i_realDegree<<endl<<endl;
// 	cout<<"实际输入的方程系数为:";
// 	ArrayDisplay(dp_equation,i_realDegree);
	

	//求解方程的界限
// 	cout<<"方程的界限为:"<<endl;
// 	double d_boundaryRight=CalculateBoundary(dp_equation,i_realDegree);
// 	double d_boundaryLeft=-d_boundaryRight;
// 	cout<<setiosflags(ios::scientific);
// 	cout.setf(ios::fixed,ios::floatfield);
// 	cout<<setprecision(32)<<"("<<d_boundaryLeft<<","<<d_boundaryRight<<")"<<endl;
// 
// 	//初始化sturm数组,设置为100行,假设数组有100个元素
// 	double** dp_sturm;
// 	dp_sturm=new double*[100];
// 	for (i=0;i<=99;i++)                                                   
// 	{
// 		dp_sturm[i]=new double[i_realDegree+1];                          
// 	}
// 	int i_sturmCount = 0;
	
// 	double *dp_temp = new double[i_realDegree+1];
// 	while (true)
// 	{
// 		Sturm(dp_equation,i_realDegree,dp_sturm,i_sturmCount);
// 		int flag = i_realDegree;
// 		for (i=0;i<=i_realDegree;i++)
// 		{
// 			if (fabs(dp_sturm[i_sturmCount][i])<=1e-6)
// 			{
// 				flag--;
// 			}
// 		}               /*注------------------------*/
// 		if (flag!=-1)  ///不明白?什么时候认为是单根?
// 		{
// 			break;
// 		}
// 		else
// 		{
// 
// 			dp_temp= NewEquation(dp_sturm[0],dp_sturm[i_sturmCount-2],i_realDegree);
// 		//	ArrayDisplay(dp_temp,i_realDegree);
// 			if (i_realDegree==0)
// 			{
// 				cout<<"the solution of the equation is "<<dp_temp[0]<<endl;
// 				return;
// 			}
// 			else
// 			{
// 				delete dp_equation;
// 				dp_equation = new double[i_realDegree+1];
// 				for (i=0;i<=i_realDegree;i++)
// 				{
// 					dp_equation[i]=dp_temp[i];
// 				}
// 				
// 				ArrayDisplay(dp_equation,i_realDegree);
// 				i_sturmCount = 0;
// 				dp_sturm = NULL;
// 			}
// 
// 		}
// 
// 	}

	//cout<<RootCount(d_boundaryLeft,d_boundaryRight,dp_sturm,i_sturmCount,i_degree)<<endl;

	//double result = 0.0;
//bool SolveEquation(double* dp_equation, int i_degree, double d_precision,double& d_result)
//	SolveEquation(dp_equation,i_realDegree,1e-6,result);
//	SolveEquation(dp_equation,i_realDegree,dp_sturm,i_sturmCount,0.00000001,result);


// 		ArrayDisplay(dp_sturm[0],i_realDegree);
// 		ArrayDisplay(dp_sturm[1],i_realDegree);
// 
// 	dp_sturm[2]=Divide(dp_sturm[0],dp_sturm[1],i_realDegree);
// 	ArrayDisplay(dp_sturm[2],i_realDegree);
// 	for (i=0;i<i_sturmCount;i++)
// 	{
// 		ArrayDisplay(dp_sturm[i],i_realDegree);
// 	}
	//设置精度

	//示例,调用函数输出函数值
	//double result=CalculateEquation(dp_coefficient,i_degree,3.1232312312312312312312343434);

//	cout<<setprecision(32)<<result<<endl;
	//可以输出16位精度的浮点数

	//求方程的界限
//	cout<<CalculateBoundary(dp_coefficient,i_degree)<<endl;

	//假定二次方程测试二分法,x^2-2=0
//	cout<<Bisection(dp_coefficient,i_degree,0.0,3.0,0.0005);
	

	//求变号数






	//二分法求解


//	system("pause");
//	delete dp_sturm;
//	delete dp_equation;
}

⌨️ 快捷键说明

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