我实现了一个C++代码,用于数值求解在点x_0处的函数的n阶导数:
double n_derivative( double ( *f )( double ), double x_0, int n )
{
if( n == 0 ) return f( x_0 );
else
{
const double h = pow( __DBL_EPSILON__, 1/3 );
double x_1 = x_0 - h;
double x_2 = x_0 + h;
double first_term = n_derivative( f, x_2, n - 1 );
double second_term = n_derivative( f, x_1, n - 1);
return ( first_term - second_term ) / ( 2*h );
}
}
我想知道这对你来说是否是一个好的实现方式,或者有没有更好的方法来用C++编写它。问题在于我注意到第n阶导数在n大于3时会发散。你知道如何解决吗?
1/3 == 0
的意思是“1除以3等于0”。 - Ranoiaeteppow(__DBL_EPSILON__, 1/3);
不会按预期工作,而且每次函数调用都计算会非常昂贵,最好将其存储为静态常量。 - phuclv