用弦截法求解方程的根

Posted boltli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用弦截法求解方程的根相关的知识,希望对你有一定的参考价值。

//弦截法求解方程的根
//要求:输入左右两个端点x值
//结果:在一定精度范围内求解出方程的根
//难点:1)推导出x处的横坐标的求解公式   2)迭代掉原来的左端点或者右端点
#include "pch.h"
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
double f(double x);
double xpoint(double x1, double x2);
double root(double x1, double x2);
int main()
{
	double x1, x2, f1, f2, x;
	do 
	{
		cout << "input x1,x2:";
		cin >> x1 >> x2;
		f1 = f(x1);
		f2 = f(x2);
	} while (f1*f2>=0);
	x = root(x1, x2);
	cout << setiosflags(ios::fixed) << setprecision(7);
	cout << "A root of equation is " << x << endl;
	return 0;
}

double f(double x)
{
	double y;
	y = x * x*x - 5 * x * x + 16 * x - 80;
	return y;
}

double xpoint(double x1, double x2)
{
	double x;
	x = (x1*f(x2) - x2 * f(x1)) / (f(x2) - f(x1));
	return x;
}
double root(double x1,double x2)
{
	double x, y, y1;
	y1 = f(x1);
	do 
	{
		x = xpoint(x1, x2);
		y = f(x);
		if (y*y1 > 0)
		{
			y1 = y;   //细节:如果同号,需要替代掉左端点原来的y1值和x1值,
			x1 = x;		//y1值用于与求解出来的y值相乘以判断需要保留左端点还是右端点
		}
		else
			x2 = x;
	} while (fabs(y)>=0.00001); //fabs 双精度求绝对值函数,包含于cmath库,因而需要包含cmath头文件
	return x;
}

  

  

以上是关于用弦截法求解方程的根的主要内容,如果未能解决你的问题,请参考以下文章

弦截法(试位法)求根

数值计算方法 Chapter4. 非线性方程求根

[数值计算-8]:一元n次非线性方程求解-双点区间-弦截迭代法&Python法代码示例

计算方法用C#实现数值迭代

用C语言编写一程序求解一元二次方程的根。

python怎么求解一元二次方程的根?