2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Вычисления [кратных несобственных инт.] в пакете Mathematica
Сообщение05.10.2018, 16:03 
Аватара пользователя


02/07/07
163
Харьков
Уважаемые форумчане,

вычисляю в пакете Mathematica 6 интегралы следующего вида:
$$\int\limits_{-1}^{1}\int\limits_{-t}^{t}\frac{d x}{\sqrt{t^2-x^2}}d t=2\pi.$$

$\mathrm{NIntegrate}[\dfrac{1}{\sqrt{t^2-x^2}},\left\{t,-1,1\right\},\left\{x,-t,t\right\}, \mathrm{MaxRecursion} \to 12, \mathrm{PrecisionGoal} \to 12,  \mathrm{Method} \to \left\{\mathrm{GlobalAdaptive, MaxErrorIncreases} \to 10000\right\}]$
и получаю набор ошибок с конечным результатом $1.09621 \times 10^{-9}.$

Как правильно вычилять численно такие инегралы в пакете Mathematica?

 Профиль  
                  
 
 Re: Вычисления в пакете Mathematica
Сообщение05.10.2018, 17:01 
Заслуженный участник
Аватара пользователя


23/07/05
17985
Москва
Asalex в сообщении #1343818 писал(а):
вычисляю в пакете Mathematica 6 интегралы следующего вида:
$$\int\limits_{-1}^{1}\int\limits_{-t}^{t}\frac{d x}{\sqrt{t^2-x^2}}d t=2\pi.$$
А зачем тут Wolfram Mathematica? Он устно моментально вычисляется. И равен, конечно, не $2\pi$. Похоже, что и Wolfram Mathematica с Вами не согласна.

 Профиль  
                  
 
 Re: Вычисления в пакете Mathematica
Сообщение05.10.2018, 17:58 
Заслуженный участник


27/04/09
28128
Формульно всё берётся прекрасно, действительно:

Integrate[1/Sqrt[t^2 - x^2], {t, -1, 1}, {x, -t, t}] и даёт и правда $2\pi$.

Но у меня восьмая версия. Может, что-то за две изменилось (хотя маловероятно, что в этом месте).

А вот NIntegrate без дополнительных опций отказывается выдавать что-нибудь кроме сообщений о проблемах. Плюс нельзя использовать опцию PrecisionGoal просто так, см. справку:
Цитата:
In most cases, you must set WorkingPrecision to be at least as large as PrecisionGoal.
Стандартной точности тут, по идее, не должно хватать (в машинное число двойной точности 24 десятичных разряда не влезает).

Смутно кажется, что если повернуть $(t,x)$ на 45°, результаты могли бы улучшиться. И действительно:

a = 1/Sqrt[2 y z];
2 Integrate[a, {y, 0, Sqrt[2]}, {z, 0, Sqrt[2] - y}] == 2 Pi (* даст True, это для проверки *)
2 NIntegrate[a, {y, 0, Sqrt[2]}, {z, 0, Sqrt[2] - y}]


даёт результат быстро и без всяких сообщений. Повышение точности (если не забывать ставить достаточное значение для WorkingPrecision, см. выше) проходит без проблем, хотя время счёта сильно увеличивается.

 Профиль  
                  
 
 Re: Вычисления в пакете Mathematica
Сообщение05.10.2018, 18:06 
Заслуженный участник


25/02/11
1797
Вот так считается:

NIntegrate[1/Sqrt[t^2 - x^2] UnitStep[Abs[t] - Abs[x]], {t, -1, 1}, {x, -1, 1}]

Область простая, а функция где надо зануляется.

 Профиль  
                  
 
 Re: Вычисления в пакете Mathematica
Сообщение05.10.2018, 18:27 
Аватара пользователя


02/07/07
163
Харьков
Vince Diesel, arseniiv, cпасибо большое! Грандиозная идея взять интеграл по простой области, и так хорошо считает.


Someone, это только простейший вид интеграла, который мне нужно вычислить, и с которым у меня были проблемы в Mathematica. На самом деле мне нужны более накрученные подынтегральные функции.

 Профиль  
                  
 
 Posted automatically
Сообщение05.10.2018, 18:44 
Заслуженный участник


09/05/12
25179
 i  Тема перемещена из форума «Математика (общие вопросы)» в форум «Околонаучный софт»
Причина переноса: тематика.

 Профиль  
                  
 
 Re: Вычисления в пакете Mathematica
Сообщение05.10.2018, 18:54 
Заслуженный участник
Аватара пользователя


23/07/05
17985
Москва
Я обращаю внимание всех на то, что функция $$F(t)=\int\limits_{-t}^t\frac{dx}{\sqrt{t^2-x^2}}$$ является нечётной. Поэтому $$\int\limits_{-1}^1F(t)dt=0\neq 2\pi.$$
Asalex в сообщении #1343862 писал(а):
это только простейший вид интеграла, который мне нужно вычислить, и с которым у меня были проблемы в Mathematica.
Ну, удивительного в этом мало. Подынтегральная функция не ограничена. Тут, наоборот, надо (приятно) удивляться, если всё прошло гладко и результат правильный.

 Профиль  
                  
 
 Re: Вычисления в пакете Mathematica
Сообщение05.10.2018, 19:18 


11/07/16
825
Vince Diesel
Увы,
Код:
NIntegrate[1/Sqrt[t^2 - x^2] UnitStep[RealAbs[t] - RealAbs[x]], {x, -1, 1}, {t, -1, 1}]

