二分逼近/牛顿迭代——一元高次非线性方程求解

原创 2016年08月29日 15:15:12
#include"iostream"
#include"cstdio"
#include"cstring"
#include"cstdlib"
#include"cmath"
#define precision 0.00000001

using namespace std;

int count=0;

//一元多次方程求解
double function(double x)
{
	return 2*x*x+3.2*x-1.8;
}

double binary(double x,double y)
{
	double mid=(x+y)/2.0;
	while(fabs(x-y)>precision)
	{
		if(function(mid)==0) break;
		if(function(x)*function(mid)<0) y=mid;
		else x=mid;
		mid=(x+y)/2;
		count++;
	} 
	return mid;
}

double function2(double x)   //返回导数,高精度代倒数 
{
	return (function(x+0.000005)-function(x-0.000005))/0.00001; 
}

double newtown(double x)
{
	double x1=x-function(x)/function2(x);
	while(fabs(x1-x)>precision)
	{
		if(function(x1)==0) break;
		x=x1;
		x1=x-function(x)/function2(x);
		count++;
	}
	return x1;
}

int main()
{
	cout<<binary(-0.8,8.0)<<endl;
	cout<<count<<endl;
	count=0;
	cout<<newtown(8)<<endl;
	cout<<count<<endl;
	count=0;
	cout<<newtown(-8)<<endl;
	cout<<count<<endl;
	return 0;
} 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

ccsu 1027 一元三次方程求解 (牛顿迭代)

设r是f(x) = 0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y = f(x0)+f'(x0)(x-x0),求出L与x轴交点的横坐标 x1...

用牛顿方法解一元非线性方程的根(Matlab实现)

题目:用牛顿法求方程x-cos(x)=0的实根(精确到1E-6)。 (1)要求用函数调用。 (2)进一步研究和弦截法作比较。 算法分析: (1)       此题是利用牛顿方法解一...
  • wxwlll
  • wxwlll
  • 2011-10-30 14:09
  • 10201

牛顿迭代法解非线性方程matlab实现

1.功能 本程序采用牛顿法,求实系数高次代数方程 f(x)=a0xn+a1xn-1+…+an-1x+an=0 (an≠0)    (1) 的在初始值x0附近的一个根。 2.使用说明 (1)函...
  • suelog
  • suelog
  • 2014-09-10 17:13
  • 2107

非线性方程的迭代解法

  • 2015-06-10 22:06
  • 259KB
  • 下载

数论 一元线性方程的求解 详解

很久以前就看过关于一元线性方程的求解方法和中国剩余定理的运用;但是那个时候对于

梯度下降和牛顿迭代——qjzcy的博客

梯度下降和牛顿迭代数值优化会经常遇到。网上搜了搜发现各大神已经总结的非常完美了。自己就手动推一遍牛顿迭代的公式好了,当作复习。 梯度下降和牛顿迭代主要做的事情就两步 1、 找到搜索的方向, 2...
  • qjzcy
  • qjzcy
  • 2016-07-18 22:38
  • 1133
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)