Вычислительные люди науки:
Первоначально я разместил этот вопрос на Math Stack Exchange, и кто-то сказал, что я мог бы получить «гораздо лучшие» ответы здесь:
Я новичок в численных методах и Matlab. Я пытаюсь оценить следующую сумму двух тройных интегралов (она, очевидно, может быть записана более просто, но вы все еще не можете оценить ее символически (?)). У меня возникают проблемы с тем, чтобы работал здесь, поэтому я неохотно разбил его на куски: я хочу найти сумму
и
где
и
РЕДАКТИРОВАТЬ (2 марта 2013 г.): Кто-то ответил, что они заставили Mathematica сделать интегралы символически. Я только попытался сделать это (с упрощенными версиями интегралов), и Mathematica могла сделать только два внешних из первого, и остановилась на втором. Буду признателен за помощь. Вот что я сделал.
Я пытался оценить
Интегрировать [r1 ^ 3 / r2 ^ 3 * t ^ 2 * Exp (-t ^ 2), {t, 0, r2 - r1}, {r1, 1, r2}, {r2, 1, 2}]
и Mathematica возвращается (у меня были проблемы с здесь, потому что результат длинный. Я разбил его на два уравнения. Если кто-нибудь знает хороший способ показать это, пожалуйста, сообщите мне):
Тогда я попытался оценить
с помощью
Интегрировать [(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 марта]
Я использовал команду "triplequad" от Matlab без дополнительных опций. Я управлял переменными пределами интеграции с помощью тяжелых функций, потому что я не знал другого способа сделать это. Матлаб дал мне .
Я знаю, что Matlab - хорошее программное обеспечение, но я слышал, что числовые тройные интегралы трудно сделать точно, и математики должны быть настроены скептически, поэтому я хочу как-то проверить точность этого ответа. Интегралы дают ожидаемую ценность определенного эксперимента (если кто-то хочет, я могу отредактировать этот вопрос, чтобы описать эксперимент): я реализовал эксперимент в Matlab, используя соответственно случайно сгенерированные числа, миллион раз, и усреднил результаты. Я повторил этот процесс четыре раза. Вот результаты (я прошу прощения, если я неправильно использовал слово «испытание»):
Пробная версия 1:
Пробная версия 2:
Пробная версия 3:
Пробная версия 4:
Пробная версия 5:
Хотя в каждом испытании использовался миллион образцов, значения моделирования совпадают только в первой значащей цифре. Они не достаточно близки друг к другу, чтобы я мог определить, является ли числовой тройной интеграл точным.
Так может ли кто-нибудь сказать мне, могу ли я доверять результату «тройной четверки» здесь, и при каких обстоятельствах можно доверять ему вообще?
Одним из предложений, которое я получил на Math Stack Exchange, было попробовать другое программное обеспечение, такое как Mathematica, Octave, Maple и SciPy. Это хороший совет? Люди действительно выполняют числовую работу в Mathematica и Maple? Octave - это своего рода клон Matlab, поэтому можно ли предположить, что он использует те же алгоритмы интеграции? Я даже не слышал о SciPy раньше и был бы признателен за любые мнения по этому поводу.
ОБНОВЛЕНИЕ: Кто-то из Math Stack Exchange сделал это в Maple и получил . Это согласие с тремя значительными цифрами. Это хороший знак.
Кроме того, я был бы признателен за предложения о том, как ввести длинное многострочное выражение в в Stack Exchange. Можете ли вы использовать "выровненную" среду здесь? Я пытался, и я не мог заставить его работать.
Ответы:
Ответ от Maple, вероятно, сделан компьютерной алгеброй, и, возможно, он сможет найти закрытое решение, которое затем будет оценено с использованием плавающей запятой двойной точности. Преимущество этого заключается в том, что вы не аппроксимируете интеграл конечным суммированием (и, следовательно, вводите ошибки аппроксимации), но система компьютерной алгебры найдет выражение для интеграла, которое затем можно будет оценить. Конечно, нужно быть осторожным при оценке этого выражения (для округления).
Если вы захотите сделать это с помощью SciPy, вам также потребуется прибегнуть к вложенной адаптивной квадратуре Гаусса, используя базовые подпрограммы Quadpack (Piessens et al.). В Октаве у вас будет такой же подход. И я бы не слишком удивлен , если Matlab также использует Quadpack в качестве квадратурного двигателя (так как это ссылка).
источник
infolevel[`evalf/int`] := 4
. Вы уверены, что Mape не может найти закрытое решение? Интеграл не кажется слишком сложным. Не могли бы вы опубликовать свой кленовый лист где-нибудь?