newtoniter.txt
来自「牛顿迭代法的C++ 算法」· 文本 代码 · 共 86 行
TXT
86 行
#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 + =
减小字号Ctrl + -
显示快捷键?