Поэтому мне нужно оценить двойной интеграл по октаве[![question][1]][1]
>> x1 = 1;
>> x2 = 0;
>> y1 = 2;
>> y2 = 0;
>> f = @(x,y) (y-x)./((x+y).^3);
>> integral2(f,x2,x1,y2,y1);
Я ввел приведенный выше код, но он выдает ошибку: «Достигнуто максимальное количество подплиток, точность может быть низкой» и дает NAN в качестве ответа. Любые решения? Это интеграл, который мне нужно оценить: https://i.stack.imgur.com/Xv5AM.png
Вероятно, это связано с тем, что функция, оцененная как 0,0, возвращает NaN.
В связи с чем возникает вопрос, как бы вы хотели, чтобы обращались с 0,0?
Кажется, что предел равен нулю, поэтому вы можете попробовать исключить его с точностью до числовой точности.
Следующее:
a = integral2(f,x2+eps,x1,y2+eps,y1, 'method', 'iterated');
сработало для меня, но интерпретация этого результата зависит от вас ...
Вы можете определить функцию f
для вашего интеграла:
f = @(x,y) (y-x)./(x+y).^3
Обратите внимание на поэлементные функции ./
и .^
, чтобы избежать матричных операций. Теперь используйте функцию dblquad
:
dblquad(f,0,2,0,1)
где эти последние четыре входных аргумента являются вашими пределами интегрирования для x
и y
. Вы также можете указать другой допуск и функцию интегратора с дополнительными входными аргументами, но в этом случае значения по умолчанию работают нормально. Я получил ответ, который вы ожидали с помощью этого метода.
Для однострочной операции вы можете пропустить создание подынтегральной функции, используя
dblquad( @(x,y) (y-x)./(x+y).^3 , 0 , 2 , 0 , 1 )
Благодарю. Это отлично сработало для меня.
хорошо, теперь он дает мне 0,1667 в качестве ответа, но фактический ответ 0,333333