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

📄 code5_2.cpp

📁 用弦截法来求非线性方程的根
💻 CPP
字号:
#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;

#define MAX 100
#define e 1e-4
double coef[MAX];
double x[MAX];

double f(double x,double t[])
{
	
	double temp=t[0];

	for(int i=1;i<=MAX;i++)
	{
		if(t[i]==99999)
			break;
		temp += t[i]*pow(x,i);
	}
	return temp;
}

int xianjie(double x0,double x1)
{
	int k;
	x[0] = x0;
	x[1] = x1;
	for(k=1;k<=MAX;k++)
	{
		x[k+1] = x[k]-f(x[k],coef)*(x[k]-x[k-1])/(f(x[k],coef)-f(x[k-1],coef));
		if(x[k+1]-x[k]<e&&x[k+1]-x[k]>-e||f(x[k+1],coef)<e&&f(x[k+1],coef)>-e)
			break;
	}
	if(k==MAX)
		return -1;
	else
		return k+1;
}
int main()
{

	cout.precision(8);
	cout.setf(ios::fixed);

	int i;
	cout<<"请输入原函数的系数,按照低次向高次的顺序!并且在完成之后输入99999! 记得系数为0的输入0!"<<endl;
	for(i=0;i<=MAX;i++)
	{
		cin>>coef[i];
		if(coef[i] == 99999)
			break;
	}
	int k;
	double x0,x1;
	cout<<"请输入x0和x1:"<<endl;
	cin>>x0;cin>>x1;
	k = xianjie(x0,x1);
	double error[MAX];
	for(i=0;i<=k;i++)
	{
		double t1,t2,t3,temp;
		t1 = x[i]-0;
		t2 = sqrt(3)-x[i];
		t3 = -sqrt(3)-x[i];
		if(t1<0) t1 = -t1;
		if(t2<0) t2 = -t2;
		if(t3<0) t3 = -t3;
		if(t1<=t2)
			temp = t1;
		else temp = t2;
		if(temp>t3)
			temp = t3;
		error[i] = temp;
	}
	cout<<"用弦截法做出的结果为:"<<endl;
	cout<<"k"<<"             x[k]                    f(x)             error"<<endl;
	for(i=0;i<=k;i++)
	{
		cout<<i<<"           "<<x[i]<<"            "<<f(x[i],coef)<<"        "<<error[i]<<endl;
	}

	return 0;
}

⌨️ 快捷键说明

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