【发布时间】:2018-05-11 09:43:40
【问题描述】:
我正在尝试计算双积分,但出现错误。
我的代码是:
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- 并得到了类似的错误。有什么想法吗?
【问题讨论】:
-
错误信息说明了一切。您正在尝试连接大小不匹配的矩阵。
-
是的,但我不明白为什么,因为这个功能本身就可以工作,所以它必须是集成的东西。
-
显然。该行连接了 4 个元素,其中三个直接取自输入参数。所以你的输入参数是错误的形状或大小。
-
在函数开始处放置一个调试中断,并逐步完成计算。看看哪里出了问题。这比在 SO 上提问要容易和快捷得多... :p
-
谢谢,我找到了问题。根据文档,当使用 -integral2- 时,integral 中的函数必须获取两个变量的数组作为输入并返回一个数组作为输出。
标签: matlab numerical-integration