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

📄 newtoniter.txt

📁 牛顿迭代法的C++ 算法
💻 TXT
字号:


#include <iostream>
#include <cmath>
#include <string>
#include <iomanip>


typedef	double ( *PFunction ) ( double );

double	f ( double );
double	fd( double );

double	Root( double x0, double epsilon1, double epsilon2, int maxiter, PFunction f, PFunction fd )
{
	double x1;

	for ( int k = 0; k < maxiter; ++k, x0 = x1 )
	{
		if ( fabs( f( x0 ) ) < epsilon1 )
		{
			throw std::string("奇异函数,无法求解\n");
		}

		x1	= x0 - f( x0 ) / fd( x0 );

		if ( fabs( x1 - x0 ) < epsilon2 )
		{
			return x1;
		}

	}
	throw std::string("给定迭代次数内未能求得满足精度之解\n");
}


int	main()
{

	double	x0, e1, e2;
	int	N;

	std::cout	<< "依次输入"	<< std::endl;
	std::cout	<< "迭代初值 x0 : ";
	std::cin	>> x0;
	std::cout	<< "函数奇异标志 epsilon1 : ";
	std::cin	>> e1;
	std::cout	<< "解的精度要求 epsilon2 : ";
	std::cin	>> e2;
	std::cout	<< "最大迭代次数 N : ";
	std::cin	>> N;

	try
	{
		std::cout	<< "求解成功\n"
				<< std::setprecision(10)
				<< Root( x0, e1, e2, N, f, fd )
				<< std::endl;
	}
	catch ( const std::string&	msg )
	{
		std::cerr	<< msg;

		return	-1;
	}
	catch ( ... )
	{
		std::cerr	<< "Ooops !!! Unknown exception caught !!!"	<< std::endl;
		return	-1;
	}

	system("PAUSE");
	return 0;
}


double	f ( double x )
{
	return x * exp( x ) -1;
}

double	fd( double x )
{
	return exp( x ) * ( 1.0 + x ) ;
}
 

⌨️ 快捷键说明

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