Почему интеграл от 1/x будет ln(x), а не ln(|x|)?

Форум пользователей пакета Maple

Модератор: Admin

ovmihailov
Сообщения: 19
Зарегистрирован: Чт ноя 02, 2017 1:25 pm

Почему интеграл от 1/x будет ln(x), а не ln(|x|)?

Сообщение ovmihailov » Ср фев 14, 2018 9:31 pm

Помогите, пожалуйста, разобраться с идеологией Maple.

Команда int(1/x,x) дает ln(x), а не ln(abs(x)).
Можно ли сделать так, чтобы Maple, интегрируя 1/x, писал ln(abs(x)), а не ln(x)?

И еще один вопрос о понимании работы Maple с логарифмом.
Почему последовательность команд restart: with( RealDomain ); assume(x>0); diff(ln(-x),x); дает 1/x, хотя по моим представлениям Maple должен запротестовать и отказаться дифференцировать - ведь ему сказано, что x - действительная отрицательная переменная.

Markiyan Hirnyk
Сообщения: 1210
Зарегистрирован: Вс дек 04, 2011 11:07 pm

Re: Почему интеграл от 1/x будет ln(x), а не ln(|x|)?

Сообщение Markiyan Hirnyk » Чт фев 15, 2018 11:55 am

Вы пишите
Команда int(1/x,x) дает ln(x), а не ln(abs(x)).
Можно ли сделать так, чтобы Maple, интегрируя 1/x, писал ln(abs(x)), а не ln(x)?

Вопрос, насколько я помню, обсуждался на MaplePrimes и там было сказано, что это сделать сложно и ненужно. Неопределенный интеграл является средством для вычисления определенного интеграла, а в определенном интеграле от 1/x по любому интервалу, не содержащему 0, никаких проблем в Мэйпле не возникает. Математика дает тот же ответ.
Относительно RealDomain выскажу свое личное мнение: пакет сделан некачественно и не документирован.

Kitonum
Сообщения: 2032
Зарегистрирован: Ср дек 31, 2008 1:55 pm
Откуда: г. Пенза

Re: Почему интеграл от 1/x будет ln(x), а не ln(|x|)?

Сообщение Kitonum » Чт фев 15, 2018 12:32 pm

Просто Maple так спроектирован, что он возвращает одну типичную первообразную функцию, а не неопределённый интеграл (множество всех первообразных). Поэтому и нет произвольной постоянной в ответе. Также из двух промежутков (x<0, x>0) результат возвращается только для промежутка x>0 . Если вы хотите получить результат для x<0 , то это легко сделать от руки (или в Maple) заменой переменной:

IntegrationTools:-Change(Int(1/x, x), u=-x);
value(%);
subs(u=-x, %);


Особого смысла в этом нет, т.к. уже указывал Markiyan Hirnyk в приложениях обычно используется определённый интеграл, который корректно вычисляется в любом связном промежутке.
Наконец стоит отметить, что тот результат, который обычно можно найти в любом учебнике ln(|x|)+C также не вполне корректен, т.к. произвольная постоянная для x<0 и x>0 не обязательно должна быть одной и той же. Вот правильный ответ для всей числовой оси (конечно x<>0):

Изображение

ovmihailov
Сообщения: 19
Зарегистрирован: Чт ноя 02, 2017 1:25 pm

Re: Почему интеграл от 1/x будет ln(x), а не ln(|x|)?

Сообщение ovmihailov » Пт фев 16, 2018 9:43 am

Большое спасибо!