答案 0 :(得分:0)
restart;
sig := x->(exp((x-t)/a)-exp((-x-t)/a))
/(exp((x-t)/a)+exp((-x-t)/a)):
new := convert(simplify(convert(expand(sig(x)),trigh)),tanh);
new := tanh(x/a)
simplify(expand(convert(sig(x) - new, exp)));
0
现在,您最初写了int(f*sig(x)/x,x)
。
您并没有指出f
是x
的函数,并且作为一个常数并不重要,可以简单地将其作为一个常数因素放在积分前面。如果f
是x
的某个功能,那么您真的需要说明它是什么!
让我们考虑int(sig(x)/x,x=c..d)
。使用简化new
,即
Q := Int( new/x, x=c..d );
Q := Int(tanh(x/a)/x, x = c .. d)
QQ := IntegrationTools:-Change(Q, y=x/a, y);
QQ := Int(tanh(y)/y, y = c/a .. d/a)
您说过,您想要一个“分析解决方案”,我认为这是为符号积分结果指定一个明确的公式。但是,如果积分(在数学上)没有闭合形式的精确符号结果,您想要什么?
您是否会满足于(精确的,符号的)级数逼近?
H := (a,ord,c,d)
-> int(convert(series(eval(new/x,:-a=a),x,ord),
polynom),x=c..d):
# order 5
H(a, 5, c, d);
3 3 / 5 5\
d - c -c + d 2 \-c + d /
----- - -------- + ------------
a 3 5
9 a 75 a
对于一个特定的示例,采用a=2
和阶数为25的(精确)级数近似,则将从x=0
到x=1
的积分评估为精确有理数。
evalf(H(2, 25, 0, 1));
0.4868885956
这是这些值的数字积分,
evalf(Int( eval(new/x,a=2), x=0..1 ));
0.4868885956
特殊的数字正交可以与多种应用的级数逼近一样好,但是当然这取决于您打算对结果做些什么。
这引发了一个问题:您希望如何处理某些假定的“分析结果”,而黑箱函数无法生成浮点数值近似值,那么您应该如何做呢?为什么您“需要”“分析结果”?
顺便说一句,另一种简化它的方式(如果new
的上述构造在您的Maple版本中不成功):
new := convert(simplify(expand( numer(sig(x))/exp(-t/a) ))
/simplify(expand( denom(sig(x))/exp(-t/a) )),
compose,trigh,tanh);
/x\
new := tanh|-|
\a/