twodiv.cpp

来自「数值计算中二分法的一种实现。」· C++ 代码 · 共 91 行

CPP
91
字号
#include "iostream"
#include "math.h"
using namespace std;
struct Node
{
	double a;
	int b;
};

//计算结点值
double Calculate(Node n,double x)
{
	return n.a*pow(x,n.b);
}

//计算函数值
double f(Node N[],int num,double x)
{
	int i=0;
	double value=0.00;
	for (i=0;i<num;i++)
	{
		value+=Calculate(N[i],x);
	}

	return value;
	
}
//二分法
double TowDiv(Node N[],int num,double x1,double x2)
{

	//判断区间是否有根
	if (f(N,num,x1)*f(N,num,x2)>1e-6)
	{
		cout<<"wrong space!"<<endl;
		return 0;
	}
	//确保x1<x2
	double temp=0.00;
	if(x1>x2)
	{
		temp=x1;x1=x2;x2=temp;
	}	

	static double mid=x1;
	//反复计算直到约等于0
	while(abs(f(N,num,mid))>1e-10)
	{
		//与x1同号则修改x1
		if(f(N,num,mid)*f(N,num,x1)>1e-10)
			x1=mid;
		else
			x2=mid;
		mid=(x1+x2)/2.0;
				
	}
	return mid;
}

void main()
{
	int i=0,j=0;
	double x1=0.0,x2=0.0;
	cout<<"请输入结点数 "<<endl;
	cin>>i;
	cout<<"请输入区间(如-1 2表示[-1,2]):"<<endl;
	cin>>x1>>x2;
	Node *N=new Node[i];
	//方程输入
	while(j<i)
	{
		cout<<"请输入系数(如2x^2,就输入2):";
		cin>>N[j].a;
		cout<<"请输入指数(如2x^4,就输入4):";
		cin>>N[j].b;
		j++;
	}
	j=0;
	//显示方程
	cout<<"f(x)=";
	while(j<i)
		{
			cout<<N[j].a<<"x^"<<N[j].b;
			if(j!=i-1)
				cout<<"+";
			j++;
		}
	cout<<endl<<endl;
	cout<<TowDiv(N,i,x1,x2)<<endl;
}

⌨️ 快捷键说明

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