📄 main.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 + -