-1

我必须计算这个表达式的值 (e1 * cos(θ) - e2 * sin(θ))/(cos(θ))^ 2 - (sin(θ))^2)如何计算极限值

这里e1和e2是一些复杂的表达式。

在θ接近PI/4的情况下,分母将接近零。但在这种情况下,e1和e2也将接近相同的值。所以在PI/4时,表达式的值将是E/sqrt(2)其中e1 = e2 = E我可以对θ= PI/4做特殊处理,但θ的值非常接近PI/4。计算这种表达式的一般策略是什么

+0

要做到这一点,您可能需要L'Hospitals规则(http://mathworld.wolfram.com/LHospitalsRule.html)。但它更多的是一个数学问题,而不是一个stackoverflow问题。 – 2014-11-06 04:53:11

+1

这个问题似乎是无关紧要的,因为它关乎数学而不是编程。 – 2014-11-06 06:20:54

+0

Off topic?那么为什么会退出一个“数学”关键字? – x64 2014-11-06 08:16:49

回答

1

这有点棘手。您需要更多地了解e1和e2的行为。首先,我将使用变量a = theta-pi/4,以便我们对a-> 0感兴趣,并写出e1 = E + d1,e2 = E + d2。设F =你的表达倍的sqrt(2)

在这些方面,我们有

F = ((E+d1)*(cos(a) - sin(a)) - (E+d2)*(cos(a) + sin(a)))/- sin(2*a) 
    = (-(2*E+d1+d2)*sin(a) + (d1-d2)*cos(a))/(-2*sin(a)*cos(a)) 
    = (E+(d1+d2)/2)/cos(a) - (d1-d2)/(2*sin(a)) 

假设D1-> 0和D2-> 0作为A-> 0的第一项将趋于到E 然而,第二项可能会趋向于任何事情,或者爆炸 - 例如,如果d1 = d2 = sqrt(a)。

我们需要假设更多,例如d1-d2在a = 0时具有导数D. 在这种情况下,我们将有

F-> E - D/2 as a->0 

为了能够计算F代表密切的值设置为0,我们需要知道的还要多。 一种方法是有这样的代码:

if (fabs(a) < small) { F = E-D/2 + C*a; } else { F = // normal code } 

因此,我们需要弄清楚什么“小”和C应该是。部分取决于你需要什么(相对)精度。最严格的要求是,在a = + - 很小时,近似值和正常代码之间的差异应该太小而不能用double来表示(如果这就是你正在使用的)。但请注意,我们不能将“小”变得太小,否则存在一个危险,因为正常代码在+ =小时将评估为0/0。一种方法是将F(或者仅仅是第二项)的分子和分母扩展为幂级数(称为二阶),将每一个除以a,然后对这些级数进行分割,使项保持二阶;第一项在这给你C以上,第二项将允许你估计这个近似的误差,因此估计'小'。