我正在进行一些相当简单的线性衰减和吸收计算,从高中数学开始,我似乎记得有一个近似值:
1-EXP(-mu * T)
何时
mu * t<< 1
这种近似是否存在?我认为这是一个泰勒系列的扩展,但在查看旧的数学教科书后无法说服自己。
非常感谢任何帮助或指示。
答案 0 :(得分:0)
mu * t加O((mu * t)^ 2)
要了解原因,请尝试将其重写为f(u) = 1-exp(-u)
,并在u=0
点进行Taylor series展开。
答案 1 :(得分:0)
例如,如果您使用的是C ++ 11,它将此功能作为标准库的一部分:expm1
。
在您的情况下,您可以将其称为-expm1(-mu*t)
。
否则,您可以通过简单地删除第一个来轻松地从expm1
的Maclaurin系列中导出exp(x)
的Maclaurin系列。下面在expm1_maclaurin
中给出了一个实现。
将其与内置expm1
:
#include <cmath>
#include <iostream>
#include <limits>
using namespace std;
double expm1_maclaurin( double x )
{
const double order = 10;
double retval = 1.0;
for( int i = order ; 1 < i ; --i ) retval = 1.0 + x*retval/i;
return x*retval;
}
int main()
{
cout.precision(numeric_limits<double>::digits10);
for( int i = 0 ; i <= 32 ; ++i )
{
double x = i < 0 ? 1.0 * (1u<<-i) : i < 32 ? 1.0 / (1u<<i) : 0;
cout << "x=" << x << ' '
<< expm1(x) << ' '
<< expm1_maclaurin(x) << ' '
<< ( expm1(x) == expm1_maclaurin(x) ) << endl;
}
return 0;
}
输出:
x=1 1.71828182845905 1.71828180114638 0
x=0.5 0.648721270700128 0.648721270687366 0
x=0.25 0.284025416687742 0.284025416687735 0
x=0.125 0.133148453066826 0.133148453066826 1
x=0.0625 0.0644944589178594 0.0644944589178594 1
x=0.03125 0.0317434074991027 0.0317434074991027 1
...
对于所有正面x <= 1/8
,结果等于double
的完整expm1
精度。