2016-04-01 4 views
1

Насколько я могу судить, никто не спросил об этом. Меня попросили вычислить двойной интеграл функции, а также тот же двойной интеграл, но с заменой порядка интеграции (т. Е. Сначала проинтегрируем для dydx, затем dxdy). Вот мой код:Ошибки при использовании функции Integral2 в MATLAB

%Define function to be integrated 
f = @(x,y) y^2*cos(x); 

    %First case. Integration order: dydx 
ymin = @(x) cos(x); 
I = integral2(f,ymin,1,0,2*pi) 

    %Second case. Integration order: dxdy 
xmin = @(y) asin(y)+2*pi/2; 
xmax = @(y) asin(y)-pi/2; 
B = integral2(f,xmin,xmax,-1,1) 

Ошибки я получаю это:

Ошибки при помощи integral2 (строка 71)

XMIN должен быть точкой скалярной плавающей.

Ошибка в EngMathsA1Q1c (строка 5)

I = integral2 (е, Ymin, 1,0,2 * пи)

Я уверен, что моя ошибка что-то простое, но я я никогда раньше не использовал Integral2, и я теряюсь за ответы. Спасибо.

ответ

1

Пер с integral2 documentation, переменные пределы приведены в качестве второй пары пределов. Таким образом, ваш первый интеграл должен быть

% Define function to be integrated 
f = @(x,y) y.^2.*cos(x); 

% First case. Integration order: dydx 
ymin = @(x) cos(x); 
I = integral2(f,0,2*pi,ymin,1); 

Множество постоянных пределов всегда идет первым, и Matlab предполагает, что первый аргумент f связан с первым набором ограничений, а второй аргумент f связан с второй набор пределов, который может быть функцией первого аргумента.


я указываю, что вторая часть, потому что, если вы хотите изменить порядок интеграции, также необходимо изменить порядок входов f соответственно. Рассмотрим следующий пример:

fun = @(x,y) 1./(sqrt(2*x + y) .* (1 + 2*x + y).^2) 

миленькое функция, которая не является симметричным в своих аргументов (т.е. fun(x,y) ~= fun(y,x)). Давайте проинтегрируем это по удлиненному треугольнику в первом квадранте с вершинами в (0,0), (2,0) и (0,1). Затем, интегрируя с dA == dy dx, мы имеем

>> format('long'); 
>> ymax = @(x) 1 - x/2; 
>> q = integral2(fun,0,2,0,ymax) 
q = 
    0.220241017339352 

Прохладный. Теперь давайте интегрироваться с dA == dx dy:

>> xmax = @(y) 2*(1-y); 
>> q = integral2(fun,0,1,0,xmax) 
q = 
    0.241956050772765 

К сожалению, это не равно первому расчету! Это потому, что fun определяется с x в качестве первого аргумента и y как вторые, но предыдущий вызов integral2 подразумевает, что y является первым аргументом fun, и он имеет постоянные пределы 0 и 1. Как мы это исправим?Просто определите новую функцию, которая переворачивает аргументы:

>> fun2 = @(y,x) fun(x,y); 
>> q = integral2(fun2,0,1,0,xmax) 
q = 
    0.220241017706984 

И все в порядке с миром. (Хотя вы можете заметить небольшие различия между двумя правильными ответами из-за допусков ошибок integral2, которые могут быть скорректированы с помощью опций в документации.)

0

Ошибка указывает, что вы не можете передать функцию для пределов интеграции. Вам нужно указать скалярное значение для каждого предела интеграции. Кроме того, в измерениях/операциях функции есть некоторые ошибки. Попробуйте это:

%Define function to be integrated 
f = @(x,y) y.^2.*cos(x);%changed to .^ and .* 

%First case. Integration order: dydx 
%ymin = @(x) cos(x); 
I = integral2(f,-1,1,0,2*pi)%use scalar values for limits of integration 

%Second case. Integration order: dxdy 
%xmin = @(y) asin(y)+2*pi/2; 
%xmax = @(y) asin(y)-pi/2; 
B = integral2(f,0,2*pi,-1,1)% same issue, must use scalars