производит несколько ошибок и возвращает невычисленный интеграл.
Someone
прав:
Код:
Integrate[1/Sqrt[t^2 - x^2], {x, -t, t},  Assumptions -> t \[Element] Reals]
ConditionalExpression[\[Pi],t>0]

 Профиль  
                  
 
 Re: Вычисления в пакете Mathematica
Сообщение05.10.2018, 19:23 
Заслуженный участник


27/04/09
28128
Ой. :|

 Профиль  
                  
 
 Re: Вычисления в пакете Mathematica
Сообщение05.10.2018, 19:24 
Заслуженный участник
Аватара пользователя


09/09/14
6328
Какие-то чудеса. Вольфрам признаёт, что если брать этот интеграл по $x\in [-1;0]$, получится $-\pi $. А если по $x\in [0;1]$, тогда $\pi $. Казалось бы, каким методом его не считай, в сумме никак не должно получаться $2\pi$.

 Профиль  
                  
 
 Re: Вычисления в пакете Mathematica
Сообщение05.10.2018, 20:07 
Аватара пользователя


02/07/07
163
Харьков
Markiyan Hirnyk в сообщении #1343870 писал(а):
Vince Diesel
Увы,
Код:
NIntegrate[1/Sqrt[t^2 - x^2] UnitStep[RealAbs[t] - RealAbs[x]], {x, -1, 1}, {t, -1, 1}]

производит несколько ошибок и возвращает невычисленный интеграл.

Да, а если переставить порядок интегрирования,
Код:
NIntegrate[1/Sqrt[t^2 - x^2] UnitStep[RealAbs[t] - RealAbs[x]], {t, -1, 1}, {x, -1, 1}]

то получается без ошибок.

-- Пт окт 05, 2018 19:19:28 --

Someone в сообщении #1343868 писал(а):
Я обращаю внимание всех на то, что функция $$F(t)=\int\limits_{-t}^t\frac{dx}{\sqrt{t^2-x^2}}$$ является нечётной. Поэтому $$\int\limits_{-1}^1F(t)dt=0\neq 2\pi.$$
Да, Вы правы. Написанный мной интеграл был некорректен. там таки 0. Но метод вычисления таких двумерных интегралов - интегрированием по простой области - полезен.
Someone в сообщении #1343868 писал(а):
Asalex в сообщении #1343862 писал(а):
это только простейший вид интеграла, который мне нужно вычислить, и с которым у меня были проблемы в Mathematica.
Ну, удивительного в этом мало. Подынтегральная функция не ограничена. Тут, наоборот, надо (приятно) удивляться, если всё прошло гладко и результат правильный.

А Вас удивляет то, что мат пакеты вычисляют интегралы от неограниченных функций с интегрируемыми особенностями? Такие интегралы повсюду и часто встречаются, и их вычисления с мат пакетами это необходимость, а не приятный бонус.

 Профиль  
                  
 
 Re: Вычисления в пакете Mathematica
Сообщение05.10.2018, 23:03 


11/07/16
825
Полезно применять несколько математических систем. Мэйпл правильно находит
Код:
int(1/sqrt(t^2-x^2), [x = -t .. t, t = -1 .. 1]);
                               0

 Профиль  
                  
 
 Re: Вычисления в пакете Mathematica
Сообщение05.10.2018, 23:49 
Заслуженный участник
Аватара пользователя


23/07/05
17985
Москва
Asalex в сообщении #1343882 писал(а):
А Вас удивляет то, что мат пакеты вычисляют интегралы от неограниченных функций с интегрируемыми особенностями?
Я имею в виду численные методы, которые используют значения функции в заранее выбранных точках. Неограниченные функции не интегрируемы по Риману, поэтому интегралы от таких функций плохо вычисляются подобными методами: неудачно выбрав точки, можно получить результат, сколь угодно далёкий от правильного. А удачно или неудачно выбраны точки, обычно заранее неизвестно.

 Профиль  
                  
 
 Re: Вычисления в пакете Mathematica
Сообщение06.10.2018, 14:35 
Заслуженный участник
Аватара пользователя


26/01/14
4855
Someone в сообщении #1343909 писал(а):
Я имею в виду численные методы, которые используют значения функции в заранее выбранных точках. Неограниченные функции не интегрируемы по Риману, поэтому интегралы от таких функций плохо вычисляются подобными методами: неудачно выбрав точки, можно получить результат, сколь угодно далёкий от правильного. А удачно или неудачно выбраны точки, обычно заранее неизвестно.
Поэтому приходится при необходимости самостоятельно "вырезать" из множества интегрирования малые окрестности точек, в которых функция уходит в бесконечность, а затем с помощью мат.пакета вычислять интеграл по получившемуся множеству (на котором функция уже ограничена). В силу определения несобственного интеграла второго рода, при достаточно малом радиусе окрестностей это будет хорошее приближение для искомого интеграла. Можно ввести переменную, равную этому радиусу, и варьировать её при необходимости.

Но присоединяюсь к недоумению ТС по поводу того, почему мат.пакет даже не пытается провести эту работу самостоятельно, а вместо этого пытается интегрировать по Риману те функции, которые по Риману интегрировать нельзя.

 Профиль  
                  
 
 Re: Вычисления в пакете Mathematica
Сообщение06.10.2018, 18:37 
Заслуженный участник


27/04/09
28128
Так часто пытается вроде (по крайней мере видел сообщения о том, что не удалось справиться с той или иной проблемой другого вида типа быстрых осцилляций подынтегральной функции). Просто это, видимо, настолько в общем случае сложная вещь, что…

Кстати, кто-нибудь написал багрепорт? Может быть, они не считают такое поведение приемлемым или хотя бы захотят добавить в документацию пару абзацев. Если в самой новой версии, конечно, оно не изменилось.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group