?? newtoniter.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 + -