Ошибка размера входного массива для четырехкратного интегрирования с использованием вложенного интеграла2

Мне нужно выполнить четырехкратную интеграцию с помощью integral2 функция в Matlab. Код ниже:

Rb = @(rho_1,phi_1) rho_1.*cos(phi_1);
Sb = @(rho_2,phi_2) rho_2.*cos(phi_2);
Tb = @(rho_1,phi_1,rho_2,phi_2) rho_1.*cos(phi_1)-rho_2.*cos(phi_2);
InnerIntegrand = @(rho_1,phi_1,rho_2,phi_2) Rb(rho_1,phi_1).*Sb(rho_2,phi_2).*Tb(rho_1,phi_1,rho_2,phi_2);
InnerIntegral = @(rho_1,phi_1) integral2(@(rho_2,phi_2) InnerIntegrand(rho_1,phi_1,rho_2,phi_2),0,3,0,2*pi);
II = integral2(InnerIntegral,0,3,0,2*pi);

куда InnerIntegrand (rho_1,phi_1,rho_2,phi_2) это интеграл. InnerIntegral оценивает более rho_2 а также phi_2который вызывается из внешнего integral2 (интеграция по rho_1 а также phi_1).

Я получаю ошибку:

Error using  .* 
Matrix dimensions must agree.

Error in @(rho_1,phi_1,rho_2,phi_2)Rb(rho_1,phi_1).*Sb(rho_2,phi_2).*Tb(rho_1,phi_1,rho_2,phi_2)


Error in @(rho_2,phi_2)InnerIntegrand(rho_1,phi_1,rho_2,phi_2)


Error in integral2Calc>integral2t/tensor (line 238)
        Z1 = FUN(X(VTSTIDX),Y(VTSTIDX)); NFE = NFE + 1;

Ошибка происходит из-за различных размеров массива двух integral2 звонки? В чем проблема?

1 ответ

Смотрите мой ответ на этот похожий вопрос. В вашем случае вы можете использовать

integral2(@(rho_1,phi_1)arrayfun(InnerIntegral,rho_1,phi_1),0,3,0,2*pi)
Другие вопросы по тегам