Ошибка размера входного массива для четырехкратного интегрирования с использованием вложенного интеграла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)