#math #matlab #integral
#математика #matlab #интеграл
Вопрос:
У меня возникли проблемы при оценке следующего двойного интеграла:
Очевидно, что эти проблемы вызывает колебательный характер функции cos. Когда я увеличиваю f и g до больших чисел, matlab жалуется на особенности и неудачную интеграцию.
(3 - 2*cos(y).*cos(f*x g*y) - cos((f-1)*x g*y)) ./ (4 - 2*cos(y).*(cos(y) cos(x))) dxdy
Превышение пределов — от числа пи до числа пи для x и от числа пи до числа пи для y.
Я использовал:
quad2d(@(x,y)my_func(x,y,f,g),-pi,pi,-pi,pi)
Любая помощь или идеи, пожалуйста???
Комментарии:
1. Пожалуйста, отредактируйте свой пост, чтобы включить интеграл, который вы пытаетесь вычислить.
2. Это также помогло бы показать фактический код, который вы выполняете (включая значения f и g, которые вызывают проблемы), и точные ошибки / предупреждения, которые вы получаете. Когда я пробую это с «высокими» значениями (f = g = 100) У меня нет проблем, если я установил MaxFunEvals достаточно высоко.
3. Попробуйте 0 и 130. Даже если значение MaxFunEvals установлено астрономически высоким, оно не будет оценивать интеграл. Это дает: Не конечный результат. Интеграция не удалась. Вероятно, сингулярность.
4. >> (quad2d(@(x, y)my_func(x,y,0,139),-pi,pi,-pi,pi, ‘MaxFunEvals’,1e5)); Предупреждение: результат не конечный. Интеграция не удалась. Вероятно, сингулярность. > В quad2d на 242
Ответ №1:
Сначала вам нужно проверить, является ли это математической проблемой или проблемой программирования. Для ваших входных данных f и g, равных 0 и 130, ребра вашего интеграла действительно уходят в бесконечность. Поэтому неудивительно, что matlab вычисляет до бесконечности, потому что это действительно ответ.
Теперь, чтобы быть уверенным, край подынтегрального выражения может уходить в бесконечность без того, чтобы общий интеграл также уходил в бесконечность, но если вы строите результаты по мере приближения к пределу pi, общий интеграл не приближается к пределу и продолжает расти по мере приближения к pi.
z = zeros(1, 100);
dd = logspace(-8, -2, 100);
for i = 1 : 100
d = dd(i);
z(i) = quad2d(@(x,y)my_func(x,y,0,130),-pi d,pi-d,-pi d,pi-d);
end
plot(log10(dd), z)