чи можу я довіряти цьому числовому потрійному інтегралу від Matlab?


15

Люди з обчислювальної науки:

Я спочатку опублікував це питання на біржі Math Stack, і хтось прокоментував, що я можу отримати "набагато кращі" відповіді тут:

Я новачок у числових методах та Matlab. Я намагаюся оцінити наступну суму двох потрійних інтегралів (це, очевидно, можна записати простіше, але ви все ще не можете його оцінити символічно (?)). У мене виникають проблеми з отриманням працюю тут, тому я неохоче розбив його на шматки: я хочу знайти сумуLATEX

2((1/0.3)1)2(11/0.31r10r1r0F1(r0,r1,t)exp((0.3)2t24)dtdr0dr1),

і

2((1/0.3)1)2(11/0.31r1r1r0r1+r0F2(r0,r1,t)exp((0.3)2t24)dtdr0dr1),

де

F1(r0,r1,t)=t2r03(0.3)32r13π

і

F2(r0,r1,t)=(0.3)3π3/2(r0+r1t)4(t2+2t(r0+r1)3(r1r0)2)2288(43πr03)(43πr13).

EDIT (2 березня 2013 р.): Хтось відповів, що вони мають Mathematica робити інтеграли символічно. Я просто спробував це зробити (за спрощеними версіями інтегралів), і Mathematica міг зробити лише зовнішні два з перших, і зупинився на другому. Буду вдячний за допомогу. Ось що я зробив .:

Я намагався оцінити

via

121r20r2r1r13t2exp(t2)r23dtdr1dr2

Інтегруйте [r1 ^ 3 / r2 ^ 3 * t ^ 2 * Exp (-t ^ 2), {t, 0, r2 - r1}, {r1, 1, r2}, {r2, 1, 2}]

