当mu * t非常小时,1-exp(-mu * t)的近似值

时间:2014-07-10 04:38:29

标签: algebra approximation

我正在进行一些相当简单的线性衰减和吸收计算,从高中数学开始,我似乎记得有一个近似值:

1-EXP(-mu * T)

何时

mu * t<< 1

这种近似是否存在?我认为这是一个泰勒系列的扩展,但在查看旧的数学教科书后无法说服自己。

非常感谢任何帮助或指示。

2 个答案:

答案 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精度。