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

Другие вопросы по тегам