і Mathematica повертається (у мене були проблеми з тут, оскільки результат довгий. Я розбив його на два рівняння. якщо хтось знає хороший спосіб відобразити це, будь ласка, скажіть мені:LATEX

12164r22e1r22(2e2r2(25+r2(19+2r2(1+r2)))

e1+r22(32r2(2+r22))+π(11+4r22(9+r22))Erf[1r2])dr2.

Потім я спробував оцінити

121r2r2r1r2+r1

exp(t2)(r1+r2t)4(t2+2t(r1+r2)3(r2r1)2)2r13r23dtdrdr2

використовуючи

Інтегруйте [(r1 + r2 - t) ^ 4 * (t ^ 2 + 2 * t * (r1 + r2) - 3 * (r2 - r1) ^ 2) ^ 2 * Exp [-t ^ 2] / r1 ^ 3 / r2 ^ 3, {r2, 1, 2}, {r1, 1, r2}, {t, r2-r1, r2 + r1}]

саме зараз, і Mathematica не повернув відповіді приблизно через півгодини (але у мене зараз проблеми з комп'ютерною мережею, і вони можуть бути винні).

[Кінець 2 березня редагувати]

0.007164820144202

Я знаю, що Matlab - це гарне програмне забезпечення, але я чув, що чисельні потрійні інтеграли важко точно зробити, і математики повинні бути скептичними, тому я хочу певним чином перевірити точність цієї відповіді. Інтеграли дають очікувану цінність певного експерименту (якщо хто хоче, я можу відредагувати це запитання, щоб описати експеримент): я реалізував експеримент у Matlab, використовуючи відповідні випадково згенеровані числа, мільйон разів, і усереднював результати. Я повторив цей процес чотири рази. Ось результати (прошу вибачення, якщо я неправильно використав слово "випробування"):

0.007133292603256

0.007120455071989

0.007062595022049

0.007154940168452

0.007215000289130

Хоча для кожного випробування було використано мільйон вибірок, значення моделювання узгоджуються лише у першій значній цифрі. Вони для мене недостатньо близькі один до одного, щоб визначити, чи чисельний потрійний інтеграл точний.

Тож чи може хто-небудь сказати мені, чи можу я довіряти результату "трійки" тут і за яких обставин можна довіряти йому взагалі?

Одним із пропозицій, який я отримав на Math Stack Exchange, було спробувати інше програмне забезпечення, наприклад, Mathematica, Octave, Maple та SciPy. Це хороша порада? Чи справді люди виконують чисельну роботу в Mathematica та Maple? Octave - це клон Матлаба, тож чи можу я припустити, що він використовує ті ж алгоритми інтеграції? Я навіть не чув про SciPy раніше і буду вдячний за будь-яку думку з цього приводу.


0.007163085468

LATEX


2
Результати моделювання повністю відповідають чисельному значенню, поверненому Matlab: їх середньому значенню 0,00713726 просто -1.11стандартні помилки менше, ніж те, що повернув Matlab. FWIW, Mathematica повертається0,00716308537. Він також може оцінювати ці інтеграли символічно з точки зору поліномів та функцій помилок.
1313

@whuber Дякую Я міг би поклястись, що спробував це символічно в Maple і Maple не міг цього зробити. Я спробую ще раз в Maple, і якщо це не вийде, я спробую його в Mathematica. До речі, я зробив подібний інтеграл у Maple, і я отримав величезну символічну відповідь. Здавалося, це сума і різниця дуже великих чисел, загальна сума яких була зовсім невеликою. Я підозрюю, що в остаточній відповіді була ймовірність помилки заокруглення. У подібній проблемі ви повинні використовувати символічну відповідь чи просто робити інтеграл чисельно?
Стефан Сміт

Символічні відповіді мають перевагу в тому, що вони є комбінаціями функцій, які (часто) можна ефективно обчислити до довільної точності. Зазвичай символічне рішення також піддається швидкому перерахунку, коли параметри змінюються. З цих причин часто варто шукати символічне рішення.
1313

@whuber: Я намагався робити деякі по суті еквівалентні інтеграли (змінюючи деякі константи і видаляючи кілька мультиплікативних констант) у Mathematica, і Mathematica міг робити лише дві зовнішні інтеграції першого інтеграла, і, схоже, затримався на другому. Я розмістив свій код та результати вище.
Стефан Сміт

1
Re редакція 2 березня: Зменшивши потрійний інтеграл символічно до єдиного інтегралу (у першій половині ваших інтегралів), ви багато зробили. Інтегрант дуже добре поводиться і може бути чисельно інтегрований до надзвичайно високої точності протягом частки секунди.
1313

Відповіді:


9

Перш за все, не саме програмне забезпечення (або, принаймні, не повинно бути) визначає якість рішення проблеми, це якість та доцільність застосованого алгоритму. Ви повинні перевірити, який алгоритм використовується трикратним в Matlab (я б припустив, він використовує вкладену адаптивну квадратуру Гаусса). І ви повинні перевірити, які вимагаються допуски (потрібні абсолютні та відносні допуски). Швидше за все, що за замовчуванням він лише просить10-8 відносна точність.

Відповідь, що надходить від Maple, ймовірно, зроблена комп'ютерною алгеброю, і, можливо, вона могла б знайти закрите рішення, яке потім було оцінено за допомогою плаваючої точки з подвійною точністю. Це має перевагу в тому, що ви не наближаєте інтеграл за допомогою кінцевого підсумовування (і, отже, вводите помилки наближення), але Комп'ютерна алгебра-система знайде вираз для інтеграла, який потім можна оцінити. Звичайно, слід бути обережними при оцінці цього виразу (для округлення).

Якщо ви хочете зробити це за допомогою SciPy, вам також доведеться вдатися до вкладеної адаптивної квадратури Гаусса, використовуючи основні підпрограми Quadpack (Piessens et al.). В Octave у вас буде той самий підхід. І я б не дуже здивований , якщо Matlab також використовує Quadpack в якості квадратурного двигуна (так як це посилання).


@GretVdE: Дякую за інформацію. Спершу я спробував оцінити інтеграл символічно, і Maple не міг цього зробити (тому, мабуть, це було неможливо, використовуючи стандартні функції), тому я попросив Maple зробити це чисельно. Я не знаю, який алгоритм він використовував.
Стефан Сміт

@StefanSmith: це можна дізнатися, встановивши infolevel в Maple : infolevel[`evalf/int`] := 4. Ви впевнені, що Mape не може знайти закрите рішення? Інтеграл не здається надто складним. Не могли б ви зробити свій Maple аркуш загалом десь?
GertVdE

@StefanSmith: Я б опублікував код Maple у вищезазначеному питанні.
GertVdE

Я не можу змусити Maple зараз працювати над своєю системою, але я спробував еквівалентні інтеграли в Mathematica, і Mathematica зробив лише внутрішні два першого потрійного інтеграла і зупинився на другому потрійному інтегралі. Перегляньте відредаговане запитання.
Стефан Сміт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.