Ошибка Matlab при вычислении двойного интеграла
Я пытаюсь вычислить двойной интеграл, но получаю ошибку.
Мой код:
clear
Gamma = rand([22,1]);
data_i = rand([1,10]);
Y_1 = 1;
fun = @(D_star, Y_0 ) fun1(D_star , Y_1 , Y_0 , Gamma , data_i);
p = integral2 ( fun , 0 , 1 , 0 , 1);
и функция fun1 определяется как
function [p] = fun1(D_star , Y_1 , Y_0 , Gamma , data_i)
gamma=Gamma(1:3);
beta_1=Gamma(4:5);
beta_0=Gamma(6:7);
alpha_D=Gamma(8);
alpha_1=Gamma(9);
alpha_0=Gamma(10);
sigma2_1=Gamma(11);
sigma2_0=Gamma(12);
Lambda=Gamma(13:17);
sigma2_M=Gamma(18:22);
Sigma2_temp = [1 ; sigma2_1 ; sigma2_0 ; sigma2_M];
Alpha = [alpha_D ; alpha_1 ; alpha_0 ; Lambda];
Sigma2 = Alpha * Alpha' + diag(Sigma2_temp);
Z = data_i(3:5);
X = data_i(3:4);
M = data_i(6:10);
Mu = [Z*gamma , X*beta_1 , X*beta_0 , zeros(1,5) ]';
YY = [D_star ; Y_1 ; Y_0 ; M' ];
p = mvnpdf(YY,Mu,Sigma2);
end
Я не думаю, что есть проблема в определении функций, потому что я могу оценить их (например, fun(1,1) дает мне ответ). Я получаю сообщение об ошибке:
Error using vertcat
Dimensions of matrices being concatenated are not consistent.
Error in fun1 (line 23)
YY = [D_star ; Y_1 ; Y_0 ; M' ];
Error in @(D_star,Y_0)fun1(D_star,Y_1,Y_0,Gamma,data(n,:))
Error in integral2Calc>integral2t/tensor (line 228)
Z = FUN(X,Y); NFE = NFE + 1;
Error in integral2Calc>integral2t (line 55)
[Qsub,esub] = tensor(thetaL,thetaR,phiB,phiT);
Error in integral2Calc (line 9)
[q,errbnd] = integral2t(fun,xmin,xmax,ymin,ymax,optionstruct);
Error in integral2 (line 106)
Q = integral2Calc(fun,xmin,xmax,yminfun,ymaxfun,opstruct);
Я попробовал также команду -quad2d- вместо -integral2- и получил похожую ошибку. Есть идеи?
1 ответ
Я нашел проблему. Согласно документации, при использовании -integral2- функция внутри интеграла должна получить массив обеих переменных в качестве входных данных и вернуть массив в качестве выходных данных.