【问题标题】:Error in computing the triple integral symbolically符号计算三重积分的错误
【发布时间】:2017-10-01 06:37:17
【问题描述】:

我正在尝试通过使用符号表示来评估 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]-欧米茄))

integration3 中的错误>@(y,z)FUN(x(1)*ones(size(z)),y,z)(第 138 行) @(y,z)FUN(x(1)*ones(size(z)),y,z), ...

integral2Calc 中的错误>@(y)fun(xiones(size(y)),y)(第 18 行) @(y)fun(xiones(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 行) 内积分 = @(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] = 积分计算(innerintegral,xmin,xmax,opstruct.integralOptions);

integral2Calc 中的错误(第 7 行) [q,errbnd] = 积分2i(fun,xmin,xmax,ymin,ymax,optionstruct);

integral3/innerintegral 中的错误(第 137 行) Q1 = 积分2Calc( ...

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 = 积分计算(@innerintegral,xmin,xmax,integralOptions);

我不太了解错误消息,我们将不胜感激。提前谢谢你。

其实我只想计算第一象限的函数值....

q = integral3(fun,0,Inf,0,Inf,0,Inf) %%something like this.

如果我们碰巧只限于正参数/估计值,则此练习背后的想法是计算上述多元分布的归一化常数。

谢谢。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    假设 COVAR 是 3x3... 你有一个 1x3*3x3 in:

    ([x y z]-OMEGA)'*inv(COVAR)
    

    这会产生 1x3。然后,您尝试乘以另一个 1x3:

    *([x y z]-OMEGA)
    

    所以内部维度是3和1(不同意)。

    【讨论】:

    • 亲爱的 Mike C。感谢您的回答。感谢您指出一个小错误。但我还没有解决原来的问题。你能看看错误信息吗?在我看来,integral3 无法处理“数组值选项”。
    • 你试过integral3(fun, -Inf, Inf, -Inf, Inf, -Inf, Inf, 'ArrayValued', 'true')吗?
    • 我试过integral3,但它似乎没有提供阵列输入。在为多元高斯尝试嵌套 int 3 次并为所有变量限制 [-Inf, Inf] 之后,我能够恢复所需的结果,即。 1.0。但是当所有 3 个变量的限制为 [0, Inf] 时,代码需要很长时间......
    • 我已将我的问题作为新答案发布....请看一下。谢谢。
    【解决方案2】:

    我认为我输入了正确的序列,但我得到了一个不同的错误。在我看来,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 行) 内积分 = @(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] = 积分计算(innerintegral,xmin,xmax,opstruct.integralOptions);

    integral2Calc 中的错误(第 7 行) [q,errbnd] = 积分2i(fun,xmin,xmax,ymin,ymax,optionstruct);

    integral3/innerintegral 中的错误(第 137 行) Q1 = 积分2Calc( ...

    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 = 积分计算(@innerintegral,xmin,xmax,integralOptions);

    【讨论】:

      猜你喜欢
      • 2018-05-11
      • 2018-10-29
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多