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/