Особенность Matlab

#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)