我试图通过使用符号表示来评估Matlab中的三重集成。以下是我的代码:
fun = @(x,y,z) (((2*pi)^length(data))*sqrt(det(COVAR)))^-1*exp(-0.5*([x y z]-OMEGA)'*inv(COVAR)*([x y z]-OMEGA));
q = integral3(fun,-Inf,Inf,-Inf,Inf,-Inf,Inf)
上述函数是具有3x3协方差矩阵(COVAR)和10000x3样本的多变量高斯函数,(数据)理想情况下应该导致1.0作为其答案。
但它导致错误消息...... 矩阵维度必须一致。
@(x,y,z)exp(-0.5 *([x,y,z] -OMEGA)' inv(COVAR)([x,y,z] - 的错误 - OMEGA))
积分3中的错误> @(y,z)FUN(x(1)* 1(size(z)),y,z)(第138行) @(y,z)FUN(x(1)* ones(size(z)),y,z),...
integral2Calc中的错误> @(y)fun(xi 1(size(y)),y)(第18行) @(y)fun(xi ones(size(y)),y),y1i,y2i,opstruct.integralOptions),...
integralCalc / iterateScalarValued中的错误(第314行) fx = FUN(t);
integralCalc / vadapt出错(第132行) [q,errbnd] = iterateScalarValued(u,tinterval,pathlen);
integralCalc出错(第103行) [q,errbnd] = vadapt(@ minusInfToInfInvTransform,interval);
integral2Calc中的错误> @(xi,y1i,y2i)integralCalc(@(y)fun(xi * ones(size(y)),y),y1i,y2i,opstruct.integralOptions)
integral2Calc中的错误> @(x)arrayfun(@(xi,y1i,y2i)integralCalc(@(y)fun(xi * ones(size(y)),y),y1i,y2i,opstruct.integralOptions)中,x,YMIN(x)中,YMAX(X)) (第17行) innerintegral = @(x)arrayfun(@(xi,y1i,y2i)integralCalc(...
integralCalc / iterateScalarValued中的错误(第314行) fx = FUN(t);
integralCalc / vadapt出错(第132行) [q,errbnd] = iterateScalarValued(u,tinterval,pathlen);
integralCalc出错(第103行) [q,errbnd] = vadapt(@ minusInfToInfInvTransform,interval);
integral2Calc中的错误> integral2i(第20行) [q,errbnd] = integralCalc(innerintegral,xmin,xmax,opstruct.integralOptions);
integral2Calc出错(第7行) [q,errbnd] = integral2i(fun,xmin,xmax,ymin,ymax,optionstruct);
integral3 / innerintegral中的错误(第137行) Q1 = integral2Calc(...
integralCalc / iterateScalarValued中的错误(第314行) fx = FUN(t);
integralCalc / vadapt出错(第132行) [q,errbnd] = iterateScalarValued(u,tinterval,pathlen);
integralCalc出错(第103行) [q,errbnd] = vadapt(@ minusInfToInfInvTransform,interval);
integral3中的错误(第121行) Q = integralCalc(@ innerintegral,xmin,xmax,integralOptions);
我不太了解错误消息,任何帮助将不胜感激。提前谢谢。
实际上,我想仅计算第一象限中的函数值....
q = integral3(fun,0,Inf,0,Inf,0,Inf) %%something like this.
这个练习背后的想法是,如果我们恰好仅限于正参数/估计值,则计算上述多变量分布的归一化常数。
谢谢。
答案 0 :(得分:0)
假设COVAR是3x3 ......你有1x3 * 3x3:
([x y z]-OMEGA)'*inv(COVAR)
这导致1x3。然后,您尝试乘以另一个1x3:
*([x y z]-OMEGA)
因此内部维度为3和1(不同意)。
答案 1 :(得分:0)
我认为我正确地输入了序列,但是我得到了一个不同的错误。在我看来,integral3无法处理'数组值选项'。
fun = @(x,y,z) (((2*pi)^length(data))*sqrt(det(COVAR)))^-1*exp(-0.5*[x-OMEGA(1);y-OMEGA(2);z-OMEGA(3)]'*inv(COVAR)*[x-OMEGA(1);y-OMEGA(2);z-OMEGA(3)])
q = integral3(fun,-Inf,Inf,-Inf,Inf,-Inf,Inf)
使用integralCalc / finalInputChecks时出错(第515行) 函数的输出必须与输入的大小相同。如果FUN是一个数组值的被积函数,请将'ArrayValued'选项设置为true。
integralCalc / iterateScalarValued中的错误(第315行) finalInputChecks(X,FX);
integralCalc / vadapt出错(第132行) [q,errbnd] = iterateScalarValued(u,tinterval,pathlen);
integralCalc出错(第103行) [q,errbnd] = vadapt(@ minusInfToInfInvTransform,interval);
integral2Calc中的错误> @(xi,y1i,y2i)integralCalc(@(y)fun(xi * ones(size(y)),y),y1i,y2i,opstruct.integralOptions)
integral2Calc中的错误> @(x)arrayfun(@(xi,y1i,y2i)integralCalc(@(y)fun(xi * ones(size(y)),y),y1i,y2i,opstruct.integralOptions)中,x,YMIN(x)中,YMAX(X)) (第17行) innerintegral = @(x)arrayfun(@(xi,y1i,y2i)integralCalc(...
integralCalc / iterateScalarValued中的错误(第314行) fx = FUN(t);
integralCalc / vadapt出错(第132行) [q,errbnd] = iterateScalarValued(u,tinterval,pathlen);
integralCalc出错(第103行) [q,errbnd] = vadapt(@ minusInfToInfInvTransform,interval);
integral2Calc中的错误> integral2i(第20行) [q,errbnd] = integralCalc(innerintegral,xmin,xmax,opstruct.integralOptions);
integral2Calc出错(第7行) [q,errbnd] = integral2i(fun,xmin,xmax,ymin,ymax,optionstruct);
integral3 / innerintegral中的错误(第137行) Q1 = integral2Calc(...
integralCalc / iterateScalarValued中的错误(第314行) fx = FUN(t);
integralCalc / vadapt出错(第132行) [q,errbnd] = iterateScalarValued(u,tinterval,pathlen);
integralCalc出错(第103行) [q,errbnd] = vadapt(@ minusInfToInfInvTransform,interval);
integral3中的错误(第121行) Q = integralCalc(@ innerintegral,xmin,xmax,integralOptions);