牛顿迭代法和二分法求方程根

0x01 牛顿迭代法和二分法求根属于编程中常见问题,下面让我们详细来说一下这个问题,先介绍牛顿迭代法,其次二分

0x02 牛顿迭代法(Newton’s method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法,多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数的泰勒级数的前面几项来寻找方程的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根,此时线性收敛,但是可通过一些方法变成超线性收敛。

0x03直接给出公式x=x0-f(x0)/f’(x0),设迭代到|x-x0|<=1e-5例子:2x^3-4*x+3x-6=0
#include <stdio.h>
#include<math.h>>
int main(){
	float x = 1.5,x0,h,f,fd;
	do{
		x0 = x;
		f = 2*x*x*x-4*x*x+3*x-6;
		fd = 6*x*x-8*x+3;
		h = f/fd;
		x = x-h;
	}while(fabs(x-x0)>=1e-5);
	return x;
}
0x04简单说一下:f就是式子,fd为f’(x),然后套用公式就好了最后判断是否在范围内,在内则输出


我这个是指定方程的,下面给大家一个博主写的,这个博主的接收键盘参数,我没写那么多
https://blog.csdn.net/janmesyang/article/details/83187465

0x05 二分法是指对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法,当数据量很大适宜采用该方法。采用二分法查找时,数据需是排好序的。

例题:方程在(-10,10)之间的根:2x^3-4x ^2+3x-6=0
#include<stdio.h>
#include<math.h>
int main()
{
	double f_x(double x);
	int i=1;//记录循环次数
 
	double x1=-10.0,x2=10.0;//左右端点
	double x;//区间中点
 
	do
	{
		x=(x1+x2)/2;//每次取中点		
		if(f_x(x)==0) break;
		else 
		{
			if(f_x(x1)*f_x(x)>0) x1=x;//这里由于曲线f(x)单调递增
			else x2=x;	//递增或者递减来换端点 
		}
		i++;
	}while(fabs(x1-x2)>1e-6); //控制循环终止条件
 
	printf("\n方程的解:x=%9.6f\t共迭代:%d次\n",x,i-1);
	return 0;
}
 
double f_x(double x)
{
	return(2*x*x*x-4*x*x+3*x-6);
}

详情可以看一下这个博主的
https://blog.csdn.net/wtdm_160604/article/details/70873559


前几天才知道excel这些强大功能,所以简易做了一个,如果有错误,麻烦师傅们指出,这些是我自己理解
。如果有需要java的记得评论一下

  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值