Newton 牛顿迭代法求根公式及其改进算法

简介

在这里插入图片描述

代码

#include<bits/stdc++.h>
using namespace std;

double f(double x)
{
//	cout<<"f(x):  "<<x*x*x+2*x*x+10*x-20<<endl;
	return x*x*x+2*x*x+10*x-20;
 } 

double f_(double x){
//	cout<<"f_x:  "<<x*x+4*x+10<<endl;
	return x*x*3+4*x+10;
} 

int main()
{
	double x;
	cout<<"输入计算的初值点"<<endl;
	cin>>x;
	int maxx;
	cout<<"输入最大迭代次数"<<endl;
	cin>>maxx;
	for(int i=0;i<maxx;i++)
	{
		cout<<"i: "<<i<<" x: "<<x<<endl;
//		cout<<x<<" "<<f(x)<<" "<<f_(x)<<endl; 
		x = x - f(x)/f_(x); 
	} 
	return 0;
}

结果(默认函数为:x * x * x+2 * x * x+10 * x - 20 ):
在这里插入图片描述

Newton下山法

在这里插入图片描述

代码

#include<bits/stdc++.h>
using namespace std;

double f(double x)
{
//	cout<<"f(x):  "<<x*x*x+2*x*x+10*x-20<<endl;
	return x*x*x+2*x*x+10*x-20;
 } 

double f_(double x){
//	cout<<"f_x:  "<<x*x+4*x+10<<endl;
	return x*x*3+4*x+10;
} 

int main()
{
	double x;
	cout<<"输入计算的初值点"<<endl;
	cin>>x;
	int maxx;
	cout<<"输入最大迭代次数"<<endl;
	cin>>maxx;
	double k ;
	cout<< "输入精度要求" <<endl;
	cin>>k ;
	cout<<"i: "<<0<<" x: "<<x<<endl;
	for(int i=0;i<maxx;i++)
	{
//		cout<<x<<" "<<f(x)<<" "<<f_(x)<<endl; 
		double z = 1.0,y; 
		for(int j=0;;j++)
		{
			y = x - z*f(x)/f_(x); 
			z = z*0.5;
			if(fabs(f(y))<fabs(f(x))) break;
		}
		if(fabs(y-x)<k ) { x = y;cout<<"i: "<<i<<" x: "<<x<<endl; break;		}
		x = y;
		cout<<"i: "<<i<<" x: "<<x<<endl;
	} 
	return 0;
}

结果(默认函数为:x * x * x+2 * x * x+10 * x - 20 ):
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值